Korzystam z pakietu „lars” w języku R z następującym kodem:
> library(lars)
> set.seed(3)
> n <- 1000
> x1 <- rnorm(n)
> x2 <- x1+rnorm(n)*0.5
> x3 <- rnorm(n)
> x4 <- rnorm(n)
> x5 <- rexp(n)
> y <- 5*x1 + 4*x2 + 2*x3 + 7*x4 + rnorm(n)
> x <- cbind(x1,x2,x3,x4,x5)
> cor(cbind(y,x))
y x1 x2 x3 x4 x5
y 1.00000000 0.74678534 0.743536093 0.210757777 0.59218321 0.03943133
x1 0.74678534 1.00000000 0.892113559 0.015302566 -0.03040464 0.04952222
x2 0.74353609 0.89211356 1.000000000 -0.003146131 -0.02172854 0.05703270
x3 0.21075778 0.01530257 -0.003146131 1.000000000 0.05437726 0.01449142
x4 0.59218321 -0.03040464 -0.021728535 0.054377256 1.00000000 -0.02166716
x5 0.03943133 0.04952222 0.057032700 0.014491422 -0.02166716 1.00000000
> m <- lars(x,y,"step",trace=T)
Forward Stepwise sequence
Computing X'X .....
LARS Step 1 : Variable 1 added
LARS Step 2 : Variable 4 added
LARS Step 3 : Variable 3 added
LARS Step 4 : Variable 2 added
LARS Step 5 : Variable 5 added
Computing residuals, RSS etc .....
Mam zestaw danych z 5 zmiennymi ciągłymi i próbuję dopasować model do jednej (zależnej) zmiennej y. Dwa z moich predyktorów są ze sobą wysoce skorelowane (x1, x2).
Jak widać w powyższym przykładzie, funkcja lars z opcją „krokową” najpierw wybiera zmienną najbardziej skorelowaną z y. Następną zmienną, która wchodzi do modelu, jest ta, która jest najbardziej skorelowana z resztami. Rzeczywiście, jest to x4:
> round((cor(cbind(resid(lm(y~x1)),x))[1,3:6]),4)
x2 x3 x4 x5
0.1163 0.2997 0.9246 0.0037
Teraz, jeśli zrobię opcję „lasso”:
> m <- lars(x,y,"lasso",trace=T)
LASSO sequence
Computing X'X ....
LARS Step 1 : Variable 1 added
LARS Step 2 : Variable 2 added
LARS Step 3 : Variable 4 added
LARS Step 4 : Variable 3 added
LARS Step 5 : Variable 5 added
Dodaje obie skorelowane zmienne do modelu w pierwszych dwóch krokach. Jest to przeciwieństwo tego, co przeczytałem w kilku artykułach. Większość z nich twierdzi, że jeśli istnieje grupa zmiennych, wśród których korelacje są bardzo wysokie, wówczas „lasso” ma tendencję do wybierania tylko jednej zmiennej z grupy losowo.
Czy ktoś może podać przykład takiego zachowania? Lub wyjaśnij, dlaczego moje zmienne x1, x2 są dodawane do modelu jedna po drugiej (razem)?
R
wywołanie OP i związane z nim dane wyjściowe, zobaczysz, że rzeczywiście używa lasso. Jak zapewne wiesz, niewielka modyfikacja algorytmu larsa daje ścieżkę regulacyjną lasso.Odpowiedzi:
Problem kolinearności jest zdecydowanie przereklamowany!
Thomas, przedstawiłeś wspólny punkt widzenia, że jeśli predyktory są skorelowane, nawet najlepsza technika selekcji zmiennych po prostu wybiera jeden losowo z grupy. Na szczęście w ten sposób zaniżono zdolność regresji do odkrywania prawdy! Jeśli masz odpowiedni typ zmiennych objaśniających (egzogennych), regresja wielokrotna obiecuje znaleźć efekt każdej zmiennej utrzymującej pozostałe na stałym poziomie. Teraz, jeśli zmienne są doskonale skorelowane, to jest to dosłownie niemożliwe. Jeśli zmienne są skorelowane, może to być trudniejsze, ale przy dzisiejszym rozmiarze typowego zestawu danych nie jest to o wiele trudniejsze.
Kolinearność to problem niskiej ilości informacji. Zobacz parodię kolinearności Art Goldbergera na blogu Dave'a Gilesa . Sposób, w jaki mówimy o kolinearności, brzmiałby głupio, gdyby był zastosowany do średniej zamiast częściowego współczynnika regresji.
Nadal nie jesteś przekonany? Czas na jakiś kod.
Stworzyłem wysoce skorelowane zmienne x1 i x2, ale na wykresie poniżej widać, że gdy x1 jest bliskie -1, nadal widzimy zmienność w x2.
Czas dodać „prawdę”:
Czy zwykła regresja może się powieść w obliczu potężnego problemu kolinearności?
O tak, może:
Teraz nie mówiłem o LASSO, na którym koncentrowało się twoje pytanie. Ale pozwól, że cię o to zapytam. Jeśli regresja oldschoolowa z eliminacją wsteczną nie daje się zwieść kolinearności, dlaczego miałbyś tak myśleć o najnowocześniejszym systemie LASSO?
źródło
Odpowiedź Bena zainspirowała mnie do pójścia o krok dalej na podanej przez niego ścieżce, co się stanie, jeśli „prawda”, y, będzie w innych sytuacjach.
W oryginalnym przykładzie y zależy od dwóch wysoce skorelowanych zmiennych x1 i x2. Zakładając, że istnieje inna zmienna, powiedzmy x3
„Prawda” y jest teraz zdefiniowana jako następująca
Co stałoby się z regresją?
Istnieje silny efekt kolinearności. Standardowy błąd x2 jest zbyt duży. Jednak regresja liniowa identyfikuje x2 jako zmienną nieistotną.
Co z innym przypadkiem regresji?
Zmienna x2 nie jest znacząca i zaleca się jej usunięcie za pomocą regresji liniowej.
Z powyższych wyników kolinearność nie stanowi problemu w regresji liniowej, a sprawdzenie VIF nie jest bardzo pomocne.
Spójrzmy na inną sytuację. x3 = c (1: N) # N zdefiniowano wcześniej, N = 1000, x3 nie jest w tej samej skali co x1.
„Prawda” y jest zdefiniowana tak samo jak powyżej
Co stałoby się z regresją?
Istnieje silny efekt kolinearności. Standardowe błędy x1, x2 są zbyt duże. Regresja liniowa nie identyfikuje ważnej zmiennej x1.
Co z innym przypadkiem regresji?
Zmienna x2 nie jest znacząca i zaleca się jej usunięcie za pomocą regresji liniowej.
Uwaga: regresja y na x1 i x3. Zauważ, że standardowy błąd x1 wynosi tylko 0,03.
Na podstawie powyższych wyników, mój wniosek jest taki
źródło