Regresi logistik pada R menghasilkan pemisahan sempurna (fenomena Hauck-Donner). Sekarang apa?

56

Saya mencoba untuk memprediksi hasil biner menggunakan 50 variabel penjelas kontinu (kisaran sebagian besar variabel adalah hingga ). Kumpulan data saya memiliki hampir 24.000 baris. Ketika saya menjalankan di R, saya mendapatkan:glm

Warning messages:  
1: glm.fit: algorithm did not converge  
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

Saya telah membaca tanggapan lain yang menunjukkan pemisahan sempurna mungkin terjadi, tetapi saya yakin itu tidak terjadi dalam data saya (meskipun pemisahan semu-lengkap bisa ada; bagaimana saya bisa menguji untuk melihat apakah itu yang terjadi?) . Jika saya menghapus beberapa variabel, kesalahan "tidak konvergen" mungkin hilang. Tapi itu tidak selalu terjadi.

Saya mencoba menggunakan variabel yang sama dalam suatu bayesglmfungsi dan mendapat kesalahan yang sama.

Langkah apa yang akan Anda ambil untuk mencari tahu apa yang sebenarnya terjadi di sini? Bagaimana Anda mengetahui variabel mana yang menyebabkan masalah?

Dcook
sumber
5
Mengapa Anda yakin bahwa perpisahan tidak terjadi? Di dalam bayesglmkertas , mereka berpendapat pemisahan yang "masalah umum, bahkan ketika ukuran sampel besar dan jumlah prediktor kecil"
David J. Harris
2
Pikiran lain: bayesglmmencoba menghindari pemisahan dengan menambahkan prior, tetapi dengan 24.000 baris, prior mungkin dibanjiri oleh kemungkinan. Coba menyusut prior.scale, mungkin dengan jumlah besar. Juga pertimbangkan untuk meningkatkan derajat kebebasan prior, yang akan membantu menyingkirkan nilai-nilai besar yang terkait dengan pemisahan.
David J. Harris
Terima kasih atas sarannya David. Saya tidak berpikir pemisahan terjadi karena ketika saya mengurutkan masing-masing variabel penjelas, variabel dependen tidak selalu benar atau salah untuk nilai-nilai tinggi atau rendah dari variabel penjelas. Kecuali jika ini dianggap pemisahan: variabel dependen berlaku untuk semua x7> 32 tetapi x7 hanya> 32 dalam 10 kasus. Apakah ada cara untuk memverifikasi pemisahan di luar regresi logistik? Atau lihat variabel mana yang menyebabkan pemisahan? Saya mencoba saran bayesglm Anda (saya menetapkan prior.scale ke 1 dan prior.df ke Inf) dan masih mendapat kesalahan Hauck Donner.
Dcook
1
pertanyaan
user603
"Bagaimana Anda mengetahui variabel mana yang menyebabkan masalah?" Pencarian biner selalu merupakan fallback yang bagus. Anda hanya memiliki 50 variabel, jadi jika dipisahkan dengan sempurna oleh satu variabel individual, 6 iterasi akan menemukan penyebabnya. Jika itu dua variabel, paling banyak 49 + 6 = 55 iterasi akan menemukannya, terburuk.
smci

Jawaban:

55

R50

Anda dapat dengan mudah menguji apakah kelas Anda dipisahkan dengan sempurna di ruang desain Anda. Ini intinya untuk memecahkan masalah pemrograman linier. Implementasi R dari 'tes' ini (bukan tes dalam arti statistik dari istilah ini) diimplementasikan dalam paket safeBinaryRegression .

Jika ternyata pemisahan itu memang masalah, dan jika Anda hanya tertarik pada penggunaan vanila polos glm (misalnya glm tidak dipanggil oleh fungsi tingkat yang lebih tinggi tetapi oleh Anda), maka ada implementasi R dari suatu algoritma yang sedikit memodifikasi yang klasik untuk membuatnya 'kuat' terhadap pemisahan. Ini diimplementasikan dalam paket hlr

pengguna603
sumber
4
Jawabannya sangat keren dan bermanfaat! Saya harus melihat paket-paket itu. (+1)
Peter Flom - Reinstate Monica
1
FWIW di sini adalah deskripsi dari algoritma yang kuat lainnya: win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex
2
@Alex: terima kasih atas tautannya. Jika glm tidak konvergen karena awal yang buruk maka saya dapat melihat bagaimana metode ini akan membantu dengan itu. Di sisi lain, jika masalahnya disebabkan oleh pemisahan yang sempurna, tidak jelas bagi saya bagaimana ide MM akan mengatasinya. Saya ingin tahu apakah Anda dapat mengomentari ini (saya akhirnya dapat memposting ini sebagai pertanyaan terpisah).
user603
Luar biasa (+1)! Saya juga harus melihat paket-paket itu.
jbowman
1
Terima kasih atas jawabannya @ user603! Saya menggunakan safeBinaryRegression dan pemisahan memang terjadi dengan beberapa variabel. Kemudian saya mencoba menggunakan MEL dalam paket hlr untuk membangun model yang kuat untuk pemisahan ini. Namun, koefisiennya sangat besar (seperti ketika pemisahan terjadi dalam normal glm) dan di sini adalah angka df dan penyimpangan: Derajat Kebebasan: 19112 Total (yaitu Null); 19063 Residual Null Deviance: 24990 Residual Deviance: 626000 AIC: 626000 Apakah Anda pikir saya melakukan sesuatu yang salah?
Dcook