Вычисление VIF для порядковой логистической регрессии и мультиколлинеарности в R

#r #multicollinearity

#r #мультиколлинеарность

Вопрос:

Я использую модель порядковой регрессии. У меня есть 8 объясняющих переменных, 4 из них категориальные (‘0’ или ‘1’), 4 из них непрерывные. Заранее я хочу быть уверен, что мультиколлинеарности нет, поэтому я использую коэффициент инфляции дисперсии (функция vif из пакета car) :

 mod1<-polr(Y ~ X1 X2 X3 X4 X5 X6 X7 X8, Hess = T, data=df)
vif(mod1)
  

но я получаю значение VIF 125 для одной из переменных, а также следующее предупреждение :

Предупреждающее сообщение: В vif.default(mod1): нет перехвата: vif могут быть неразумными.

Однако, когда я преобразую свою зависимую переменную в числовую (вместо фактора) и делаю то же самое с линейной моделью :

 mod2<-lm(Y ~ X1 X2 X3 X4 X5 X6 X7 X8, data=df)
vif(mod2)
  

На этот раз все значения VIF ниже 3, что говорит об отсутствии мультиколлинеарности.

Меня смущает функция vif. Как он может возвращать значения VIF > 100 для одной модели и низкие значения VIF для другой? Должен ли я придерживаться второго результата и все равно выполнять порядковую модель?

Ответ №1:

vif() Функция использует определители корреляционной матрицы параметров (и их подмножеств) для вычисления VIF. В линейной модели это включает только коэффициенты регрессии (исключая перехват). vif() Функция не предназначалась для использования с упорядоченными логит-моделями. Итак, когда он находит матрицу дисперсии-ковариации параметров, он включает пороговые параметры (т. Е. перехваты), которые обычно были бы исключены функцией в линейной модели. Вот почему вы получаете предупреждение, которое получаете — он не знает, как искать пороговые параметры и удалять их. Поскольку VIF на самом деле является функцией взаимных корреляций в матрице проектирования (которая не зависит от зависимой переменной или нелинейного отображения из линейного предиктора в пространство переменной ответа [т. Е. Функции связи в glm]), вы должны получить правильный ответ с вашим вторым решением выше, используя lm() с числовой версией вашей зависимой переменной.

Комментарии:

1. Я также искал тот же ответ; vif можно ли использовать с polr() . И поиск того, что ?vif в нем говорится polr , может быть использован. Ссылка здесь для ? ссылки vif или я неправильно ее сгладил?