Скрининг (мульти) коллинеарности в регрессионной модели

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

Одним из способов определения коллинеарности является включение каждого предиктора в качестве зависимой переменной и других предикторов в качестве независимых переменных, определение 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.