Radzenie sobie z wielokoliniowością

13

Nauczyłem się, że stosując vif()metodę carpakietu, możemy obliczyć stopień wielokoliniowości danych wejściowych w modelu. Z wikipedii , jeśli vifwartość jest większa niż 5wtedy, możemy uznać, że dane wejściowe cierpią z powodu problemu wielokoliniowości. Na przykład opracowałem model regresji liniowej przy użyciu lm()metody i vif()daje on następujące wyniki. Jak widzimy, wejścia ub, lbi tbcierpi Współliniowość.

 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

W celu uniknięcia tego problemu Współliniowość a tym samym, aby mój model bardziej wytrzymałe, brałem interakcji pomiędzy uba lbi teraz Vif stół nowego modelu jest następująca:

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

Nie ma dużej różnicy w R^2wartościach, a także nie ma dużej różnicy w błędach z jednoznacznych testów CV w obu powyższych dwóch przypadkach.

Moje pytania to:

  1. Czy można uniknąć problemu wielokoliniowości, biorąc interakcję jak pokazano powyżej?

  2. Czy istnieje lepszy sposób przedstawienia problemu wielokoliniowości w porównaniu z powyższymi wynikami metody vif.

Proszę podać mi swoje sugestie.

Dzięki.

samarasa
źródło
Czy Twój model regresji log-log (interakcja jako ograniczenie jest w porządku z nimi)? Na wiki znajduje się pełniejszy artykuł na temat problemu wielokoliniowości en.wikipedia.org/wiki/Multicollinearity Również sugeruję zbadanie znacznika wielokolinearności na tej stronie, wydaje się, że jest to często zadawane pytanie.
Dmitrij Celov
@Dmitrij Celov: Dziękuję. Nie, mój model jest prostą regresją liniową bez logów ...
samarasa

Odpowiedzi:

11

Wydaje się, zawierają określenie interakcji ub:lb, ale nie ubi lbsiebie jako oddzielnych predyktorów. Naruszyłoby to tak zwaną „zasadę marginalności”, która stwierdza, że ​​terminy wyższego rzędu powinny obejmować tylko zmienne występujące w kategoriach niższego rzędu ( na początek Wikipedia ). W efekcie zawierasz teraz predyktor, który jest po prostu elementarnym produktem ubi lb.

to tylko 1V.jafajot gdzieR 2 j jest wartościąR2,gdy przeprowadzasz regresję z oryginalną zmienną predykcyjnąjjako kryterium przewidywanym przez wszystkie pozostałe predyktory (jest to równieżj-ty element przekątnyR - 1 x , odwrotność macierzy korelacji predyktorów). VIF-wartość 50 oznacza zatem, że maszR2z .98 gdy przewidywaniaz innymi czynnikami prognostycznymi, wskazując, żejest prawie całkowicie zbędny (taka sama dla,R2z .97).11-Rjot2)Rjot2)R2)jotjotRx-1R2)ubublbR2)

Zaczynam robić wszystkie korelacje parami między predyktorami i uruchamiać wyżej wymienione regresje, aby zobaczyć, które zmienne przewidują, ubi lbsprawdzić, czy nadmiarowość można łatwo wyjaśnić. Jeśli tak, możesz usunąć zbędne predyktory. Możesz także zajrzeć do regresji grzbietu ( lm.ridge()z pakietu MASSw R).

Bardziej zaawansowane diagnostyki Współliniowość użyciu wartości własnej-strukturę gdzie X jest macierzą konstrukcyjnej regresji (czyli wszystkie predykcyjne jako wektorów kolumnowych). Warunek κ to XtXXκ , gdzieλmwXiλm: insą największej i najmniejszej (0) wartości własneXtX. W R można użyć, gdymodel zwykle używa standardowych zmiennych.λmzaxλmjanλmzaxλmjan0XtXkappa(lm(<formula>))lm()

Geometrycznie daje wyobrażenie o kształcie chmury danych utworzonej przez predyktory. Z 2 predyktorami wykres rozrzutu może wyglądać jak elipsa z 2 głównymi osiami. κ następnie mówi, jak „płaska” jest ta elipsa, tzn. jest miarą stosunku długości największej osi do długości najmniejszej głównej osi. Z 3 predyktorami możesz mieć kształt cygara i 3 główne osie. Im bardziej „płaska” jest twoja chmura danych, tym bardziej zbędne są zmienne, jeśli zostaną wzięte razem.κκ

κκ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)))

karakal
źródło
ub lbzalogub+zaloglb=zalogublbub-lb
@Dmitrij: Nie, ub + lb + sb = 100.
samarasa
Czy jest jakaś ładna reprezentacja graficzna dla wielokoliniowości? Proszę, zasugeruj mi, czy istnieje jakaś metoda w R dla tego.
samarasa
2
pairs()scatterplot3dκ2)perturb
1

Powinieneś również wziąć pod uwagę wartość P podczas rozważania zmiennej.

  1. Jeśli wartość P jest bardzo niska (p <0,05), a VIF jest wysoka (> 5), być może powinieneś rozważyć inne nieznaczące zmienne. I odbuduj swój model.
  2. Jeśli masz zarówno wartość P, jak i VIF wysokie, wówczas ta zmienna będzie nieistotna.
Manish Kumar
źródło