Pengodean variabel kualitatif dalam regresi mengarah ke "singularitas"

17

Saya memiliki variabel independen yang disebut "kualitas"; variabel ini memiliki 3 modalitas respons (kualitas buruk; kualitas sedang; kualitas tinggi). Saya ingin memperkenalkan variabel independen ini ke dalam regresi linier berganda. Ketika saya memiliki variabel independen biner (variabel dummy, saya dapat kode 0/ 1) mudah untuk memperkenalkannya ke dalam model regresi linier berganda.

Tetapi dengan 3 modalitas respons, saya telah mencoba untuk mengkodekan variabel ini seperti ini:

Bad quality      Medium quality      High quality

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

Tetapi ada masalah ketika saya mencoba melakukan regresi linier berganda: modalitas Medium qualitymemberi saya NA:

Coefficients: (1 not defined because of singularities) 

Bagaimana saya bisa mengkodekan "kualitas" variabel ini dengan 3 modalitas? Apakah saya harus membuat variabel sebagai faktor ( factordalam R) tetapi kemudian dapatkah saya memperkenalkan faktor ini dalam regresi linier berganda?

varin sacha
sumber
2
Mungkin saya salah memahami pertanyaan, tetapi Anda tidak dapat memasukkan semua level variabel kategorikal ke dalam regresi linier karena kolinearitas sempurna. Salah satu kategori Anda akan dihapus untuk menyediakan grup dasar yang dibandingkan dengan grup lainnya.
RickyB
1
Ada penjelasan yang luar biasa dalam konteks statistik tentang apa yang membentuk matriks tunggal di sini: apa-korelasi-membuat-matriks-tunggal?
gung - Reinstate Monica

Jawaban:

23

Masalah yang Anda alami (yaitu, "singularitas") dapat dianggap sebagai contoh multikolinieritas . Multikolinieritas sering didefinisikan sebagai:

Satu atau lebih variabel prediktor adalah kombinasi linear dari variabel prediktor lainnya.

Ini sebenarnya definisi yang agak ketat; itu multikolinieritas sempurna , dan Anda dapat dengan mudah memiliki masalah dengan multikolinieritas tanpa salah satu variabel Anda menjadi kombinasi linear sempurna dari yang lain. Selain itu, multikolinieritas sempurna jarang terjadi. Namun, Anda telah menemukan sebuah kasus di mana itu dapat terjadi. Mari kita lihat bagaimana kita bisa sempurna memprediksi medium qualitydari pengetahuan kita tentang dua kategori lainnya (kami akan melakukan ini dengan model regresi di mana medium qualityadalah , dan & adalah X 1 & X 2 , masing-masing): Y = β 0 + β 1Ybad qualityhigh qualityX1X2
Perhatikan bahwa tidak ada istilah kesalahan, ε , ditentukan, karena kita dapat memprediksi ini dengan sempurna. Untuk melakukannya, kita menetapkan β 0 = 1 , β 1 = - 1 , dan β 2 = - 1 . Sekarang, jika sudah, maka X 1 = 1 , yang membatalkan β 0 ( 1

Y=β0+β1X1+β2X2
εβ0=1β1=1β2=1bad qualityX1=1β0 ), dan X 2 = 0 sehingga istilah itu dibatalkan juga ( - 1 × 0 ). Jadi, kita dibiarkan dengan nilai prediksi 0 untuk Y (), yang persis benar. Saya akan menyerahkan kepada Anda untuk mencari tahu kemungkinan lain (selalu berhasil, dalam kasus Anda). 1+1×1X2=01×00Ymedium quality

0RfactorR akan melakukan ini semua untuk Anda - itu akan dilakukan dengan benar, dan itu jauh lebih mudah - meskipun demikian, perlu dipahami bahwa inilah yang terjadi 'di balik layar'.

gung - Reinstate Monica
sumber
Terima kasih atas semua komentar Anda! Saya menggunakan R jadi jika saya mengerti dengan baik, dengan faktor R akan melakukan segalanya, saya tidak perlu melakukan apa-apa! Sempurna! Tank sekali lagi!
varin sacha
Jika Anda mengatur intersep ke nol dalam lmrumus ( + 0) apakah itu akan berhasil?
Firebug
1
@ Firebug, jika Anda menggunakan pengkodean level means (yaitu, Anda memiliki variabel terpisah untuk setiap level), maka Anda dapat mengatur intersep ke nol & itu akan berfungsi dengan baik. Meskipun makna dari koefisien variabel & tes hipotesis akan berbeda.
gung - Reinstate Monica
10

@ung telah menjelaskan teorinya dengan jelas. Berikut adalah contoh praktis untuk menggambarkan:

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)

0bad

  (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

Sekarang jika kita mengkodekan variabel dummy sendiri dan mencoba menyesuaikan model menggunakan semuanya:

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)

Kami mendapatkan kesalahan yang diharapkan: singular fit encountered

dardisco
sumber
1
Kesenangan. Semoga semuanya jelas sekarang. factorumumnya akan menangani pengkodean variabel dummy untuk Anda, tetapi baik untuk mengetahui apa yang terjadi 'di bawah tenda'.
dardisco