Regresyonda nitel değişken kodlama “tekilliklere” yol açar


17

"Kalite" adı verilen bağımsız bir değişkenim var; bu değişkenin 3 tepki yöntemi vardır (kötü kalite; orta kalite; yüksek kalite). Bu bağımsız değişkeni çoklu doğrusal regresyonuma tanıtmak istiyorum. Bir ikili bağımsız değişken (kukla değişken, ben kod 0/ olabilir 1) olduğunda, bir çoklu doğrusal regresyon modeline tanıtmak kolaydır.

Ancak 3 yanıt yöntemi ile bu değişkeni şu şekilde kodlamaya çalıştım:

Bad quality      Medium quality      High quality

     0                1                  0
     1                0                  0
     0                0                  1
     0                1                  0

Ama çoklu doğrusal regresyonumu yapmaya çalıştığımda bir sorun var: modalite Medium qualitybana veriyor NA:

Coefficients: (1 not defined because of singularities) 

Bu değişken "kalite" yi 3 yöntemle nasıl kodlayabilirim? Faktör ( factorin R) olarak bir değişken oluşturmam gerekiyor mu, ancak bu faktörü çoklu doğrusal regresyonda tanıtabilir miyim?


2
Belki de soruyu yanlış anlıyorum, ancak kategorik bir değişkenin tüm seviyelerini, mükemmel bir eşbiçimlilik nedeniyle doğrusal bir regresyona dahil edemezsiniz. Kategorilerinizden biri, diğer grupların karşılaştırıldığı bir temel grup sağlamak için bırakılacaktır.
RickyB

1
Burada tekil bir matrisi oluşturan şeyin istatistiksel bağlamında olağanüstü bir açıklama var: ne-korelasyon-bir-matris-tekil yapar?
gung - Monica'yı eski durumuna döndürün

Yanıtlar:


23

Yaşadığınız problem (yani, "tekillikler") çoklu-doğrusallık örneği olarak düşünülebilir . Çoklu doğrusallık genellikle şu şekilde tanımlanır:

Bir veya daha fazla öngörücü değişken, diğer öngörücü değişkenlerin doğrusal bir birleşimidir.

Aslında bu oldukça katı bir tanımdır; öyle mükemmel çoklu bağlantı ve kolayca olmanın değişkenlerinizin herhangi olmadan multicollinearity ile ilgili bir sorun olabilir mükemmel başkalarının doğrusal kombinasyonlarını. Ayrıca, nadiren mükemmel çoklu doğrusallık oluşur. Ancak, bunun meydana gelebileceği bir durumla karşılaştınız. Bize nasıl görmesini ister mükemmel tahmin medium qualityDiğer iki kategoriden bizim bilgisinden (biz bir regresyon modeli ile yapacağım medium qualityolduğu , ve & şunlardır X 1 & X 2 , sırasıyla): Y = β 0 + β 1Ybad qualityhigh qualityX1X2
, hata terimi olduğunu Not ε

Y=β0+β1X1+β2X2
ε Belirtilen , çünkü bunu mükemmel bir şekilde tahmin edebiliriz. Bunun için , β 1 = - 1 ve β 2 = - 1 ayarladık . Şimdi, varsa , o zaman X 1 = 1 , dışarı iptal eden β 0 ( 1β0=1β1=1β2=1bad qualityX1=1β0 ) ve X 2 = 0 olacak şekilde terim de iptal edilir ( - 1 × 0 ). Böylece, bir tahmin değeri ile bırakılır 0 için Y (tam doğru). Diğer olasılıkları çözmek için size bırakacağım (her zaman, sizin durumunuzda çalışır). 1+-1x1X2=0-1x00Ymedium quality

O zaman ne yapmalısın? Kategorik bir değişkeni temsil ederken, genellikle referans hücre kodlaması kullanırız (genellikle 'sahte kodlama' olarak adlandırılır). Bunu yapmak için, kategorik değişkenimizin bir seviyesini referans seviyesi olarak seçiyoruz; seviye kendi kukla kodu almıyor, ama basitçe bütün alarak belirtilmek Diğer tüm seviyeleri için kukla kodlarında 's. Kategorik değişkeninizin diğer seviyeleri, daha önce yaptığınız gibi kukla kodlarla temsil edilir. (Bununla ilgili daha fazla bilgi için cevabımı burada görebilirsiniz: Regresyon, örneğin haftanın günlerine göre .)0R , bir factorveR hepsini sizin için yapacak - doğru bir şekilde yapılacak ve çok daha uygun - yine de, 'perde arkasında' olan şeyin bu olduğunu anlamaya değer.


Tüm yorumlarınız için teşekkürler! R kullanıyorum, eğer iyi anladıysam, R faktörü ile her şeyi yapacak, hiçbir şey yapmama gerek yok! Mükemmel ! Tanklar bir kez daha!
varin sacha

Kesişim noktasını lm( + 0) formülünde sıfıra ayarlarsanız işe yarar mı?
Firebug

1
@Pirebug, seviye kullanıyorsanız kodlama anlamına gelir (yani, her seviye için ayrı bir değişkeniniz vardır), o zaman kesişmeyi sıfıra ayarlayabilirsiniz ve iyi çalışması gerekir. Değişken katsayıların ve hipotez testlerinin anlamı farklı olsa da.
gung - Monica'yı eski

10

@gung teoriyi açıkladı. Aşağıda açıklamak için pratik bir örnek verilmiştir:

set.seed(1)
pred1 <- factor(c("bad", "med", "high"), levels=c("bad", "med", "high"))
df1 <- data.frame(y=20*abs(runif(6)),
                  x=rnorm(6),
                  q=sample(pred1, 6, replace=TRUE)
                  )
l1 <- lm(y ~ x, data=df1)
### add variable q    
l2 <- lm(y ~ x + q, data=df1)
### look at dummy variables generated in creating model
model.matrix(l2)

Bu bize referans seviyesinin (tümü 0s) badburada satır 4'te görüldüğü gibidir:

  (Intercept)          x qmed qhigh
1           1  1.5952808    1     0
2           1  0.3295078    0     1
3           1 -0.8204684    0     1
4           1  0.4874291    0     0
5           1  0.7383247    1     0
6           1  0.5757814    0     0

Şimdi kukla değişkenleri kendimiz kodlarsak ve hepsini kullanarak bir modele uymaya çalışırsak:

df1 <- within(df1, {
       qbad <- ifelse(q=="bad", 1, 0)
       qmed <- ifelse(q=="med", 1, 0)
       qhigh <- ifelse(q=="high", 1, 0)
       })    
lm(y ~ x + qbad + qmed + qhigh, data=df1, singular.ok=FALSE)

Beklenen hatayı alıyoruz: singular fit encountered


1
Zevk. Umarım şimdi hepsi açıktır. factorgenellikle sizin için kukla değişken kodlama ile ilgilenir, ancak 'kaputun altında' neler olup bittiğinin farkında olmak iyidir.
dardisco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.