L'interpretazione di probabilità delle espressioni frequentistiche di probabilità, valori p eccetera, per un modello LASSO e regressione graduale, non sono corrette.
Quelle espressioni sopravvalutano la probabilità. Ad esempio, si presume che un intervallo di confidenza al 95% per alcuni parametri abbia una probabilità del 95% che il metodo comporti un intervallo con la vera variabile del modello all'interno di tale intervallo.
Tuttavia, i modelli montati non derivano da una singola ipotesi tipica, e invece stiamo raccogliendo ciliegia (selezioniamo da molti possibili modelli alternativi) quando facciamo regressione graduale o regressione LASSO.
Non ha molto senso valutare la correttezza dei parametri del modello (specialmente quando è probabile che il modello non sia corretto).
Nell'esempio seguente, spiegato più avanti, il modello è adattato a molti regressori e "soffre" di multicollinearità. Ciò rende probabile che un regressore adiacente (che è fortemente correlato) sia selezionato nel modello invece di quello che è veramente nel modello. La forte correlazione fa sì che i coefficienti abbiano un grande errore / varianza (rispetto alla matrice ).(XTX)−1
Tuttavia, questa elevata varianza dovuta alla multicollionearità non viene "vista" nella diagnostica come valori p o errore standard dei coefficienti, poiché questi sono basati su una matrice di progettazione più piccola con meno regressori. (e non esiste un metodo semplice per calcolare quel tipo di statistiche per LASSO)X
Esempio: il grafico in basso che mostra i risultati di un modello giocattolo per un segnale che è una somma lineare di 10 curve gaussiane (ciò può ad esempio assomigliare ad un'analisi in chimica in cui un segnale per uno spettro è considerato una somma lineare di diversi componenti). Il segnale delle 10 curve è dotato di un modello di 100 componenti (curve gaussiane con media diversa) utilizzando LASSO. Il segnale è ben stimato (confronta la curva rossa e nera che sono ragionevolmente vicine). Tuttavia, i coefficienti sottostanti effettivi non sono ben stimati e potrebbero essere completamente errati (confrontare le barre rosse e nere con punti che non sono gli stessi). Vedi anche gli ultimi 10 coefficienti:
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
Il modello LASSO seleziona coefficienti molto approssimativi, ma dal punto di vista dei coefficienti stessi significa un grande errore quando si stima che un coefficiente che dovrebbe essere diverso da zero sia zero e che un coefficiente adiacente che dovrebbe essere zero sia stimato non zero. Qualsiasi intervallo di confidenza per i coefficienti avrebbe poco senso.
Raccordo LASSO
Montaggio graduale
A titolo di confronto, la stessa curva può essere dotata di un algoritmo graduale che porta all'immagine seguente. (con problemi simili che i coefficienti sono vicini ma non corrispondono)
Anche quando si considera l'accuratezza della curva (piuttosto che i parametri, che nel punto precedente è chiarito che non ha senso), allora si deve affrontare il sovradimensionamento. Quando si esegue una procedura di adattamento con LASSO, si utilizzano i dati di allenamento (per adattare i modelli con parametri diversi) e i dati di test / convalida (per ottimizzare / trovare qual è il parametro migliore), ma è necessario utilizzare anche un terzo set separato dei dati di test / validazione per scoprire le prestazioni dei dati.
Un valore p o qualcosa di simile non funzionerà perché stai lavorando su un modello sintonizzato che è il picking ciliegia e diverso (gradi di libertà molto più grandi) dal normale metodo di adattamento lineare.
soffre degli stessi problemi della regressione graduale?
Sembri riferirti a problemi come la distorsione in valori come , valori p, punteggi F o errori standard. Credo che LASSO non sia usato per risolvere questi problemi.R2
Ho pensato che il motivo principale per usare LASSO al posto della regressione graduale è che LASSO consente una selezione dei parametri meno avida, che è meno influenzata dalla multicollinarità. (più differenze tra LASSO e graduale: superiorità di LASSO sulla selezione in avanti / eliminazione all'indietro in termini di errore di previsione della convalida incrociata del modello )
Codice per l'immagine di esempio
# 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)