В настоящее время я использую линейные модели со смешанным эффектом.
Я использую пакет "lme4" в R.
Мои модели принимают форму:
model <- lmer(response ~ predictor1 + predictor2 + (1 | random effect))
Перед запуском моих моделей я проверил возможную мультиколлинеарность между предикторами.
Я сделал это путем:
Создайте план данных из предикторов
dummy_df <- data.frame(predictor1, predictor2)
Используйте функцию «кор» для расчета корреляции Пирсона между предикторами.
correl_dummy_df <- round(cor(dummy_df, use = "pair"), 2)
Если «correl_dummy_df» было больше 0,80, то я решил, что предикатор1 и предиктор2 были слишком сильно коррелированы и не были включены в мои модели.
При чтении появятся более объективные способы проверки мультиколлинеарности.
У кого-нибудь есть совет по этому поводу?
«Коэффициент инфляции дисперсии (VIF)» кажется одним из допустимых методов.
VIF можно рассчитать с помощью функции «corvif» в пакете AED (не кран). Пакет можно найти по адресу http://www.highstat.com/book2.htm . Пакет поддерживает следующую книгу:
Zuur, AF, Ieno, EN, Уокер, Н., Савельев, А.А. и Смит, GM 2009. Модели смешанных эффектов и расширения в экологии с R, 1-е издание. Спрингер, Нью-Йорк.
Похоже, что общее практическое правило заключается в том, что если VIF> 5, мультиколлинеарность между предикторами высока.
Является ли использование VIF более надежным, чем простая корреляция Пирсона?
Обновить
Я нашел интересный блог по адресу:
http://hlplab.wordpress.com/2011/02/24/diagnosing-collinearity-in-lme4/
Блоггер предоставляет полезный код для расчета VIF для моделей из пакета lme4.
Я проверил код, и он прекрасно работает. В моем последующем анализе я обнаружил, что мультиколлинеарность не была проблемой для моих моделей (все значения VIF <3). Это было интересно, учитывая, что ранее я обнаружил высокую корреляцию Пирсона между некоторыми предикторами.
AED
пакет был прекращен ; вместо этого, толькоsource("http://www.highstat.com/Book2/HighstatLibV6.R")
дляcorvif
функции. (2) Надеюсь дать реальный ответ, но (a) я полагаю, что VIF учитывает мультиколлинеарность (например, у вас может быть три предиктора, ни один из которых не имеет сильных парных корреляций, но линейная комбинация A и B сильно коррелирует с C ) и (б) у меня есть серьезные сомнения относительно целесообразности отбрасывания коллинеарных терминов; см. Graham Ecology 2003, doi: 10.1890 / 02-3114http://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R
Ответы:
Для расчета VIF usdm также может быть пакетом (мне нужно установить «usdm»)
Если VIF> 4.0, я обычно предполагаю, что мультиколлинеарность удаляет все эти переменные предиктора, прежде чем встраивать их в мою модель
источник
.4
какvifcor(vardata,th=0.4)
. Точно так же вы можете использовать,vifstep(vardata,th=10)
чтобы отбросить все, что больше 10.Обновление, так как я нашел этот вопрос полезным, но не могу добавлять комментарии -
Код от Zuur et al. (2009) также доступен через дополнительный материал для последующей (и очень полезной) публикации их в журнале Methods in Ecology and Evolution .
В документе «Протокол для исследования данных, позволяющий избежать распространенных статистических проблем», содержатся полезные советы и очень необходимые ссылки для обоснования пороговых значений VIF (они рекомендуют пороговое значение 3). Документ находится здесь: http://onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2009.00001.x/full, а код R находится на вкладке дополнительных материалов (загрузка в формате .zip).
Краткое руководство : чтобы извлечь факторы инфляции дисперсии (VIF), запустите их код HighStatLib.r и используйте функцию
corvif
. Функция требует фрейма данных только с предикторами (например,df = data.frame(Dataset[,2:4])
если ваши данные хранятся в наборе данных с предикторами в столбцах 2–4.источник
Может быть,
qr()
функция будет работать. ЕслиX
это ваш фрейм данных или матрица, вы можете использоватьqr(X)$pivot
. Например,qr(X)$pivot= c(1, 2, 4, 5, 7, 8, 3, 6)
тогда столбцы 3 и 6 - это мультиколлинеарная переменная.источник
Чтобы оценить мультиколлинеарность между предикторами при запуске функции драгирования (пакет MuMIn), включите следующую функцию max.r в качестве аргумента «extra»:
затем просто запустите dredge, указав количество переменных-предикторов и включив функцию max.r:
Это работает для моделей lme4. Для nlme моделей см .: https://github.com/rojaff/dredge_mc
источник
VIF (коэффициент инфляции дисперсии) можно измерить просто:
источник