Erreurs-types pour la prédiction de lasso utilisant R

60

J'essaie d'utiliser un modèle LASSO pour la prévision et je dois estimer les erreurs-types. Sûrement quelqu'un a déjà écrit un paquet pour faire ceci. Mais pour autant que je sache, aucun des paquets sur CRAN qui font des prédictions à l'aide d'un LASSO ne renverra d'erreurs standard pour ces prédictions.

Ma question est donc la suivante: existe-t-il un package ou un code R disponible pour calculer les erreurs standard des prédictions LASSO?

Rob Hyndman
la source
3
Pour clarifier la nature sous-jacente de cette question (car elle a rebondi b / t CV & SO), je me demande si nous pourrions éditer le titre, Rob. Pourquoi pas «Pourquoi ne semble-t-il pas exister un paquet pour les erreurs standard LASSO, sont-ils difficiles à calculer? Je pense que cela rendrait plus clair le sujet sur CV afin que cette ambiguïté ne se pose pas et que nous n'ayons pas à revenir en arrière.
gung - Réintégrer Monica
3
Je pourrais poser la question davantage sur la méthodologie statistique, mais ce n’était pas ce que je voulais savoir. Il devrait y avoir une place pour les questions sur CV sur le logiciel implémentant une méthode donnée. Discussion complémentaire sur meta.stats.stackexchange.com/q/2007/159
Rob Hyndman
1
Vous pouvez le faire facilement dans un cadre bayésien utilisant un package monomvn, voir ma réponse ci-dessous.
Fabians

Réponses:

46

Kyung et al. (2010), «Régression pénalisée, erreurs-types et lassos bayésiens», Bayesian Analysis, 5 , 2 , suggèrent qu'il pourrait ne pas y avoir de consensus sur une méthode statistiquement valide de calcul des erreurs-types pour les prédictions en lasso. Tibshirani semble être d’accord (diapositive 43) sur le fait que les erreurs types restent un problème non résolu.

Takifugu
la source
7
Cela expliquerait pourquoi les packages n'implémentent pas les erreurs standard.
Rob Hyndman
20

Sur une note connexe, qui pourrait être utile, Tibshirani et ses collègues ont proposé un test de signification pour le lasso. Le document est disponible et intitulé "Un test de signification pour le lasso". Une version gratuite du document peut être trouvée ici

Juliette
la source
Lien sans paywall vers le document que vous avez mentionné: statweb.stanford.edu/~tibs/ftp/covtest.pdf
mvherweg
13

Sandipan Karmakar vous dit quoi faire, cela devrait vous aider sur le "comment":

> 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
la source
13

Bayésien LASSO est la seule alternative au problème du calcul des erreurs types. Les erreurs types sont automatiquement calculées dans LASSO bayésien ... Vous pouvez implémenter le LASSO bayésien très facilement à l'aide du schéma d'échantillonnage de Gibbs ...

LASSO bayésien nécessite que des distributions préalables soient affectées aux paramètres du modèle. Dans le modèle LASSO, nous avons la fonction objectif avec comme paramètre de régularisation. Comme nous avons -norm pour , un type spécial de distribution préalable est nécessaire pour cela, la distribution LAPLACE est un mélange à l’échelle de la distribution normale avec une distribution exponentielle comme densité de mélange. Sur la base des postérieurs conditionnels complets de chacun des paramètres, il faut en déduire.||yXβ||22+λ||β||1λ1β

Ensuite, on peut utiliser Gibbs Sampling pour simuler la chaîne. Voir Park & ​​Cassella (2008), "The Lasso Bayesian", JASA , 103 , 482 .

Lasso fréquentiste présente trois inconvénients inhérents:

  1. Il faut choisir par validation croisée ou d’autres moyens.λ

  2. Les erreurs standard sont difficiles à calculer car le LARS et d’autres algorithmes produisent des estimations ponctuelles de .β

  3. La structure hiérarchique du problème en question ne peut pas être codée à l'aide du modèle fréquentiste, ce qui est assez facile dans le cadre bayésien.

Sandipan Karmakar
la source
11

Pour ajouter aux réponses ci-dessus, le problème semble être que même un bootstrap est probablement insuffisant car l'estimation du modèle pénalisé est biaisée et que le bootstrap ne parlera que de la variance, ignorant le biais de l'estimation. Ceci est bien résumé dans la vignette du paquet pénalisé à la page 18 .

Si utilisé pour la prédiction cependant, pourquoi une erreur standard du modèle est-elle requise? Ne pouvez-vous pas effectuer une validation croisée ou un amorçage approprié et générer une erreur standard autour d’une mesure liée à la prédiction telle que MSE?

B_Miner
la source
3
Le bootstrap peut à la fois estimer et corriger le biais, bien que les échantillons doivent être assez volumineux.
Glen_b
3

Il existe le paquet sélectifInference dans R, https://cran.r-project.org/web/packages/selectiveInference/index.html , qui fournit des intervalles de confiance et des valeurs p pour vos coefficients ajustés par le LASSO, sur la base du document suivant :

Stephen Reid, Jerome Friedman et Rob Tibshirani (2014). Une étude de l'estimation de la variance d'erreur dans la régression au lasso. arXiv: 1311.5274

PS: sachez que cela produit des estimations d’erreur pour vos paramètres, mais pas pour l’erreur sur votre prédiction finale, si c’est ce que vous cherchez ... Je suppose que vous pourriez utiliser "intervalles de prédiction de population" pour cela si vous le souhaitez (par rééchantillonnage des paramètres en fonction de l'ajustement suivant une distribution normale multivariée).

Tom Wenseleers
la source