Wann wählt LASSO korrelierte Prädiktoren aus?


13

Ich benutze das Paket 'lars' in R mit dem folgenden Code:

> 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 .....

Ich habe einen Datensatz mit 5 stetigen Variablen und versuche, ein Modell an eine einzelne (abhängige) Variable y anzupassen. Zwei meiner Prädiktoren sind stark miteinander korreliert (x1, x2).

Wie Sie im obigen Beispiel sehen können, wählt die Funktion lars mit der Option 'stepwise' zuerst die Variable aus, die am meisten mit y korreliert. Die nächste Variable, die in das Modell eingegeben wird, ist diejenige, die am meisten mit den Residuen korreliert. In der Tat ist es 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  

Wenn ich jetzt die Option 'Lasso' mache:

> 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

In den ersten beiden Schritten werden beide korrelierten Variablen zum Modell hinzugefügt. Dies ist das Gegenteil von dem, was ich in mehreren Zeitungen gelesen habe. Die meisten sagen dann, dass, wenn es eine Gruppe von Variablen gibt, unter denen die Korrelationen sehr hoch sind, das "Lasso" dazu neigt, nur eine Variable aus der Gruppe zufällig auszuwählen.

Kann jemand ein Beispiel für dieses Verhalten geben? Oder erklären Sie, warum meine Variablen x1, x2 nacheinander (zusammen) zum Modell hinzugefügt werden?


Dies ist die kleinste Winkelregression, die eine Erklärung der Lassoschritte liefert.
Michael R. Chernick

@MichaelChernick: Wenn Sie sich den RAufruf des OP und die von ihm bereitgestellte Ausgabe ansehen, werden Sie feststellen , dass er tatsächlich das Lasso verwendet. Wie Sie sicher wissen, liefert eine kleine Änderung des lars-Algorithmus den Lasso-Regularisierungspfad.
Kardinal

Meine "Vermutung" ist, dass, da x2 4 Einheiten von x1 enthält, x1 und x2 zusammen die größte Varianz haben (9 Einheiten). Wenn Sie den Koeffizienten von x2 auf 2 senken, sollten Sie sehen, dass x4 vor x1 und x2 ausgewählt ist.

Können Sie einige Referenzen für den Beweis dieser "Zufälligkeit" vorlegen? Vielen Dank.
Ziyuang

Ich vermute, Sie finden Ihre Antwort auf diesem Papier: arxiv.org/pdf/1204.1605.pdf
TPArrow

Antworten:


15

Das Kollinearitätsproblem ist weit überbewertet!

Thomas, Sie haben einen gemeinsamen Standpunkt formuliert: Wenn Prädiktoren korreliert sind, wählt selbst die beste Variablenselektionsmethode zufällig eine aus dem Haufen aus. Zum Glück ist das ein Indiz für die Fähigkeit der Regression, die Wahrheit aufzudecken! Wenn Sie die richtige Art von erklärenden Variablen haben (exogen), verspricht die multiple Regression, den Effekt jeder Variablen zu finden, die die anderen konstant hält. Wenn nun Variablen perfekt korreliert sind, ist dies buchstäblich unmöglich. Wenn die Variablen korreliert sind, kann es schwieriger sein, aber mit der Größe des typischen Datensatzes von heute ist es nicht viel schwieriger.

Kollinearität ist ein Informationsproblem. Schauen Sie sich diese Parodie der Kollinearität von Art Goldberger auf Dave Giles 'Blog an . Die Art und Weise, wie wir über Kollinearität sprechen, würde sich albern anhören, wenn man statt eines partiellen Regressionskoeffizienten einen Mittelwert zugrunde legt.

Immer noch nicht überzeugt? Es ist Zeit für einen Code.

set.seed(34234)

N <- 1000
x1 <- rnorm(N)
x2 <- 2*x1 + .7 * rnorm(N)
cor(x1, x2) # correlation is .94
plot(x2 ~ x1)

Ich habe stark korrelierte Variablen x1 und x2 erstellt, aber Sie können in der Darstellung unten sehen, dass, wenn x1 in der Nähe von -1 ist, wir immer noch Variabilität in x2 sehen. Bildbeschreibung hier eingeben

Jetzt ist es Zeit, die "Wahrheit" hinzuzufügen:

y <- .5 * x1 - .7 * x2 + rnorm(N) # Data Generating Process

Kann eine gewöhnliche Regression im gewaltigen Kollinearitätsproblem Erfolg haben?

summary(lm(y ~ x1 + x2))

Oh ja es kann:

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.0005334  0.0312637  -0.017    0.986    
x1           0.6376689  0.0927472   6.875 1.09e-11 ***
x2          -0.7530805  0.0444443 -16.944  < 2e-16 ***

Jetzt habe ich nicht über LASSO gesprochen, worauf sich Ihre Frage konzentrierte. Aber lassen Sie mich das fragen. Wenn die Regression der alten Schule mit Eliminierung der Rückwärtsbewegung nicht durch Kollinearität getäuscht wird, warum sollte LASSO dann auf dem neuesten Stand der Technik sein?


L1

Die Idee war, dass einfachere Konzepte verwendet werden könnten, um das beschriebene Phänomen von OP zu erklären, und dass diese Konzepte durch Hinzufügen eines datengesteuerten Regularisierungsterms nicht grundlegend geändert werden.
Ben Ogorek

7

Bens Antwort inspirierte mich, einen Schritt weiter zu gehen, was passieren wird, wenn sich die "Wahrheit" in einer anderen Situation befindet.

Im ursprünglichen Beispiel ist y von den beiden stark korrelierten Variablen x1 und x2 abhängig. Angenommen, es gibt eine andere Variable, z. B. x3

