Kesalahan standar untuk prediksi laso menggunakan R

60

Saya mencoba menggunakan model LASSO untuk prediksi, dan saya perlu memperkirakan kesalahan standar. Tentunya seseorang telah menulis paket untuk melakukan ini. Tapi sejauh yang saya bisa lihat, tidak ada paket di CRAN yang melakukan prediksi menggunakan LASSO akan mengembalikan kesalahan standar untuk prediksi tersebut.

Jadi pertanyaan saya adalah: Apakah ada paket atau beberapa kode R yang tersedia untuk menghitung kesalahan standar untuk prediksi LASSO?

Rob Hyndman
sumber
3
Untuk memperjelas sifat dasar dari pertanyaan ini (karena telah memantul ke belakang & ke depan oleh CV & SO), saya ingin tahu apakah kita dapat mengedit judul, Rob. Bagaimana 'Mengapa sepertinya tidak ada paket untuk kesalahan standar LASSO, apakah mereka sulit untuk dihitung?', Atau sesuatu seperti itu, mungkin digabungkan dengan beberapa suntingan kecil pada tubuh untuk membuatnya konsisten. Saya pikir itu akan membuatnya lebih jelas pada topik di CV sehingga ambiguitas ini tidak muncul & kita tidak harus bolak-balik.
gung - Reinstate Monica
3
Saya bisa membuat pertanyaan lebih banyak tentang metodologi statistik, tetapi itu sebenarnya bukan apa yang ingin saya ketahui. Seharusnya ada tempat untuk pertanyaan di CV tentang perangkat lunak apa yang mengimplementasikan metode yang diberikan. Diskusi lebih lanjut di meta.stats.stackexchange.com/q/2007/159
Rob Hyndman
1
Anda dapat melakukan ini dengan mudah dalam kerangka kerja Bayesian menggunakan paket monomvn, lihat jawaban saya di bawah ini.
Fabian

Jawaban:

20

Pada catatan terkait, yang mungkin membantu, Tibshirani dan rekannya telah mengusulkan tes signifikansi untuk laso. The kertas tersedia, dan berjudul "A uji signifikansi untuk lasso". Versi gratis dari makalah ini dapat ditemukan di sini

Juliuli
sumber
Tautkan tanpa paywall ke kertas yang Anda sebutkan: statweb.stanford.edu/~tibs/ftp/covtest.pdf
mvherweg
13

Jawaban Sandipan Karmakar memberi tahu Anda apa yang harus dilakukan, ini akan membantu Anda tentang "bagaimana":

> 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
orang fabian
sumber
13

Bayesian LASSO adalah satu-satunya alternatif untuk masalah penghitungan kesalahan standar. Kesalahan standar secara otomatis dihitung dalam Bayesian LASSO ... Anda dapat menerapkan Bayesian LASSO dengan sangat mudah menggunakan skema Sampling Gibbs ...

||y-Xβ||22+λ||β||1λ1β jadi, jenis khusus dari distribusi sebelumnya diperlukan untuk ini, distribusi LAPLACE campuran skala distribusi normal dengan distribusi eksponensial sebagai kepadatan pencampuran. Berdasarkan posisi kondisional penuh dari masing-masing parameter harus disimpulkan.

Maka orang dapat menggunakan Gibbs Sampling untuk mensimulasikan rantai. Lihat Park & ​​Cassella (2008), "The Bayesian Lasso", JASA , 103 , 482 .

Ada tiga kelemahan LASSO yang sering terjadi:

  1. λ

  2. β

  3. Struktur hierarkis masalah yang ada tidak dapat dikodekan menggunakan model frequentist, yang cukup mudah dalam kerangka Bayesian.

Sandipan Karmakar
sumber
11

Untuk menambah jawaban di atas, masalah tampaknya adalah bahwa bahkan bootstrap mungkin tidak cukup karena perkiraan dari model yang dikenakan sanksi bias dan bootstrap hanya akan berbicara dengan varian - mengabaikan bias estimasi. Ini dirangkum dengan baik dalam sketsa untuk paket yang dikenakan sanksi pada halaman 18 .

Namun, jika digunakan untuk prediksi, mengapa diperlukan kesalahan standar dari model? Bisakah Anda tidak memvalidasi silang atau bootstrap dengan tepat dan menghasilkan kesalahan standar di sekitar metrik yang terkait dengan prediksi seperti MSE?

B_Miner
sumber
3
Bootstrap dapat memperkirakan dan mengoreksi bias, meskipun sampel harus cukup besar.
Glen_b
3

Ada paket SelectiveInference di R, https://cran.r-project.org/web/packages/selectiveInference/index.html , yang memberikan interval kepercayaan dan nilai p untuk koefisien Anda yang dipasang oleh LASSO, berdasarkan pada makalah berikut :

Stephen Reid, Jerome Friedman, dan Rob Tibshirani (2014). Sebuah studi estimasi varians kesalahan dalam regresi laso. arXiv: 1311.5274

PS: baru sadar bahwa ini menghasilkan perkiraan kesalahan untuk parameter Anda, tidak yakin untuk kesalahan pada prediksi akhir Anda, jika itu yang Anda cari ... saya kira Anda bisa menggunakan "interval prediksi populasi" untuk itu jika Anda suka (dengan resampling parameter sesuai dengan fit berikut distribusi normal multivariat).

Tom Wenseleers
sumber