使用R进行套索预测的标准误差


60

我正在尝试使用LASSO模型进行预测,并且需要估算标准误差。肯定有人已经编写了一个软件包来执行此操作。但是据我所知,使用LASSO进行预测的CRAN程序包都不会返回这些预测的标准错误。

所以我的问题是:是否有可用的软件包或一些R代码来计算LASSO预测的标准误差?


3
为了弄清这个问题的根本性质(因为它一直在不断变化的CV和SO),我想知道是否可以编辑标题Rob。怎么样“为什么似乎没有针对LASSO标准错误的软件包,它们难于计算?”或类似的东西,也许加上一些小的修改以使其一致。我认为这将使它在CV主题上更加清晰,这样就不会出现这种歧义,我们也不必反复进行。
gung-恢复莫妮卡

3
我可以提出更多有关统计方法的问题,但这实际上并不是我想知道的。在简历上应该有一个地方可以询问关于什么软件实现给定方法的问题。更多信息,请访问meta.stats.stackexchange.com/q/2007/159
Rob Hyndman

1
您可以在使用包的贝叶斯框架中轻松完成此操作monomvn,请参阅下面的答案。
fabians 2014年

Answers:




13

Sandipan Karmakar的答案会告诉您该怎么做,这应该对您的“操作方法”有所帮助:

> 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

贝叶斯LASSO是计算标准误差问题的唯一替代方法。标准误差是在贝叶斯LASSO中自动计算的...您可以使用Gibbs采样方案非常轻松地实现贝叶斯LASSO ...

贝叶斯LASSO需要先验分布才能分配给模型的参数。在LASSO模型中,我们具有目标函数和作为正则化参数。在这里,因为我们对具有 ell_1-范数,所以为此需要一种特殊的先验分布,即LAPLACE分布是正态分布的比例混合,具有作为混合密度的指数分布。根据每个参数的全条件后验推导。||yXβ||22+λ||β||1λ1β

然后,可以使用Gibbs采样来模拟链。见 公园及Cassella(2008年), “贝叶斯套索”,JASA103,482

常客LASSO具有三个固有的缺点:

  1. 必须通过交叉验证或其他方式选择。λ

  2. 由于LARS和其他算法会产生点估计,因此很难计算标准误差。β

  3. 当前问题的层次结构无法使用频繁模型进行编码,这在贝叶斯框架中非常容易。


11

为了补充上面的答案,问题似乎是,即使自举也可能不足,因为来自惩罚模型的估计是有偏见的,而自举法只会说出方差-忽略了估计的偏见。这在第18页上的“已收费包装”的小插图中得到了很好的总结。

但是,如果用于预测,为什么需要模型的标准误差?您是否不能适当地交叉验证或引导,并围绕与预测相关的指标(例如MSE)产生标准错误?


3
自举既可以估计也可以校正偏差,尽管样本需要相当大。
Glen_b 2014年

3

R 基于以下论文,在R中有selectionInference程序包https://cran.r-project.org/web/packages/selectiveInference/index.html,它为LASSO拟合的系数提供了置信区间和p值。 :

Stephen Reid,Jerome Friedman和Rob Tibshirani(2014)。套索回归中误差方差估计的研究。arXiv:1311.5274

PS:只是意识到这会为您的参数产生误差估计,不确定最终预测中的误差,如果那就是您想要的……我想您可以为此使用“人口预测间隔”(通过根据服从多元正态分布的拟合重新采样参数)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.