Скрининг (мульти) коллинеарности в регрессионной модели
Я надеюсь, что этот вопрос не будет "спросить-и-ответ"... здесь идет:
(множественная) коллинеарность относится к чрезвычайно высоким корреляциям между предикторами в модели регрессии. Как их вылечить... ну, иногда вам не нужно "вылечить" коллинеарность, поскольку она не влияет на модель регрессии, а на интерпретацию эффекта отдельных предикторов.
Одним из способов определения коллинеарности является включение каждого предиктора в качестве зависимой переменной и других предикторов в качестве независимых переменных, определение R 2 и если оно больше 0,9 (или 0,95), мы может считать избыточность предиктора. Это один "метод"... как насчет других подходов? Некоторые из них занимают много времени, например, исключая предикторов из модели и наблюдая за изменениями b-коэффициента - они должны заметно отличаться.
Конечно, мы всегда должны учитывать специфический контекст/цель анализа... Иногда только повторение - это повторение исследования, но прямо сейчас меня интересуют различные способы экранирования избыточных предикторов, когда ( много) коллинеарность встречается в регрессионной модели.
Ответы
Ответ 1
Функция kappa()
может помочь. Вот пример моделирования:
> set.seed(42)
> x1 <- rnorm(100)
> x2 <- rnorm(100)
> x3 <- x1 + 2*x2 + rnorm(100)*0.0001 # so x3 approx a linear comb. of x1+x2
> mm12 <- model.matrix(~ x1 + x2) # normal model, two indep. regressors
> mm123 <- model.matrix(~ x1 + x2 + x3) # bad model with near collinearity
> kappa(mm12) # a 'low' kappa is good
[1] 1.166029
> kappa(mm123) # a 'high' kappa indicates trouble
[1] 121530.7
и мы идем дальше, сделав третий регрессор все более коллинеарным:
> x4 <- x1 + 2*x2 + rnorm(100)*0.000001 # even more collinear
> mm124 <- model.matrix(~ x1 + x2 + x4)
> kappa(mm124)
[1] 13955982
> x5 <- x1 + 2*x2 # now x5 is linear comb of x1,x2
> mm125 <- model.matrix(~ x1 + x2 + x5)
> kappa(mm125)
[1] 1.067568e+16
>
Это используемые приближения, см. help(kappa)
для деталей.
Ответ 2
Чтобы добавить к тому, что Дирк сказал о методе номера условий, правилом является то, что значения CN > 30 indicate severe collinearity
. Другие методы, помимо номера условия, включают:
1) определитель ковариации матрица, которая колеблется от 0 (Perfect Коллинеарность) до 1 (нет коллинеарности)
# using Dirk example
> det(cov(mm12[,-1]))
[1] 0.8856818
> det(cov(mm123[,-1]))
[1] 8.916092e-09
2) Используя тот факт, что определитель диагональной матрицы является произведением собственных значений = > Наличие одного или нескольких малых собственных значений указывает на коллинеарность
> eigen(cov(mm12[,-1]))$values
[1] 1.0876357 0.8143184
> eigen(cov(mm123[,-1]))$values
[1] 5.388022e+00 9.862794e-01 1.677819e-09
3) Значение коэффициента вариации (VIF). VIF для предсказателя я равен 1/(1-R_i ^ 2), где R_i ^ 2 является R ^ 2 от регрессии предсказателя я от остальных предикторов. Коллинеарность присутствует, когда VIF для хотя бы одной независимой переменной большой. Правило большого пальца: VIF > 10 is of concern
. Для реализации в R см. здесь. Я также хотел бы прокомментировать, что использование R ^ 2 для определения коллинеарности должно идти рука об руку с визуальным анализом диаграмм рассеяния, потому что один выброс может "вызывать" коллинеарность там, где он не существует, или может скрывать коллинеарность там, где он существует,
Ответ 3
Вам может понравиться Справочная карта Vito Ricci "Функции R для регрессионного анализа"
http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf
Он кратко перечисляет множество полезных функций, связанных с регрессией, в R, включая диагностические функции.
В частности, он перечисляет функцию vif
из пакета car
, который может оценивать мультиколлинеарность.
http://en.wikipedia.org/wiki/Variance_inflation_factor
Рассмотрение мультиколлинеарности часто идет рука об руку с вопросами оценки переменной важности. Если это относится к вам, возможно, проверьте пакет relaimpo
: http://prof.beuth-hochschule.de/groemping/relaimpo/
Ответ 4
См. также раздел 9.4 в этой книге: Практическая регрессия и Anova с использованием R [Faraway 2002].
Коллинеарность может быть обнаружена несколькими способами:
-
Исследование корреляционной матрицы предсказателей выявит большие парные коллинеарности.
-
Регрессия x_i для всех других предикторов дает R ^ 2_i. Повторите для всех предикторов. R ^ 2_i, близкое к одному, указывает на проблему - можно найти оскорбительную линейную комбинацию.
-
Изучить собственные значения t(X) %*% X
, где X
обозначает модельную матрицу; Небольшие собственные значения указывают на проблему. Можно показать, что номер условия 2-нормы является отношением наибольшего к наименьшему ненулевому сингулярному значению матрицы ($\kappa =\sqrt {\ lambda_1/\ lambda_p} $; см. ?kappa
); \kappa >= 30
считается большим.
Ответ 5
Поскольку пока нет упоминания о VIF, я добавлю свой ответ. Отклонение Фактор инфляции > 10 обычно указывает на серьезную избыточность между предикторными переменными. VIF указывает коэффициент, при котором дисперсия коэффициента эффективности увеличивалась бы, если бы она не сильно коррелировала с другими переменными.
vif()
доступен в пакете cars
и применяется к объекту класса (lm). Он возвращает vif x1, x2., xn в объекте lm()
. Это хорошая идея, чтобы исключить переменные с vif > 10 или ввести преобразования в переменные с vif > 10.