A interpretação da probabilidade de expressões freqüentes de probabilidade, valores de p etc., para um modelo LASSO e regressão passo a passo, não está correta.
Essas expressões superestimam a probabilidade. Por exemplo, um intervalo de confiança de 95% para algum parâmetro deve dizer que você tem uma probabilidade de 95% de que o método resultará em um intervalo com a variável de modelo verdadeira dentro desse intervalo.
No entanto, os modelos ajustados não resultam de uma única hipótese típica e, em vez disso, escolhemos (selecionamos dentre muitos possíveis modelos alternativos) quando fazemos regressão passo a passo ou regressão LASSO.
Não faz muito sentido avaliar a correção dos parâmetros do modelo (especialmente quando é provável que o modelo não esteja correto).
( XTX)- 1
X
Exemplo: o gráfico abaixo, que exibe os resultados de um modelo de brinquedo para algum sinal que é uma soma linear de 10 curvas gaussianas (isso pode, por exemplo, se assemelhar a uma análise em química em que um sinal para um espectro é considerado uma soma linear de vários componentes). O sinal das 10 curvas é equipado com um modelo de 100 componentes (curvas Gaussianas com média diferente) usando LASSO. O sinal é bem estimado (compare as curvas vermelha e preta que estão razoavelmente próximas). Porém, os coeficientes subjacentes reais não são bem estimados e podem estar completamente errados (compare as barras vermelha e preta com pontos que não são iguais). Veja também os ú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
O modelo LASSO seleciona coeficientes muito aproximados, mas da perspectiva dos próprios coeficientes, isso significa um grande erro quando se estima que um coeficiente que não seja zero e zero e se estima que um coeficiente vizinho que seja zero. diferente de zero. Qualquer intervalo de confiança para os coeficientes faria muito pouco sentido.
Conexão LASSO
Montagem passo a passo
Como comparação, a mesma curva pode ser ajustada com um algoritmo stepwise que leva à imagem abaixo. (com problemas semelhantes aos dos coeficientes, mas não coincidem)
Mesmo quando você considera a precisão da curva (e não os parâmetros, que no ponto anterior fica claro que isso não faz sentido), você precisa lidar com o ajuste excessivo. Ao executar um procedimento de ajuste com o LASSO, você utiliza dados de treinamento (para ajustar os modelos com parâmetros diferentes) e dados de teste / validação (para ajustar / descobrir qual é o melhor parâmetro), mas você também deve usar um terceiro conjunto separado de dados de teste / validação para descobrir o desempenho dos dados.
Um valor-p ou algo semelhante não funcionará porque você está trabalhando em um modelo ajustado que é uma escolha diferente e diferente (graus de liberdade muito maiores) do método de ajuste linear regular.
sofre dos mesmos problemas que a regressão gradual faz?
R2
Eu pensei que o principal motivo para usar o LASSO no lugar da regressão passo a passo é que o LASSO permite uma seleção de parâmetros menos gananciosa, menos influenciada pela multicolinearidade. (mais diferenças entre o LASSO e o stepwise: superioridade do LASSO em relação à seleção direta / eliminação retroativa em termos de erro de previsão de validação cruzada do modelo )
Código para a imagem de exemplo
# 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)