x3 = c (1: N) / 250 # N ist vorher definiert, N = 1000, x3 ist in der ähnlichen Skala wie x1 und die Skala von x3 hat Auswirkungen auf die linearen Regressionsergebnisse unten.

Die "Wahrheit" y ist nun wie folgt definiert

y = .5 * x1 - .7 * x3 + Normal (N) # Datenerzeugungsprozess

Was würde mit der Regression passieren?

Zusammenfassung (lm (y ~ x1 + x2))

Es besteht ein starker Kollinearitätseffekt. Der Standardfehler von x2 ist zu groß. Die lineare Regression identifiziert x2 jedoch als nicht signifikante Variable.

     Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.39164    0.04172 -33.354  < 2e-16 ***
x1           0.65329    0.12550   5.205 2.35e-07 ***
x2          -0.07878    0.05848  -1.347    0.178 

vif (lm (y ~ x1 + x2))

x1       x2 
9.167429 9.167429 

Was ist mit einem anderen Regressionsfall?

Zusammenfassung (lm (y ~ x1 + x2 + x3))

Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.02100    0.06573   0.319    0.749    
x1           0.55398    0.09880   5.607 2.67e-08 ***
x2          -0.02966    0.04604  -0.644    0.520    
x3          -0.70562    0.02845 -24.805  < 2e-16 ***

Die Variable x2 ist nicht signifikant und sollte durch die lineare Regression entfernt werden.

vif (lm (y ~ x1 + x2 + x3))

x1       x2       x3 
9.067865 9.067884 1.000105 

Aus den obigen Ergebnissen geht hervor, dass die Kollinearität bei der linearen Regression kein Problem darstellt und die Überprüfung von VIF nicht sehr hilfreich ist.

Schauen wir uns eine andere Situation an. x3 = c (1: N) # N ist vorher definiert, N = 1000, x3 ist nicht in der gleichen Skala wie x1.

Die "Wahrheit" y ist wie oben definiert

y = .5 * x1 - .7 * x3 + Normal (N) # Datenerzeugungsprozess

Was würde mit der Regression passieren?

Zusammenfassung (lm (y ~ x1 + x2))

Es besteht ein starker Kollinearitätseffekt. Die Standardfehler von x1, x2 sind zu groß. Die lineare Regression kann die wichtige Variable x1 nicht identifizieren.

   Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -350.347      6.395 -54.783   <2e-16 ***
x1            25.207     19.237   1.310    0.190    
x2           -12.212      8.963  -1.362    0.173  

vif (lm (y ~ x1 + x2))

    x1       x2 
9.167429 9.167429 

Was ist mit einem anderen Regressionsfall?

Zusammenfassung (lm (y ~ x1 + x2 + x3))

Coefficients:
          Estimate Std. Error   t value Pr(>|t|)    
(Intercept)  0.0360104  0.0610405     0.590    0.555    
x1           0.5742955  0.0917555     6.259 5.75e-10 ***
x2          -0.0277623  0.0427585    -0.649    0.516    
x3          -0.7000676  0.0001057 -6625.170  < 2e-16 ***

Die Variable x2 ist nicht signifikant und sollte durch die lineare Regression entfernt werden.

vif (lm (y ~ x1 + x2 + x3))

x1       x2       x3 
9.182507 9.184419 1.001853 

Hinweis: Die Regression von y auf x1 und x3. Beachten Sie, dass der Standardfehler von x1 nur 0,03 beträgt.

Zusammenfassung (lm (y ~ x1 + x3))

Coefficients:
              Estimate Std. Error   t value Pr(>|t|)    
(Intercept) -0.1595528  0.0647908    -2.463    0.014 *  
x1           0.4871557  0.0321623    15.147   <2e-16 ***
x3          -0.6997853  0.0001121 -6240.617   <2e-16 ***

Aufgrund der obigen Ergebnisse bin ich zu dem Schluss gekommen, dass

  • Wenn sich die Prädiktorvariablen in ähnlichen Maßstäben befinden, ist die Kollinearität bei der linearen Regression kein Problem.
  • wenn die Prädiktorvariablen nicht in den gleichen Maßstäben liegen,
    • Wenn die beiden stark korrelierten Variablen beide im wahren Modell sind, ist die Kollinearität kein Problem.
    • wenn nur eine der beiden stark korrelierten Variablen im wahren Modell ist,
      • Wenn die anderen "wahren" Variablen in der linearen Regression enthalten sind, identifiziert die lineare Regression die nicht signifikanten Variablen, die mit der signifikanten Variablen korreliert sind.
      • Wenn die anderen "wahren" Variablen nicht in der linearen Regression enthalten sind, ist das Problem der Kollinearität schwerwiegend, was zu einer Standardfehlerinflation führt.

Interessant, obwohl diese Ergebnisse lineare Beziehungen zwischen den Prädiktoren / Merkmalen und y annehmen. Sie sind alles andere als umfassend. Was passiert, wenn Ihre Prädiktoren starke nichtlineare Beziehungen aufweisen (z. B. Interaktionsterme x1 * x2, Sprungfunktionsmerkmale / Dummy-Vars (1, wenn x1> c für eine Konstante) usw.)? Wenn Sie mit niedrigem Signal - zu - Rausch - Verhältnis - Daten arbeiten, wie in Feature - Erstellung für den algorithmischen Handel, Sie immer parsimonious Modelle zu reduzieren Überanpassung (weil Ihre Signale schwach sind) , so gibt es immer noch gute Gründe w multicollinearity zu behandeln sind
FXQuantTrader
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.