Я узнал, что, используя 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-тестов в обоих вышеупомянутых случаях.
Мои вопросы:
Можно ли избежать проблемы мультиколлинеарности, взяв взаимодействие, как показано выше?
Есть ли более хороший способ представить проблему мультиколлинеарности по сравнению с приведенными выше результатами метода VIF.
Пожалуйста, предоставьте мне свои предложения.
Благодарю.
источник
Ответы:
Вы , кажется , включают в себя термин взаимодействия
ub:lb
, но неub
иlb
себя как отдельные предсказатели. Это нарушило бы так называемый «принцип маргинальности», который гласит, что члены высшего порядка должны включать только переменные, присутствующие в терминах более низкого порядка ( для начала Википедия ). По сути, теперь вы включаете предиктор, который является просто поэлементным продуктомub
иlb
.ub
ub
lb
Я бы начал делать все попарные корреляции между предикторами и запускать вышеупомянутые регрессии, чтобы посмотреть, какие переменные предсказывают,
ub
иlb
посмотреть, легко ли объяснить избыточность. Если это так, вы можете удалить избыточные предикторы. Вы также можете посмотреть на регрессию гребня (lm.ridge()
из пакетаMASS
в R).kappa(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
lb
pairs()
scatterplot3d
perturb
Вы также должны учитывать P-значение при рассмотрении переменных.
источник