Bagaimana cara melakukan pemilihan subset regresi logistik?

47

Saya cocok dengan keluarga binomial glm di R, dan saya memiliki seluruh kelompok variabel penjelas, dan saya perlu menemukan yang terbaik (R-kuadrat sebagai ukuran baik-baik saja). Singkat penulisan skrip untuk mengulang melalui kombinasi acak yang berbeda dari variabel penjelas dan kemudian merekam yang melakukan yang terbaik, saya benar-benar tidak tahu apa yang harus dilakukan. Dan leapsfungsi dari lompatan paket tampaknya tidak melakukan regresi logistik.

Setiap bantuan atau saran akan sangat dihargai.

Leendert
sumber
Ada fungsi yang melakukan pencarian otomatis. Anda harus melihat fungsi langkahnya . Bagian 5.4 mengilustrasikan poin itu: data.princeton.edu/R/glms.html
ocram
Saya minta maaf tetapi posting saya telah diedit sehingga tidak lagi menanyakan pertanyaan saya. Saya memiliki 35 (26 signifikan) variabel penjelas dalam model regresi logistik saya. Saya perlu kombinasi terbaik dari 8, bukan subset terbaik, dan tidak ada titik saya tertarik pada pendekatan bertahap atau semua himpunan bagian gaya. Tidak ada ruang gerak di 8 ini. Saya hanya berpikir seseorang mungkin sudah tahu bagaimana saya bisa cocok dengan semua kombinasi dari 8 variabel penjelas dan itu bisa memberi tahu saya yang memaksimalkan kemungkinan (maaf tentang kentut otak R-squared tetapi AIC tidak relevan baik karena Saya memiliki sejumlah parameter, 8).
Leendert
Anda dapat kembali ke versi posting sebelumnya, atau menggabungkan kedua suntingan. Saya yakin @mpikta beritikad baik ketika mencoba memperbaiki penampilannya dan tidak memperhatikan parameter No.
chl
@ Semuanya: Terima kasih banyak. Pada akhirnya saya menggunakan banyak hal berbeda dengan harapan mereka semua akan memberikan jawaban yang sama. Dan mereka melakukannya. Saya menggunakan paket BMA, bestglm dan glmnet serta fungsi langkah. Dilengkapi model dengan semuanya, dan tidak ada perbedaan dalam apa BMA dengan maxcol = 9 dan langkah dianggap model terbaik. Semua pakar di bidang di sekitar saya tampak sangat puas dengan variabel, dan merasa bahwa itu cukup progresif. Jadi terima kasih atas semua masukannya. Saya benar-benar menggunakan semuanya.
Leendert
glmulti juga merupakan paket yang baik untuk pemilihan subset terbaik, dan yang satu memungkinkan Anda untuk menentukan nr variabel maksimum dalam model Anda, dan juga memungkinkan seseorang untuk mempertimbangkan semua kemungkinan efek interaksi urutan pertama
Tom Wenseleers

Jawaban:

28

Metode bertahap dan "semua himpunan bagian" umumnya buruk. Lihat Menghentikan Stepwise: Mengapa Metode Stepwise Buruk dan apa yang Harus Anda Gunakan oleh David Cassell dan saya sendiri (kami menggunakan SAS, tetapi pelajarannya berlaku) atau Strategi Pemodelan Regresi Frank Harrell. Jika Anda memerlukan metode otomatis, saya sarankan LASSO atau LAR. Paket LASSO untuk regresi logistik tersedia di sini , artikel menarik lainnya adalah LASSO yang diulang untuk logistik

Peter Flom - Pasang kembali Monica
sumber
6
(+1) Tentang paket R, ada juga glmnet (implementasi dengan koordinat algo., Friedman dan coll.) Dan dikenakan sanksi (memungkinkan untuk menjaga beberapa var. Tidak diberi sanksi). Sebagai catatan, F. Harrell memberikan estimasi ML untuk GLM yang dihukum (lihat lrm, atau buku teks RMS-nya untuk info lebih lanjut).
chl
(+1) Artikel yang bagus, sepertinya saya harus mulai jauh melampaui negara penulis dalam pertanyaan (bukan pertama kali saya tidak). @chl (+1) saran alternatif sempurna juga.
Dmitrij Celov
@ chl: +1 untuk glmnet, itu paket yang bagus.
Zach
1
@ chl, terima kasih! Salah satu masalah dengan R adalah melacak paket (ada begitu banyak!) Dan mana yang terbaik. Pandangan tugas memang membantu
Peter Flom - Reinstate Monica
2
Jika variabel Anda adalah collinear, yang terbaik adalah menggunakan jaring elastis menggunakan glmnet, katakan dengan alpha = 0,5, karena LASSO cenderung secara acak mengeluarkan variabel yang sangat collinear dari model
Tom Wenseleers
15

