La interpretación de probabilidad de las expresiones de verosimilitud frecuentes, los valores de p, etcétera, para un modelo LASSO y la regresión por pasos, no son correctos.
Esas expresiones sobrestiman la probabilidad. Por ejemplo, se supone que un intervalo de confianza del 95% para algún parámetro indica que tiene una probabilidad del 95% de que el método dé como resultado un intervalo con la verdadera variable del modelo dentro de ese intervalo.
Sin embargo, los modelos ajustados no son el resultado de una hipótesis única típica, y en su lugar estamos escogiendo (seleccionamos entre muchos modelos alternativos posibles) cuando hacemos regresión por pasos o regresión LASSO.
Tiene poco sentido evaluar la corrección de los parámetros del modelo (especialmente cuando es probable que el modelo no sea correcto).
(XTX)−1
X
Ejemplo: el siguiente gráfico que muestra los resultados de un modelo de juguete para una señal que es una suma lineal de 10 curvas gaussianas (esto puede, por ejemplo, parecerse a un análisis en química en el que una señal para un espectro se considera una suma lineal de varios componentes) La señal de las 10 curvas está equipada con un modelo de 100 componentes (curvas gaussianas con diferente media) usando LASSO. La señal está bien estimada (compare las curvas roja y negra que están razonablemente cerca). Pero, los coeficientes subyacentes reales no están bien estimados y pueden estar completamente equivocados (compare las barras rojas y negras con puntos que no son lo mismo). Ver también los últimos 10 coeficientes:
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
El modelo LASSO selecciona coeficientes que son muy aproximados, pero desde la perspectiva de los coeficientes mismos significa un gran error cuando se estima que un coeficiente que no debería ser cero es cero y se estima que un coeficiente vecino que debería ser cero distinto de cero Cualquier intervalo de confianza para los coeficientes tendría muy poco sentido.
Montaje LASSO
Ajuste gradual
Como comparación, la misma curva puede ajustarse con un algoritmo paso a paso que conduce a la imagen a continuación. (con problemas similares que los coeficientes están cerca pero no coinciden)
Incluso cuando considera la precisión de la curva (en lugar de los parámetros, que en el punto anterior queda claro que no tiene sentido), entonces tiene que lidiar con el sobreajuste. Cuando realiza un procedimiento de adaptación con LASSO, utiliza datos de entrenamiento (para ajustar los modelos con diferentes parámetros) y datos de prueba / validación (para ajustar / encontrar cuál es el mejor parámetro), pero también debe usar un tercer conjunto separado de datos de prueba / validación para conocer el rendimiento de los datos.
Un valor p o algo similar no funcionará porque está trabajando en un modelo ajustado que es muy diferente y (mucho mayor libertad) del método regular de ajuste lineal.
sufre los mismos problemas que tiene la regresión gradual?
R2
Pensé que la razón principal para usar LASSO en lugar de la regresión gradual es que LASSO permite una selección de parámetros menos codiciosa, que está menos influenciada por la multicollinaridad. (más diferencias entre LASSO y paso a paso: superioridad de LASSO sobre la selección hacia adelante / eliminación hacia atrás en términos del error de predicción de validación cruzada del modelo )
Código para la imagen de ejemplo
# 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)