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?
R
Aufruf 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.Antworten:
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.
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.
Jetzt ist es Zeit, die "Wahrheit" hinzuzufügen:
Kann eine gewöhnliche Regression im gewaltigen Kollinearitätsproblem Erfolg haben?
Oh ja es kann:
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?
quelle
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
Die "Wahrheit" y ist nun wie folgt definiert
Was würde mit der Regression passieren?
Es besteht ein starker Kollinearitätseffekt. Der Standardfehler von x2 ist zu groß. Die lineare Regression identifiziert x2 jedoch als nicht signifikante Variable.
Was ist mit einem anderen Regressionsfall?
Die Variable x2 ist nicht signifikant und sollte durch die lineare Regression entfernt werden.
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
Was würde mit der Regression passieren?
Es besteht ein starker Kollinearitätseffekt. Die Standardfehler von x1, x2 sind zu groß. Die lineare Regression kann die wichtige Variable x1 nicht identifizieren.
Was ist mit einem anderen Regressionsfall?
Die Variable x2 ist nicht signifikant und sollte durch die lineare Regression entfernt werden.
Hinweis: Die Regression von y auf x1 und x3. Beachten Sie, dass der Standardfehler von x1 nur 0,03 beträgt.
Aufgrund der obigen Ergebnisse bin ich zu dem Schluss gekommen, dass
quelle