R2AICBIC

Regresi logistik diperkirakan dengan metode kemungkinan maksimum, jadi leapstidak digunakan secara langsung di sini. Perpanjangan leapske glm()fungsi adalah paket bestglm (seperti biasanya rekomendasi berikut, lihat sketsa di sana).

Anda mungkin juga tertarik dengan artikel oleh David W. Hosmer, Borko Jovanovic dan Stanley Lemeshow Best Subsets Logistic Regression // Biometrics Vol. 45, No. 4 (Desember, 1989), hlm. 1265-1270 (biasanya dapat diakses melalui jaringan universitas).

Dmitrij Celov
sumber
2
R2BIC,AIC8BICAICR2
8
referensi akademik apa pun untukR2R2 is not an appropriate goodness-of-fit measure for logistic regression take an information criterion AICAIC or BICBIC
SIslam
catatan bestglm, itu digunakan leapsdi backend untuk perhitungan! Jadi itu akan gagal jika ada NA dalam dataset dan akan muncul dengan pesan seperti Error in leaps.setup(x, y, wt = weights, nbest = nbest, nvmax = nvmax, : NA/NaN/Inf in foreign function call (arg 3) Tapi apa yang menarik, dataset saya tidak memiliki NA melainkan beberapa nol namun fungsi ini mengeluh dan memberikan pesan yang tepat di atas !!
SIslam
glmnet juga bagus, dan juga dapat melakukan model yang mempertimbangkan semua kemungkinan efek interaksi urutan pertama
Tom Wenseleers
6

Satu ide adalah menggunakan hutan acak dan kemudian menggunakan ukuran variabel penting yang dikeluarkannya untuk memilih 8 variabel terbaik Anda. Gagasan lain adalah menggunakan paket "boruta" untuk mengulangi proses ini beberapa ratus kali untuk menemukan 8 variabel yang secara konsisten paling penting bagi model.

Zach
sumber
@Zach Apakah Anda menyarankan untuk mengandalkan RF untuk melakukan pemilihan fitur, dan kemudian menerapkan GLM - dalam hal ini, ada risiko overfitting atau optimisme berlebihan -, atau menggunakan RF (dengan ukuran standar var. Pentingnya, atau semua pilihan yang relevan) sebagai alat mandiri?
chl
@ chl: Saya menyarankan menggunakan RF untuk melakukan pemilihan fitur, dan kemudian menerapkan GLM. Saya setuju ada risiko terlalu pas, tetapi OP mengatakan dia membutuhkan 8 variabel.
Zach
1
@ Zach "tepat 8 variabel" ... Lalu, Anda agak lunak menetapkan variabel potensial berdasarkan pada ukuran variabel penting (yang berkat permutasi dan resampling ganda seharusnya bebas bias) dan kemudian masukkan kembali ke GLM. IMHO, Anda mematahkan kontrol overfitting yang diberikan melalui bagging. Ini juga dijelaskan dalam ESLII dari Hastie et al .: pilihan fitur, jika ada, harus dimasukkan dalam prosedur validasi silang (di mana cross-validasi mencakup penilaian kinerja model).
chl
@ chl: Bukankah r paket "boruta" lintas memvalidasi dengan menjalankan hutan acak beberapa kali? Apakah pada dasarnya Anda mengatakan bahwa kami memerlukan "meta-cross-validation," di mana Anda melakukan pemilihan variabel dan menyesuaikan model Anda pada himpunan bagian data yang acak?
Zach
3
@Zach Poin saya adalah bahwa mengantongi, atau khususnya RF, mencegah overfitting (sampai batas tertentu) asalkan Anda tetap berada di rantai alat yang sama. Jika Anda menggunakan hasil dari RF dan kemudian melihat bagaimana model lain akan melakukan dengan data yang sama, maka Anda memutus loop CV. Tetapi mengapa tidak menggunakan RF secara langsung untuk klasifikasi? Solusi lain adalah dengan menggunakan RF pada sampel pelatihan dan kemudian menerapkan GLM pada sampel yang diadakan (yang berpotensi juga dapat divalidasi silang).
chl
0

stats::stepfungsi atau MASS::stepAICdukungan fungsi yang lebih umum lm, glm(yaitu regresi logistik) dan aovmodel keluarga.

Farid Cheraghi
sumber