Die Wahrscheinlichkeitsinterpretation von häufig auftretenden Ausdrücken von Wahrscheinlichkeit, p-Werten usw. für ein LASSO-Modell und die schrittweise Regression sind nicht korrekt.
Diese Ausdrücke überschätzen die Wahrscheinlichkeit. Zum Beispiel soll ein 95% -Konfidenzintervall für einen Parameter besagen, dass die Wahrscheinlichkeit, dass die Methode zu einem Intervall mit der wahren Modellvariablen innerhalb dieses Intervalls führt, bei 95% liegt.
Die angepassten Modelle ergeben sich jedoch nicht aus einer typischen Einzelhypothese. Stattdessen wird bei der schrittweisen Regression oder der LASSO-Regression eine Auswahl aus vielen möglichen alternativen Modellen getroffen.
Es ist wenig sinnvoll, die Richtigkeit der Modellparameter zu bewerten (insbesondere, wenn es wahrscheinlich ist, dass das Modell nicht korrekt ist).
In dem später erläuterten Beispiel wird das Modell an viele Regressoren angepasst und leidet unter Multikollinearität. Dies macht es wahrscheinlich, dass ein benachbarter Regressor (der stark korreliert) im Modell anstelle desjenigen ausgewählt wird, der sich wirklich im Modell befindet. Die starke Korrelation bewirkt, dass die Koeffizienten einen großen Fehler / eine große Varianz aufweisen (bezogen auf die Matrix ).( XTX)- 1
Diese hohe Varianz aufgrund von Multikollionearität wird jedoch in der Diagnostik wie p-Werten oder Standardfehlern von Koeffizienten nicht "gesehen", da diese auf einer kleineren Entwurfsmatrix mit weniger Regressoren basieren . (und es gibt keine einfache Methode , um diese Art von Statistiken für LASSO zu berechnen)X
Beispiel: Die folgende Grafik zeigt die Ergebnisse eines Spielzeugmodells für ein Signal, das eine lineare Summe von 10 Gaußschen Kurven ist (dies kann beispielsweise einer Analyse in der Chemie ähneln, bei der ein Signal für ein Spektrum als eine lineare Summe von betrachtet wird) mehrere Komponenten). Das Signal der 10 Kurven wird mit einem Modell von 100 Komponenten (Gaußkurven mit unterschiedlichem Mittelwert) unter Verwendung von LASSO angepasst. Das Signal ist gut geschätzt (vergleichen Sie die rote und schwarze Kurve, die ziemlich nah sind). Die tatsächlich zugrunde liegenden Koeffizienten sind jedoch nicht gut geschätzt und können völlig falsch sein (vergleichen Sie die roten und schwarzen Balken mit Punkten, die nicht gleich sind). Siehe auch die letzten 10 Koeffizienten:
91 91 92 93 94 95 96 97 98 99 100
true model 0 0 0 0 0 0 0 142.8 0 0 0
fitted 0 0 0 0 0 0 129.7 6.9 0 0 0
Das LASSO-Modell wählt Koeffizienten aus, die sehr ungefähr sind, aber aus der Perspektive der Koeffizienten selbst bedeutet es einen großen Fehler, wenn ein Koeffizient, der nicht Null sein sollte, auf Null geschätzt wird und ein benachbarter Koeffizient, der Null sein sollte, auf Null geschätzt wird nicht Null. Etwaige Konfidenzintervalle für die Koeffizienten wären wenig sinnvoll.
LASSO passend
Schrittweise Anpassung
Zum Vergleich kann dieselbe Kurve mit einem schrittweisen Algorithmus angepasst werden, der zum folgenden Bild führt. (mit ähnlichen Problemen, dass die Koeffizienten nahe beieinander liegen, aber nicht übereinstimmen)
Auch wenn Sie die Genauigkeit der Kurve berücksichtigen (und nicht die Parameter, die im vorherigen Punkt klargestellt wurden, dass sie keinen Sinn ergeben), müssen Sie sich mit Überanpassung befassen. Wenn Sie mit LASSO ein Anpassungsverfahren durchführen, verwenden Sie Trainingsdaten (um die Modelle mit unterschiedlichen Parametern anzupassen) und Test- / Validierungsdaten (um den besten Parameter abzustimmen / zu finden). Sie sollten jedoch auch einen dritten separaten Satz verwenden von Test- / Validierungsdaten, um die Leistung der Daten herauszufinden.
Ein p-Wert oder ähnliches funktioniert nicht, weil Sie an einem optimierten Modell arbeiten, das sich von der normalen linearen Anpassungsmethode unterscheidet (viel größere Freiheitsgrade).
leiden unter den gleichen Problemen schrittweise Regression tut?
Sie scheinen sich auf Probleme wie Verzerrungen bei Werten wie , p-Werten, F-Scores oder Standardfehlern zu beziehen . Ich glaube, dass LASSO nicht verwendet wird, um diese Probleme zu lösen .R2
Ich dachte, dass der Hauptgrund für die Verwendung von LASSO anstelle einer schrittweisen Regression darin besteht, dass LASSO eine weniger gierige Parameterauswahl ermöglicht, die weniger von Multikollinarität beeinflusst wird. (Weitere Unterschiede zwischen LASSO und schrittweise: Überlegenheit von LASSO gegenüber Vorwärtsauswahl / Rückwärtseliminierung in Bezug auf den Kreuzvalidierungs-Vorhersagefehler des Modells )
Code für das Beispielbild
# settings
library(glmnet)
n <- 10^2 # number of regressors/vectors
m <- 2 # multiplier for number of datapoints
nel <- 10 # number of elements in the model
set.seed(1)
sig <- 4
t <- seq(0,n,length.out=m*n)
# vectors
X <- sapply(1:n, FUN <- function(x) dnorm(t,x,sig))
# some random function with nel elements, with Poisson noise added
par <- sample(1:n,nel)
coef <- rep(0,n)
coef[par] <- rnorm(nel,10,5)^2
Y <- rpois(n*m,X %*% coef)
# LASSO cross validation
fit <- cv.glmnet(X,Y, lower.limits=0, intercept=FALSE,
alpha=1, nfolds=5, lambda=exp(seq(-4,4,0.1)))
plot(fit$lambda, fit$cvm,log="xy")
plot(fit)
Yfit <- (X %*% coef(fit)[-1])
# non negative least squares
# (uses a stepwise algorithm or should be equivalent to stepwise)
fit2<-nnls(X,Y)
# plotting
par(mgp=c(0.3,0.0,0), mar=c(2,4.1,0.2,2.1))
layout(matrix(1:2,2),heights=c(1,0.55))
plot(t,Y,pch=21,col=rgb(0,0,0,0.3),bg=rgb(0,0,0,0.3),cex=0.7,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",bty="n")
#lines(t,Yfit,col=2,lwd=2) # fitted mean
lines(t,X %*% coef,lwd=2) # true mean
lines(t,X %*% coef(fit2), col=3,lwd=2) # 2nd fit
# add coefficients in the plot
for (i in 1:n) {
if (coef[i] > 0) {
lines(c(i,i),c(0,coef[i])*dnorm(0,0,sig))
points(i,coef[i]*dnorm(0,0,sig), pch=21, col=1,bg="white",cex=1)
}
if (coef(fit)[i+1] > 0) {
# lines(c(i,i),c(0,coef(fit)[i+1])*dnorm(0,0,sig),col=2)
# points(i,coef(fit)[i+1]*dnorm(0,0,sig), pch=21, col=2,bg="white",cex=1)
}
if (coef(fit2)[i+1] > 0) {
lines(c(i,i),c(0,coef(fit2)[i+1])*dnorm(0,0,sig),col=3)
points(i,coef(fit2)[i+1]*dnorm(0,0,sig), pch=21, col=3,bg="white",cex=1)
}
}
#Arrows(85,23,85-6,23+10,-0.2,col=1,cex=0.5,arr.length=0.1)
#Arrows(86.5,33,86.5-6,33+10,-0.2,col=2,cex=0.5,arr.length=0.1)
#text(85-6,23+10,"true coefficient", pos=2, cex=0.7,col=1)
#text(86.5-6,33+10, "fitted coefficient", pos=2, cex=0.7,col=2)
text(0,50, "signal versus position\n true mean (black), fitted with nnls (green)", cex=1,col=1,pos=4, font=2)
plot(-100,-100,pch=21,col=1,bg="white",cex=0.7,type="l",lwd=2,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",
ylim=c(0,max(coef(fit)))*dnorm(0,0,sig),xlim=c(0,n),bty="n")
#lines(t,X %*% coef,lwd=2,col=2)
for (i in 1:n) {
if (coef[i] > 0) {
lines(t,X[,i]*coef[i],lty=1)
}
if (coef(fit)[i+1] > 0) {
# lines(t,X[,i]*coef(fit)[i+1],col=2,lty=1)
}
if (coef(fit2)[i+1] > 0) {
lines(t,X[,i]*coef(fit2)[i+1],col=3,lty=1)
}
}
text(0,33, "illustration of seperate components/curves", cex=1,col=1,pos=4, font=2)