Bagaimana cara mempresentasikan hasil Lasso menggunakan glmnet?

40

Saya ingin mencari prediktor untuk variabel dependen kontinu dari 30 variabel independen. Saya menggunakan regresi Lasso seperti yang diterapkan dalam paket glmnet di R. Berikut adalah beberapa kode dummy:

# generate a dummy dataset with 30 predictors (10 useful & 20 useless) 
y=rnorm(100)
x1=matrix(rnorm(100*20),100,20)
x2=matrix(y+rnorm(100*10),100,10)
x=cbind(x1,x2)

# use crossvalidation to find the best lambda
library(glmnet)
cv <- cv.glmnet(x,y,alpha=1,nfolds=10)
l <- cv$lambda.min
alpha=1

# fit the model
fits <- glmnet( x, y, family="gaussian", alpha=alpha, nlambda=100)
res <- predict(fits, s=l, type="coefficients")
res 

Pertanyaan saya adalah bagaimana menafsirkan output:

  • Apakah benar mengatakan bahwa dalam hasil akhir semua prediktor yang menunjukkan koefisien berbeda dari nol terkait dengan variabel dependen?

  • Apakah itu merupakan laporan yang cukup dalam konteks publikasi jurnal? Atau itu diharapkan untuk memberikan statistik uji untuk signifikansi dari koefisien? (Konteksnya adalah genetika manusia)

  • Apakah masuk akal untuk menghitung nilai p atau statistik uji lainnya untuk mengklaim signifikansi? Bagaimana itu mungkin? Apakah prosedur diimplementasikan dalam R?

  • Apakah plot regresi sederhana (titik data diplot dengan kecocokan linear) untuk setiap prediktor menjadi cara yang cocok untuk memvisualisasikan data ini?

  • Mungkin seseorang dapat memberikan beberapa contoh mudah dari artikel yang diterbitkan yang menunjukkan penggunaan Lasso dalam konteks beberapa data nyata & bagaimana melaporkannya dalam jurnal?

jokel
sumber
Mengapa Anda menjalankan glmnet di bawah bagian "fit the model"? Tidak bisakah Anda menggunakan cvuntuk langkah prediksi juga?
bourbaki4481472

Jawaban:

22

Pemahaman saya adalah bahwa Anda tidak dapat mengatakan banyak tentang variabel mana yang "penting" atau memiliki efek "nyata" berdasarkan apakah koefisiennya bukan nol. Untuk memberikan contoh ekstrem, jika Anda memiliki dua prediktor yang sepenuhnya collinear, laso akan memilih salah satu dari mereka secara acak untuk mendapatkan bobot penuh dan yang lain akan mendapatkan bobot nol.

Makalah ini , yang termasuk salah satu penulis glmnet, menyajikan beberapa analisis berbasis glmnet (lihat khususnya: Pendahuluan, Bagian 2.3 dan 4.3, dan Tabel 4 dan 5). Melihat sekilas, sepertinya mereka tidak menghitung nilai-P langsung dari model glmnet. Mereka memang menghitung dua jenis nilai-P dengan menggunakan metode lain, tetapi sepertinya mereka tidak sepenuhnya mempercayai keduanya.

Saya tidak 100% yakin apa yang Anda sarankan dalam hal metode merencanakan, tapi saya pikir itu terdengar masuk akal.

Semoga itu bisa membantu.

David J. Harris
sumber
1
Hai David! Terima kasih atas jawabannya. Apakah ada yang menentang penggunaan LASSO untuk pemilihan prediktor dengan koefisien tidak nol dan kemudian hanya menggunakan prediktor tersebut dalam model regresi linier untuk mendapatkan nilai-p mengenai signifikansi predator. Misalnya sebagai makalah ini: ncbi.nlm.nih.gov/pmc/articles/PMC3412288
jokel
4
@jokel Saya pikir apa yang Anda sarankan adalah kasus khusus "laso santai", dan itu bisa bekerja dengan sangat baik untuk beberapa tujuan. Saya tidak yakin Anda bisa mempercayai nilai-p yang Anda dapatkan dari prosedur yang telah Anda jelaskan, karena statistik F atau statistik-t Anda tidak akan "tahu" tentang langkah pemilihan variabel yang Anda lakukan, dan Anda Tingkat kesalahan tipe-I akan meningkat. Satu cara untuk memikirkan hal ini: berapakah jumlah derajat kebebasan yang benar untuk statistik F? Jumlah variabel dalam regresi LASSO? Jumlah variabel dalam regresi sekunder? Ada sesuatu di antaranya?
David J. Harris
Benar - jadi ini sepertinya juga bukan pendekatan yang valid. Apakah Anda punya ide lain bagaimana menemukan prediktor signifikan dari 300 variabel independen (n >> p seperti pada contoh di atas)? Sehingga pada akhirnya saya dapat mengklaim: "prediktor X secara signifikan terkait dengan variabel dependen Y"?
jokel
Jawaban saya untuk semua hal di mana saya tidak tahu bagaimana melakukan perhitungan adalah dengan melakukan pengacakan. Satu kemungkinan adalah melakukan resampling baris dari set data Anda (misalnya dengan bootstrap) dan menjalankan analisis LASSO berulang kali. Semakin sering variabel dimasukkan dalam model, semakin besar kemungkinan itu menjadi penting. Opsi yang bahkan lebih baik mungkin melibatkan menyamakan baris dan kolom, yang mungkin membantu menghindari efek "menutupi". Breiman menyarankan sesuatu dalam nada yang sama dalam [pdf ini] (dekat Gambar 2) ( fakultas.smu.edu/tfomby/eco5385/lecture/… ).
David J. Harris
9

Saya hanya ingin menunjukkan bahwa ada pekerjaan terbaru yang mencoba mengembangkan statistik uji khusus untuk LASSO, yang memperhitungkan pemilihan fitur yang dilakukan:

Tes signifikansi untuk laso. Richard Lockhart, Jonathan Taylor, Ryan J. Tibshirani, Robert Tibshirani. http://arxiv.org/abs/1301.7161

Saya belum melihat ini digunakan dalam pekerjaan yang diterapkan namun, sedangkan bootstrap jelas digunakan.

daknowles
sumber
0

Mengenai inferensi untuk LASSO atau model jaring elastis telah melihat paket CRAN selectiveInference dan hdi , mereka melakukan hal itu sementara memperhitungkan langkah pemilihan variabel!

Tom Wenseleers
sumber