Maaf jika pertanyaan ini sedikit mendasar.
Saya mencari untuk menggunakan pemilihan variabel LASSO untuk model regresi linier berganda di R. Saya memiliki 15 prediktor, salah satunya adalah kategorikal (akankah itu menyebabkan masalah?). Setelah mengatur dan saya menggunakan perintah berikut:y
model = lars(x, y)
coef(model)
Masalah saya adalah ketika saya menggunakan coef(model)
. Ini mengembalikan matriks dengan 15 baris, dengan satu prediktor tambahan ditambahkan setiap kali. Namun tidak ada saran untuk model mana yang harus dipilih. Apakah saya melewatkan sesuatu? Apakah ada cara saya bisa mendapatkan paket lars hanya untuk mengembalikan satu model " terbaik "?
Ada posting lain yang menyarankan untuk menggunakan glmnet
tetapi ini tampaknya lebih rumit. Upaya adalah sebagai berikut, menggunakan dan . Apakah saya melewatkan sesuatu di sini ?: y
cv = cv.glmnet(x, y)
model = glmnet(x, y, type.gaussian="covariance", lambda=cv$lambda.min)
predict(model, type="coefficients")
Perintah terakhir mengembalikan daftar variabel saya, mayoritas dengan koefisien meskipun ada yang = 0. Apakah ini pilihan model " terbaik " yang benar yang dipilih oleh LASSO? Jika saya kemudian cocok dengan model linier dengan semua variabel saya yang memiliki koefisien, not=0
saya mendapatkan estimasi koefisien yang sangat mirip, tetapi sedikit berbeda. Apakah ada alasan untuk perbedaan ini? Apakah dapat diterima untuk mereparasi model linier dengan variabel-variabel ini dipilih oleh LASSO dan menganggapnya sebagai model terakhir saya? Kalau tidak, saya tidak bisa melihat nilai p apa pun untuk signifikansi. Apakah saya melewatkan sesuatu?
Apakah
type.gaussian="covariance"
memastikan bahwa yang glmnet
menggunakan regresi linier berganda?
Apakah normalisasi otomatis variabel mempengaruhi koefisien sama sekali? Apakah ada cara untuk memasukkan istilah interaksi dalam prosedur LASSO?
Saya ingin menggunakan prosedur ini lebih sebagai demonstrasi bagaimana LASSO dapat digunakan daripada untuk model apa pun yang benar-benar akan digunakan untuk inferensi / prediksi penting jika itu mengubah apa pun.
Terima kasih telah meluangkan waktu untuk membaca ini. Setiap komentar umum tentang LASSO / lars / glmnet juga akan sangat dihargai.
sumber
Jawaban:
Menggunakannya
glmnet
sangat mudah setelah Anda memahami hal itu berkat sketsa yang luar biasa di http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html (Anda juga dapat memeriksa halaman paket CRAN). Adapun lambda terbaik untukglmnet
, aturan praktis adalah menggunakanbukannya
lambda.min
.Untuk melakukan hal yang sama,
lars
Anda harus melakukannya dengan tangan. Ini solusinyaIngatlah bahwa ini tidak persis sama, karena ini berhenti pada simpul laso (ketika variabel masuk) daripada pada titik mana pun.
Harap perhatikan bahwa
glmnet
ini adalah paket yang disukai sekarang, ini dipelihara secara aktif, lebih dari itulars
, dan bahwa ada pertanyaan tentangglmnet
vslars
dijawab sebelumnya (algoritma yang digunakan berbeda).Adapun pertanyaan Anda tentang menggunakan laso untuk memilih variabel dan kemudian cocok dengan OLS, ini adalah perdebatan yang sedang berlangsung. Google untuk OLS memposting Lasso dan ada beberapa makalah yang membahas topik tersebut. Bahkan penulis Elemen Pembelajaran Statistik mengakui itu mungkin.
Sunting : Ini adalah kode untuk mereproduksi dengan lebih akurat apa yang
glmnet
ada dilars
sumber
Saya kembali ke pertanyaan ini sejak beberapa waktu yang lalu karena saya pikir saya telah memecahkan solusi yang benar.
Berikut adalah replika menggunakan dataset mtcars:
'variabel' memberi Anda daftar variabel yang memecahkan solusi terbaik.
sumber
nfolds=5
danalpha=0.5
parameter?Mungkin perbandingan dengan penerusan maju regresi bertahap akan membantu (lihat tautan berikut ke situs oleh salah satu penulis http://www-stat.stanford.edu/~tibs/lasso/simple.html). Ini adalah pendekatan yang digunakan dalam Bab 3.4.4 dari Elemen Pembelajaran Statistik (tersedia online secara gratis). Saya pikir Bab 3.6 dalam buku itu membantu memahami hubungan antara kuadrat terkecil, subset terbaik, dan laso (ditambah beberapa prosedur lain). Saya juga merasa terbantu untuk mengambil transpos koefisien, t (coef (model)) dan write.csv, sehingga saya dapat membukanya di Excel bersama dengan salinan plot (model) di samping. Anda mungkin ingin mengurutkan berdasarkan kolom terakhir, yang berisi perkiraan kuadrat terkecil. Kemudian Anda dapat melihat dengan jelas bagaimana setiap variabel ditambahkan pada setiap langkah masing-masing dan bagaimana koefisien berubah sebagai hasilnya. Tentu saja ini bukan keseluruhan cerita, tetapi mudah-mudahan ini akan menjadi awal.
sumber
lars
danglmnet
beroperasi pada matriks mentah. Untuk memasukkan istilah interaksi, Anda harus membuat matriks sendiri. Itu berarti satu kolom per interaksi (yang adalah per level per faktor jika Anda memiliki faktor). Lihat ke dalamlm()
untuk melihat bagaimana melakukannya (peringatan: ada naga).Untuk melakukannya sekarang, lakukan sesuatu seperti: Untuk membuat istilah interaksi secara manual, Anda bisa (tetapi mungkin tidak boleh , karena lambat) lakukan:
Kemudian untuk menggunakan ini dalam lars (dengan asumsi Anda memiliki
y
tendangan sekitar):Saya harap saya dapat membantu Anda lebih banyak dengan pertanyaan-pertanyaan lainnya. Saya menemukan ini karena lars memberi saya kesedihan dan dokumentasi di dalamnya dan di web sangat tipis.
sumber
model.matrix()
.LARS memecahkan jalur solusi SELURUH. Jalur solusi bersifat linear - ada sejumlah titik "takik" yang terbatas (yaitu nilai-nilai parameter regularisasi) di mana solusi berubah.
Jadi matriks solusi yang Anda dapatkan adalah semua solusi yang mungkin. Dalam daftar yang dikembalikan, itu juga harus memberi Anda nilai-nilai parameter regularisasi.
sumber