Rを使用した投げ縄予測の標準誤差


60

予測にLASSOモデルを使用しようとしていますが、標準誤差を推定する必要があります。きっと誰かがこれを行うためのパッケージをすでに書いています。しかし、私が見る限り、LASSOを使用して予測を行うCRANのパッケージはいずれも、それらの予測の標準エラーを返しません。

だから私の質問は次のとおりです。LASSO予測の標準エラーを計算するために利用可能なパッケージまたはRコードはありますか?


3
この質問の根底にある性質を明確にするために(CV&SOで前後にバウンスしているので)、Robというタイトルを編集できるかどうか疑問に思います。「なぜLASSO標準エラーのパッケージがないように見えるのか、計算が難しいのか?」など、一貫性を保つためにボディに多少の編集を加えて結合するのはどうでしょうか。これにより、CVのトピックがより明確になり、この曖昧さが生じず、前後に移動する必要がなくなると思います。
GUNG -モニカ元に戻し

3
統計的方法論についてもっと質問をすることもできましたが、それは実際に知りたいことではありませんでした。どのソフトウェアが特定のメソッドを実装するかについて、CVに関する質問の場所があるはずです。meta.stats.stackexchange.com/q/2007/159での
ロブ・ヒンドマン

1
packageを使用して、ベイジアンフレームワークでこれを簡単に行うことができmonomvnます。以下の私の回答を参照してください。
ファビアン14

回答:


46

京ら (2010年)、「ペナルティ回帰、標準誤差、およびベイジアン投げ縄」、ベイズ分析、5、2、投げ縄の予測のための標準誤差を計算する統計的に有効な方法について合意がないかもしれないことを示唆しています。Tibshirani 、標準エラーは未解決の問題であることに同意しているようです(スライド43)


7
パッケージが標準エラーを実装しない理由を説明します。
ロブハインドマン14年


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で自動的に計算されます...ギブスサンプリングスキームを使用すると、ベイジアンLASSOを非常に簡単に実装できます...

Bayesian LASSOでは、モデルのパラメーターに事前分布を割り当てる必要があります。LASSOモデルでは、目的関数と正則化パラメーターとして。ここでは、ので、これには特別なタイプの事前分布が必要です。LAPLACE分布は、正規分布と混合分布としての指数分布のスケール混合です。各パラメータの完全な条件付き事後条件に基づいて推定されます。||yXβ||22+λ||β||1λ1β

その後、チェーンのシミュレーションにギブスサンプリングを使用できます。参照 パーク&Cassella(2008年)、 "ベイジアン投げ縄"、JASA103、482

頻繁なLASSOには、3つの固有の欠点があります。

  1. クロス検証またはその他の方法でを選択する必要があります。λ

  2. LARSおよびその他のアルゴリズムがポイント推定値を生成するため、標準誤差を計算するのは困難です。β

  3. 手元の問題の階層構造は、頻度モデルを使用してエンコードすることはできません。これは、ベイジアンフレームワークでは非常に簡単です。


11

上記の答えに追加するために、問題は、ペナルティモデルからの推定値が偏っており、ブートストラップが分散にのみ話すため、ブートストラップでさえ不十分である可能性が高いようです-推定値の偏りを無視します。これは、18ページの罰せられたパッケージのビネットにうまくまとめられています。

しかし、予測に使用されている場合、モデルからの標準誤差が必要なのはなぜですか?適切に相互検証またはブートストラップを実行し、MSEなどの予測に関連するメトリックに関する標準エラーを生成することはできませんか


3
サンプルはかなり大きくする必要がありますが、ブートストラップはバイアスを推定および修正できます。
Glen_b 14

3

RにはselectedInferenceパッケージがあります。https: //cran.r-project.org/web/packages/selectiveInference/index.htmlであり、次の論文に基づいて、LASSOによって適合された係数の信頼区間とp値を提供します。 :

スティーブンリード、ジェロームフリードマン、ロブティブシラニ(2014)。投げ縄回帰における誤差分散推定の研究。arXiv:1311.5274

PS:それはあなたが後にしているものだならば私はあなたが使用することができたとし...、最終的な予測の誤差のためにわからない、これはあなたのパラメータに対する誤差推定を生成することを実現する「人口予測区間を」あなたは(でが好きなら、そのために多変量正規分布に従う適合度に従ってパラメーターをリサンプリングします)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.