Качественное кодирование переменных в регрессии приводит к «особенностям»

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
В статистическом контексте есть выдающееся объяснение того, что здесь представляет собой особую матрицу: что делает корреляция матрицей единственного числа?
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 (

Y=β0+β1X1+β2X2
εβ0=1β1=1β2=1bad qualityX1=1β0 ) и X 2 = 0, так что член также удаляется ( - 1 × 0 ). Таким образом, мы остаемся с предсказанным значением 0 для Y (), что в точности верно. Я оставлю это вам на разработку других возможностей (в вашем случае это всегда работает). 1+1×1X2=01×00Ymedium quality

0R , вы можете использовать factorиR сделаю все это для вас - это будет сделано правильно, и это намного удобнее - тем не менее, стоит понимать, что это то, что происходит «за кадром».

Gung - Восстановить Монику
источник
Спасибо за все ваши комментарии ! Я использую R, поэтому, если я правильно понял, с фактором R все будет делать, мне ничего не нужно делать! Отлично ! Танки еще раз!
Варин Саша
Если вы установите перехват на ноль в 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)

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

Теперь, если мы сами кодируем фиктивные переменные и попытаемся подобрать модель, используя все из них:

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

dardisco
источник
1
Удовольствие. Надеюсь, теперь все ясно. factorкак правило, позаботится о фиктивном кодировании переменных для вас, но хорошо знать, что происходит «под капотом».
Дардиско,