Экранирование (мульти)коллинеарности в регрессионной модели
Я надеюсь, что это не будет вопрос "спросить и ответить"... вот так ... :
(мульти) коллинеарность относится к чрезвычайно высоким корреляциям между предикторами в регрессионной модели. Как их вылечить... ну, иногда вам не нужно "лечить" коллинеарность, так как это не влияет на саму регрессионную модель, а интерпретацию эффекта отдельных предикторов.
один из способов определить коллинеарность состоит в том, чтобы поместить каждый предиктор в качестве зависимой переменной, а другие предикторы в качестве независимые переменные, определите R2, а если это больше, чем .9 (или .95), мы можем считать предиктор избыточным. Это один "метод"... а как насчет других подходов? Некоторые из них требуют много времени, например, исключение предикторов из модели и наблюдение за изменениями B-коэффициента - они должны заметно отличаться.
конечно, мы всегда должны иметь в виду конкретные условия/цели анализа... Иногда единственным средством является повторное исследование, но прямо сейчас я интересуют различные способы скрининга избыточных предикторов, когда (мульти)коллинеарность возникает в регрессионной модели.
5 ответов:
просто чтобы добавить к тому, что Дирк сказал о методе номера условия, эмпирическое правило заключается в том, что значения
CN > 30 indicate severe collinearity. Другие методы, кроме номера условия, включают:1) определитель ковариационной матрица, которая колеблется от 0 (идеальный Коллинеарность) до 1 (Без Коллинеарности)
# using Dirk's example > det(cov(mm12[,-1])) [1] 0.8856818 > det(cov(mm123[,-1])) [1] 8.916092e-092) используя тот факт, что определитель диагональной матрицы равен произведению собственных значений => наличие одного или более малых собственных значений указывает коллинеарность
> eigen(cov(mm12[,-1]))$values [1] 1.0876357 0.8143184 > eigen(cov(mm123[,-1]))$values [1] 5.388022e+00 9.862794e-01 1.677819e-093) Значение коэффициента вариации инфляции (VIF). VIF для предиктора i равен 1/(1-R_i^2), где R_i^2-R^2 из регрессии предиктора i против остальных предикторов. Коллинеарность присутствует, когда VIF для хотя бы одной независимой переменной велика. Эмпирическое правило:
VIF > 10 is of concern. Для реализации в R см.здесь. Я также хотел бы отметить, что использование R^2 для определения коллинеарности должно идти рука об руку с визуальным изучение диаграмм рассеяния, потому что один выброс может "вызвать" коллинеарность там, где ее нет, или может скрыть коллинеарность там, где она существует.
Вам может понравиться справочная карта Вито Риччи " R функции для регрессионного анализа" http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf
в нем кратко перечислены многие полезные функции, связанные с регрессией в R, включая диагностические функции. В частности, в нем перечислены с
carпакета, который может оценить мультиколлинеарность. http://en.wikipedia.org/wiki/Variance_inflation_factorрассмотрение мультиколлинеарность часто идет рука об руку с вопросами оценки переменной важности. Если это относится к вам, возможно, проверить
relaimpoпакет:http://prof.beuth-hochschule.de/groemping/relaimpo/
см. раздел 9.4 в этой книге: практические регрессия и дисперсионный анализ с использованием R [далеком 2002].
Коллинеарность может быть обнаружена несколькими способами:
исследование корреляционной матрицы предикторов позволит выявить большие попарные коллинеарности.
регрессия x_i на всех остальных предикторов дает R^2_i. Повторите для всех предикторов. R^2_i близко к единице указывает на проблему-нарушитель линейный комбинация может быть найдена.
исследуйте собственные значения
t(X) %*% X, гдеXобозначает матрицу модели; малые собственные значения указывают на проблему. Число условий 2-нормы может быть показано как отношение наибольшего к наименьшему ненулевому сингулярному значению матрицы ($\kappa = \sqrt{\lambda_1/\lambda_p}$; см.?kappa);\kappa >= 30считается крупным.
поскольку до сих пор нет упоминания о VIF, я добавлю свой ответ. Коэффициент инфляции дисперсии>10 обычно указывает на серьезную избыточность между переменными предиктора. VIF указывает фактор, с помощью которого дисперсия коэффициента полезного действия переменной увеличивалась бы, если бы она не была сильно коррелирована с другими переменными.
vif()доступно в пакетеcarsи применяется к объекту класса (lm). Он возвращает vif из x1, x2 . . . хп в объектlm(). Это хорошая идея, чтобы исключить переменные с vif >10 или ввести преобразования в переменные с vif>10.
Comments