Якісне кодування змінної в регресії призводить до "особливості"


17

У мене є незалежна змінна назва "якість"; ця змінна має 3 способи реагування (погана якість; середня якість; висока якість). Я хочу ввести цю незалежну змінну в свою багаторазову лінійну регресію. Коли у мене є двійкова незалежна змінна (фіктивна змінна, я можу кодувати 0/1 ), її легко ввести в модель множинної лінійної регресії.

Але з 3-ма способами відповіді я спробував кодувати цю змінну так:

Bad quality      Medium quality      High quality

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

Але виникає проблема, коли я намагаюся зробити свою багаторазову лінійну регресію: модальність Medium qualityдає мені NA:

Coefficients: (1 not defined because of singularities) 

Як я можу кодувати цю змінну "якість" за допомогою 3-х модальностей? Чи потрібно мені створювати змінну як фактор ( factorв R), але чи можу я ввести цей фактор у множинну лінійну регресію?


2
Можливо, я розумію це питання, але ви не можете включити всі рівні категоріальної змінної до лінійної регресії через досконалу колінеарність. Одна з ваших категорій буде відмінена, щоб надати базову групу, з якою порівнюють інші групи.
RickyB

1
У статистичному контексті є видатне пояснення того, що являє собою сингулярну матрицю: що-кореляція-робить-a-матриця-сингулярна?
gung - Відновити Моніку

Відповіді:


23

Проблема, яку ви маєте (тобто "особливості"), можна розглядати як приклад мультиколінеарності . Мультиколінеарність часто визначають як:

Одна чи більше змінних предиктора є лінійною комбінацією інших змінних предиктора.

Це, власне, досить суворе визначення; це ідеальна мультиколінеарність, і ви можете легко виникнути проблеми з мультиколінеарністю, без того, щоб ваші змінні були ідеальними лінійними комбінаціями інших. Більше того, ідеальна мультиколінеарність трапляється рідко. Однак ви натрапили на випадок, коли це може статися. Давайте подивимося , як ми можемо абсолютно передбачити medium qualityз наших знань про двох інших категорій (ми будемо робити це з допомогою регресійної моделі , де medium qualityє , і & є X 1 і X 2 , відповідно): Y = β 0 + β 1Ybad qualityhigh qualityX1X2
Зауважимо, що термін помилки, ε , не вказаний, тому що ми можемо передбачити це ідеально. Для цього встановимо β 0 = 1 , β 1 = - 1 , а β 2 = - 1 . Тепер, коли у вас є, то X 1 = 1 , що скасовує β 0 ( 1

Y=β0+β1X1+β2X2
εβ0=1β1=1β2=1bad qualityX1=1β0 ), і X 2 = 0, тому термін також скасовується ( - 1 × 0 ). Таким чином, нам залишається передбачуване значення 0 для Y1+1×1X2=01×00Y (medium quality ), що є абсолютно правильним. Я залишу це вам, щоб опрацювати інші можливості (це завжди працює, у вашому випадку).

То що ж тоді робити? Представляючи категоричну змінну, ми зазвичай використовуємо опорне кодування клітинки (часто її називають "фіктивним кодуванням"). Для цього ми вибираємо один рівень нашої категоріальної змінної як еталонний рівень; цей рівень не отримує власного макетного коду, а просто вказується, маючи всі в кодах манекена для всіх інших рівнів. Інші рівні вашої категоричної змінної представлені фіктивними кодами так само, як ви це зробили. (Для отримання додаткової інформації про це, ви можете побачити мою відповідь тут: Регресія, заснована, наприклад, на дні тижня .) Якщо ви використовуєте , ви можете використовувати та0RfactorR , зробить це все за вас - це буде зроблено правильно, і це набагато зручніше - тим не менш, варто розуміти, що це те, що відбувається «за кадром».


Дякуємо за всі ваші коментарі! Я використовую R, тому якщо я добре зрозумів, що з фактором R все вдасться, мені нічого не потрібно робити! Ідеально! Ще раз танки!
varin sacha

Якщо ви встановите перехоплення на нуль у lmформулі ( + 0), чи буде він працювати?
Firebug

1
@Firebug, якщо ви використовуєте рівень означає кодування (тобто у вас є окрема змінна для кожного рівня), то ви можете встановити перехоплення на нуль, і він повинен працювати нормально. Хоча значення змінних коефіцієнтів та тестів гіпотези будуть різними.
gung - Відновіть Моніку

10

@gung чітко пояснив теорію. Ось практичний приклад для ілюстрації:

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)

Це показує нам, що еталонний рівень (усі 0s), badяк показано тут, у рядку 4:

  (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

Тепер, якщо ми самі кодуємо фіктивні змінні і спробуємо підігнати модель, використовуючи всі вони:

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)

Ми отримуємо очікувану помилку: singular fit encountered


1
Задоволення Сподіваюся, зараз усе зрозуміло. factorяк правило, подбає про фіктивне змінне кодування для вас, але добре бути в курсі, що відбувається "під капотом".
dardisco
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.