Является ли мультиколлинеарность неявной в категориальных переменных?

10

Я заметил, что во время работы с моделью многомерной регрессии наблюдался небольшой, но заметный эффект мультиколлинеарности, измеряемый коэффициентами инфляции дисперсии, в категориях категориальной переменной (конечно, после исключения эталонной категории).

Например, скажем, у нас есть набор данных с непрерывной переменной y и одной номинальной категориальной переменной x, которая имеет k возможных взаимоисключающих значений. Мы кодируем эти возможных значений как фиктивные переменные 0/1 . Затем мы запускаем регрессионную модель . Оценки VIF для фиктивных переменных оказываются ненулевыми. Фактически, по мере увеличения количества категорий, VIF увеличиваются. Центрирование фиктивных переменных не меняет VIF.x 1 , x 2 , , x k y = b 0 + b 1 x 1 + b 2 x 2 + + b k - 1 x k - 1 k - 1kx1,x2,,xky=b0+b1x1+b2x2++bk1xk1k1

Интуитивное объяснение, по-видимому, состоит в том, что взаимоисключающее условие категорий в пределах категориальной переменной вызывает эту небольшую мультиколлинеарность. Является ли это тривиальным открытием или это вопрос, который необходимо учитывать при построении регрессионных моделей с категориальными переменными?

RobertF
источник

Ответы:

8

Я не могу воспроизвести точно это явление, но я могу продемонстрировать, что VIF не обязательно увеличивается с увеличением количества категорий .

Интуиция проста: категориальные переменные могут быть сделаны ортогональными с помощью подходящих экспериментальных планов. Следовательно, в общем случае не должно быть связи между количеством категорий и мультиколлинеарностью.

Вот Rфункция для создания категорийных наборов данных с указанным количеством категорий (для двух независимых переменных) и определенным количеством репликации для каждой категории. Он представляет собой сбалансированное исследование, в котором каждая комбинация категории наблюдается равное количество раз, :n

trial <- function(n, k1=2, k2=2) {
  df <- expand.grid(1:k1, 1:k2)
  df <- do.call(rbind, lapply(1:n, function(i) df))
  df$y <- rnorm(k1*k2*n)
  fit <- lm(y ~ Var1+Var2, data=df)
  vif(fit)
}

Применяя его, я обнаружил, что VIF всегда имеют наименьшее возможное значение, , отражающее балансировку (что переводится в ортогональные столбцы в матрице дизайна). Некоторые примеры:1

sapply(1:5, trial) # Two binary categories, 1-5 replicates per combination
sapply(1:5, function(i) trial(i, 10, 3)) # 30 categories, 1-5 replicates

Это говорит о том, что мультиколлинеарность может расти из-за растущего дисбаланса в дизайне . Чтобы проверить это, вставьте строку

  df <- subset(df, subset=(y < 0))

до fitлинии в trial. Это удаляет половину данных в случайном порядке. Повторный запуск

sapply(1:5, function(i) trial(i, 10, 3))

показывает, что VIF больше не равны (но они остаются близко к нему, случайно). Они все еще не увеличиваются с большим количеством категорий: производит сопоставимые значения.1sapply(1:5, function(i) trial(i, 10, 10))

Whuber
источник
2

У вас есть ограничение, которое вы видите, присуще полиномиальным распределениям, а именно, что один и только один из s будет 1, а все остальные будут 0. Таким образом, у вас есть линейное ограничение . Это означает, что, скажем, где сумма берется за . Это эффект коллинеарности, который вы замечаете. В этом нет ничего необычного или тревожного.xixi=1x1=1xii1

Майкл Р. Черник
источник
Я не понимаю, что полиномиальные распределения имеют отношение к этой ситуации. Могли бы вы объяснить?
whuber