Работа с мультиколлинеарностью

13

Я узнал, что, используя vif()метод carупаковки, мы можем вычислить степень мультиколлинеарности входных данных в модели. Из википедии , если vifзначение больше, чем 5тогда, мы можем считать, что вход страдает от проблемы мультиколлинеарности. Например, я разработал модель линейной регрессии с использованием lm()метода и vif()дает следующее. Как мы можем видеть, входы ub, lbи tbстрадают от мультиколлинеарности.

 vif(lrmodel)
     tb        ub        lb          ma     ua        mb         sa     sb 
 7.929757 50.406318 30.826721  1.178124  1.891218  1.364020  2.113797  2.357946

Чтобы избежать проблемы мультиколлинеарности и, таким образом, сделать мою модель более устойчивой, я взял взаимодействие между ubи lb, и теперь таблица новой модели выглядит следующим образом:

   tb     ub:lb      ma       mb      sa        sb     ua
1.763331 1.407963 1.178124 1.327287 2.113797 1.860894 1.891218

Не существует большой разницы в R^2значениях, а также нет большой разницы в ошибках, полученных в результате однократных CV-тестов в обоих вышеупомянутых случаях.

Мои вопросы:

  1. Можно ли избежать проблемы мультиколлинеарности, взяв взаимодействие, как показано выше?

  2. Есть ли более хороший способ представить проблему мультиколлинеарности по сравнению с приведенными выше результатами метода VIF.

Пожалуйста, предоставьте мне свои предложения.

Благодарю.

samarasa
источник
Является ли ваша модель log-log регрессией (взаимодействие как ограничение как с ними нормально)? В вики есть более полная статья, касающаяся проблемы мультиколлинеарности en.wikipedia.org/wiki/Multicollinearity. Также я предлагаю изучить тег мультиколлинеарности на этом сайте, кажется, это часто задаваемый вопрос.
Дмитрий Челов
@Dmitrij Celov: Спасибо. Нет, моя модель простой линейной регрессии без журналов ...
Самараса

Ответы:

11

Вы , кажется , включают в себя термин взаимодействия ub:lb, но не ubи lbсебя как отдельные предсказатели. Это нарушило бы так называемый «принцип маргинальности», который гласит, что члены высшего порядка должны включать только переменные, присутствующие в терминах более низкого порядка ( для начала Википедия ). По сути, теперь вы включаете предиктор, который является просто поэлементным продуктом ubи lb.

VIFj11Rj2Rj2R2jjRx1R2ubublbR2

Я бы начал делать все попарные корреляции между предикторами и запускать вышеупомянутые регрессии, чтобы посмотреть, какие переменные предсказывают, ubи lbпосмотреть, легко ли объяснить избыточность. Если это так, вы можете удалить избыточные предикторы. Вы также можете посмотреть на регрессию гребня ( lm.ridge()из пакета MASSв R).

XtXXκλmaxλminλmaxλmin0XtXkappa(lm(<formula>))lm()

κκ

κκvif(lm(y ~ x1 + x2))vif(lm(scale(y) ~ scale(x1) + scale(x2)))kappa(lm(y ~ x1 + x2))kappa(lm(scale(y) ~ scale(x1) + scale(x2)))

каракал
источник
ub lbalogub+aloglb=alogublbublb
@Dmitrij: Нет, ub + lb + sb = 100.
Самараса
Есть ли хорошее графическое представление для мультиколлинеарности? Пожалуйста, предложите мне, если есть какой-либо метод в R для этого.
Самараса
2
pairs()scatterplot3dκ2perturb
1

Вы также должны учитывать P-значение при рассмотрении переменных.

  1. Если значение P очень низкое (p <0,05), а VIF высокое (> 5), возможно, вам следует рассмотреть другие незначительные переменные. И восстановите свою модель.
  2. Если у вас высокое значение P и VIF, тогда эта переменная будет незначительной.
Маниш Кумар
источник