Errori standard per la previsione del lazo usando R


60

Sto cercando di utilizzare un modello LASSO per la previsione e devo stimare gli errori standard. Sicuramente qualcuno ha già scritto un pacchetto per farlo. Ma per quanto posso vedere, nessuno dei pacchetti su CRAN che fanno previsioni usando un LASSO restituirà errori standard per quelle previsioni.

Quindi la mia domanda è: esiste un pacchetto o un codice R disponibile per calcolare gli errori standard per le previsioni LASSO?


3
Per chiarire la natura di fondo di questa domanda (dal momento che è rimbalzato avanti e indietro tra CV e SO), mi chiedo se potremmo modificare il titolo, Rob. Che ne dici di "Perché non sembra esserci un pacchetto per errori standard LASSO, sono difficili da calcolare?", O qualcosa del genere, forse accoppiato con alcune modifiche minori al corpo per renderlo coerente. Penso che ciò renderebbe più chiaramente l'argomento sul CV in modo che questa ambiguità non sorga e non dobbiamo andare avanti e indietro.
gung - Ripristina Monica

3
Potrei fare di più la domanda sulla metodologia statistica, ma in realtà non era quello che volevo sapere. Dovrebbe esserci spazio per domande sul CV su quale software implementa un determinato metodo. Ulteriori discussioni su meta.stats.stackexchange.com/q/2007/159
Rob Hyndman,

1
Puoi farlo facilmente in un framework bayesiano usando il pacchetto monomvn, vedi la mia risposta qui sotto.
fabians

Risposte:




13

La risposta di Sandipan Karmakar ti dice cosa fare, questo dovrebbe aiutarti sul "come":

> 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

13

Bayesian LASSO è l'unica alternativa al problema del calcolo degli errori standard. Gli errori standard vengono calcolati automaticamente in LASSO bayesiano ... È possibile implementare molto facilmente LASSO bayesiano utilizzando lo schema di campionamento di Gibbs ...

Bayasso LASSO necessita di distribuzioni precedenti da assegnare ai parametri del modello. Nel modello LASSO, abbiamo la funzione oggettiva con come parametro di regolarizzazione. Qui dato che abbiamo -norm per , per questo è necessario un tipo speciale di distribuzione precedente per questo, la distribuzione LAPLACE è una miscela in scala di distribuzione normale con distribuzione esponenziale come densità di miscelazione. Sulla base dei posteriori condizionali completi di ciascuno dei parametri devono essere dedotti.||yXβ||22+λ||β||1λ1β

Quindi si può usare il campionamento di Gibbs per simulare la catena. Vedi Park & ​​Cassella (2008), "The Bayesian Lasso", JASA , 103 , 482 .

Ci sono tre inconvenienti inerenti al frequentatore LASSO:

  1. Bisogna scegliere per convalida incrociata o altri mezzi.λ

  2. Gli errori standard sono difficili da calcolare poiché i LARS e altri algoritmi producono stime puntuali per .β

  3. La struttura gerarchica del problema a portata di mano non può essere codificata usando il modello frequentista, che è abbastanza facile nel quadro bayesiano.


11

Per aggiungere alle risposte di cui sopra, il problema sembra essere che anche un bootstrap è probabilmente insufficiente poiché la stima dal modello penalizzato è distorta e il bootstrap parlerà solo con la varianza, ignorando la distorsione della stima. Questo è ben riassunto nella vignetta per il pacchetto penalizzato a pagina 18 .

Se utilizzato per la previsione, tuttavia, perché è richiesto un errore standard dal modello? Non è possibile incrociare la convalida o il bootstrap in modo appropriato e produrre un errore standard attorno a una metrica correlata alla previsione come MSE?


3
Il bootstrap può sia stimare che correggere la distorsione, sebbene i campioni debbano essere abbastanza grandi.
Glen_b

3

Esiste il pacchetto selectInference in R, https://cran.r-project.org/web/packages/selectiveInference/index.html , che fornisce intervalli di confidenza e valori p per i tuoi coefficienti adattati da LASSO, sulla base del seguente documento :

Stephen Reid, Jerome Friedman e Rob Tibshirani (2014). Uno studio sulla stima della varianza dell'errore nella regressione del lazo. arXiv: 1311.5274

PS: renditi conto che questo produce stime di errore per i tuoi parametri, non sono sicuro dell'errore sulla tua previsione finale, se è quello che stai cercando ... Suppongo che potresti usare "intervalli di previsione della popolazione" per quello se vuoi (di ricampionamento dei parametri in base all'adattamento a seguito di una distribuzione normale multivariata).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.