Errores estándar para la predicción de lazo usando R

60

Estoy tratando de usar un modelo LASSO para la predicción, y necesito estimar los errores estándar. Seguramente alguien ya ha escrito un paquete para hacer esto. Pero hasta donde puedo ver, ninguno de los paquetes en CRAN que hacen predicciones usando un LASSO devolverá errores estándar para esas predicciones.

Entonces mi pregunta es: ¿Hay un paquete o algún código R disponible para calcular los errores estándar para las predicciones de LASSO?

Rob Hyndman
fuente
3
Para aclarar la naturaleza subyacente de esta pregunta (ya que ha estado yendo y viniendo b / t CV & SO), me pregunto si podríamos editar el título, Rob. ¿Qué tal "por qué no parece haber un paquete para los errores estándar de LASSO, son difíciles de calcular?", O algo así, tal vez junto con algunas ediciones menores en el cuerpo para que sea coherente. Creo que eso lo aclararía más sobre el tema en CV para que esta ambigüedad no surja y no tengamos que ir y venir.
gung - Restablece a Monica
3
Podría hacer la pregunta más sobre la metodología estadística, pero eso no era realmente lo que quería saber. Debería haber un lugar para preguntas en CV sobre qué software implementa un método dado. Discusión adicional en meta.stats.stackexchange.com/q/2007/159
Rob Hyndman
1
Puede hacerlo fácilmente en un marco bayesiano usando el paquete monomvn, vea mi respuesta a continuación.
fabians

Respuestas:

20

En una nota relacionada, que puede ser útil, Tibshirani y sus colegas han propuesto una prueba de significación para el lazo. El documento está disponible y titulado "Una prueba de importancia para el lazo". Puede encontrar una versión gratuita del documento aquí.

julio
fuente
Enlace sin paywall al documento que menciona: statweb.stanford.edu/~tibs/ftp/covtest.pdf
mvherweg
13

La respuesta de Sandipan Karmakar te dice qué hacer, esto debería ayudarte en el "cómo":

> library(monomvn)
>
> ## following the lars diabetes example
> data(diabetes)
> str(diabetes)
'data.frame':   442 obs. of  3 variables:
 $ x : AsIs [1:442, 1:10] 0.038075.... -0.00188.... 0.085298.... -0.08906.... 0.005383.... ...
      ..- attr(*, "dimnames")=List of 2
      .. ..$ : NULL
  .. ..$ : chr  "age" "sex" "bmi" "map" ...

 $ y : num  151 75 141 206 135 97 138 63 110 310 ...

[...]

> ## Bayesian Lasso regression
> reg_blas <- with(diabetes, blasso(x, y))
t=100, m=8
t=200, m=5
t=300, m=8
t=400, m=8
t=500, m=7
t=600, m=8
t=700, m=8
t=800, m=8
t=900, m=5
> 
> ## posterior mean beta (setting those with >50% mass at zero to exactly zero)
> (beta <- colMeans(reg_blas$beta) * (colMeans(reg_blas$beta != 0)  > 0.5))
      b.1       b.2       b.3       b.4       b.5       b.6       b.7       b.8 
   0.0000 -195.9795  532.7136  309.1673 -101.1288    0.0000 -196.4315    0.0000 
      b.9      b.10 
 505.4726    0.0000 
> 
> ## n x nsims matrix of realizations from the posterior predictive:
> post_pred_y <- with(reg_blas, X %*% t(beta))
> 
> ## predictions:
> y_pred <- rowMeans(post_pred_y)
> head(y_pred)
[1]  52.772443 -78.690610  24.234753   9.717777 -23.360369 -45.477199
> 
> ## sd of y:
> sd_y <- apply(post_pred_y, 1, sd)
> head(sd_y)
[1] 6.331673 6.756569 6.031290 5.236101 5.657265 6.150473
> 
> ## 90% credible intervals
> ci_y <- t(apply(post_pred_y, 1, quantile, probs=c(0.05, 0.95)))
> head(ci_y)
             5%       95%
[1,]  42.842535  62.56743
[2,] -88.877760 -68.47159
[3,]  14.933617  33.85679
[4,]   1.297094  18.01523
[5,] -32.709132 -14.13260
[6,] -55.533807 -35.77809
fabians
fuente
13

Bayesian LASSO es la única alternativa al problema de calcular errores estándar. Los errores estándar se calculan automáticamente en Bayesian LASSO ... Puede implementar Bayesian LASSO muy fácilmente utilizando el esquema de muestreo de Gibbs ...

Bayesian LASSO necesita distribuciones previas que se asignen a los parámetros del modelo. En el modelo LASSO, tenemos la función objetivo con como el parámetro de regularización. Aquí, como tenemos -norm for , entonces se necesita un tipo especial de distribución previa para esto, LAPLACE distribuye una mezcla a escala de distribución normal con distribución exponencial como densidad de mezcla. Sobre la base de los posteriores condicionales completos de cada uno de los parámetros deben deducirse.||yXβ||22+λ||β||1λ1β

Entonces uno puede usar Gibbs Sampling para simular la cadena. Ver Park & ​​Cassella (2008), "The Bayesian Lasso", JASA , 103 , 482 .

Hay tres inconvenientes inherentes del LASSO frecuente:

  1. Uno tiene que elegir por validación cruzada u otros medios.λ

  2. Los errores estándar son difíciles de calcular ya que el LARS y otros algoritmos producen estimaciones puntuales para .β

  3. La estructura jerárquica del problema en cuestión no puede codificarse utilizando el modelo frecuentista, que es bastante fácil en el marco bayesiano.

Sandipan Karmakar
fuente
11

Para agregar a las respuestas anteriores, el problema parece ser que incluso un bootstrap es probablemente insuficiente, ya que la estimación del modelo penalizado está sesgada y el bootstrapping solo hablará de la variación, ignorando el sesgo de la estimación. Esto se resume muy bien en la viñeta del paquete penalizado en la página 18 .

Sin embargo, si se usa para predicción, ¿por qué se requiere un error estándar del modelo? ¿No puede realizar una validación cruzada o un arranque adecuado y generar un error estándar en torno a una métrica relacionada con la predicción como MSE?

B_Miner
fuente
3
Bootstrapping puede estimar y corregir el sesgo, aunque las muestras deben ser bastante grandes.
Glen_b
3

Existe el paquete selectivo de inferencia en R, https://cran.r-project.org/web/packages/selectiveInference/index.html , que proporciona intervalos de confianza y valores p para sus coeficientes ajustados por LASSO, según el siguiente documento :

Stephen Reid, Jerome Friedman y Rob Tibshirani (2014). Un estudio de estimación de varianza de error en regresión de lazo. arXiv: 1311.5274

PD: solo tenga en cuenta que esto produce estimaciones de error para sus parámetros, no estoy seguro del error en su predicción final, si eso es lo que está buscando ... Supongo que podría usar "intervalos de predicción de población" para eso si lo desea (por parámetros de muestreo según el ajuste siguiendo una distribución normal multivariada).

Tom Wenseleers
fuente