Jika Anda memiliki variabel yang dengan sempurna memisahkan nol dan yang ada di variabel target, R akan menghasilkan pesan peringatan "pemisahan sempurna atau kuasi sempurna":
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred
Kami masih mendapatkan model tetapi estimasi koefisien meningkat.
Bagaimana Anda menangani hal ini dalam praktik?
r
regression
logistic
separation
pengguna333
sumber
sumber
Jawaban:
Solusi untuk ini adalah dengan menggunakan bentuk regresi yang dihukum. Bahkan, ini adalah alasan asli beberapa bentuk regresi yang dihukum dikembangkan (meskipun mereka ternyata memiliki sifat menarik lainnya.
Instal dan muat paket glmnet dalam R dan Anda siap untuk pergi. Salah satu aspek glmnet yang kurang ramah pengguna adalah Anda hanya bisa memberinya matriks, bukan formula seperti yang biasa kita lakukan. Namun, Anda dapat melihat model.matrix dan sejenisnya untuk membuat matriks ini dari data.frame dan rumus ...
Sekarang, ketika Anda berharap bahwa pemisahan sempurna ini bukan hanya produk sampingan dari sampel Anda, tetapi bisa benar dalam populasi, Anda secara khusus tidak ingin menangani ini: gunakan variabel pemisah ini hanya sebagai satu-satunya prediktor untuk hasil Anda, bukan menggunakan model apa pun.
sumber
Anda memiliki beberapa opsi:
Hapus beberapa bias.
(A) Dengan menghukum kemungkinan sesuai saran @ Nick. Paket logistf dalam R atau
FIRTH
opsi dalam SASPROC LOGISTIC
mengimplementasikan metode yang diusulkan dalam Firth (1993), "Bias pengurangan estimasi kemungkinan maksimum", Biometrika , 80 , 1; yang menghilangkan bias tingkat pertama dari perkiraan kemungkinan maksimum. ( Di sini @Gavin merekomendasikanbrglm
paket, yang saya tidak kenal, tapi saya kumpulkan mengimplementasikan pendekatan yang serupa untuk fungsi tautan non-kanonik misalnya probit.)(B) Dengan menggunakan estimasi median-tidak bias dalam regresi logistik bersyarat yang tepat. Paket elrm atau logistiX dalam R, atau
EXACT
pernyataan dalam SASPROC LOGISTIC
.Kecualikan kasus di mana kategori atau nilai prediktor yang menyebabkan pemisahan terjadi. Ini mungkin berada di luar jangkauan Anda; atau layak untuk diselidiki lebih lanjut, terfokus. (Paket R safeBinaryRegression berguna untuk menemukannya.)
Pasang kembali model. Biasanya ini adalah sesuatu yang akan Anda lakukan sebelumnya jika Anda memikirkannya, karena terlalu rumit untuk ukuran sampel Anda.
(a) Hapus prediktor dari model. Dicey, dengan alasan yang diberikan oleh @Simon: "Anda menghapus prediktor yang paling menjelaskan respons".
(B) Dengan menciutkan kategori prediktor / binning nilai-nilai prediktor. Hanya jika ini masuk akal.
(c) Mengekspresikan kembali prediktor sebagai dua (atau lebih) faktor silang tanpa interaksi. Hanya jika ini masuk akal.
Tidak melakukan apapun. (Tapi hitung interval kepercayaan berdasarkan kemungkinan profil, karena estimasi Wald tentang kesalahan standar akan sangat salah.) Pilihan yang sering diabaikan. Jika tujuan dari model ini hanya untuk menggambarkan apa yang telah Anda pelajari tentang hubungan antara prediktor & respons, tidak ada salahnya mengutip interval kepercayaan untuk rasio odds, katakanlah, 2,3 ke atas. (Memang bisa terlihat mencurigakan mengutip interval kepercayaan berdasarkan estimasi yang tidak bias yang mengecualikan rasio odds yang paling didukung oleh data.) Masalah muncul ketika Anda mencoba untuk memprediksi menggunakan estimasi titik, & prediksi di mana pemisahan terjadi membanjiri yang lain.
Gunakan model regresi logistik tersembunyi, seperti yang dijelaskan dalam Rousseeuw & Christmann (2003), "Ketangguhan terhadap pemisahan dan pencilan dalam regresi logistik", Statistik Komputasi & Analisis Data , 43 , 3, dan diimplementasikan dalam paket R hlr . (@ user603 menyarankan ini. ) Saya belum membaca makalah, tetapi mereka mengatakan secara abstrak "model yang sedikit lebih umum diusulkan di mana respons yang diamati sangat terkait tetapi tidak sama dengan respons sejati yang tidak dapat diamati", yang menyarankan untuk saya mungkin bukan ide yang baik untuk menggunakan metode ini kecuali itu terdengar masuk akal.
"Ubah beberapa pengamatan yang dipilih secara acak dari 1 menjadi 0 atau 0 ke 1 di antara variabel yang menunjukkan pemisahan total": @ komentar RobertF . Saran ini tampaknya muncul dari menganggap pemisahan sebagai masalah per se daripada sebagai gejala kurangnya informasi dalam data yang mungkin membuat Anda lebih memilih metode lain untuk estimasi kemungkinan maksimum, atau untuk membatasi kesimpulan kepada mereka yang dapat Anda buat dengan presisi yang masuk akal — pendekatan yang memiliki kelebihannya sendiri & bukan sekadar "perbaikan" untuk pemisahan. (Selain dari ad hoc tanpa malu-malu , itu tidak menyenangkan bagi sebagian besar analis yang menanyakan pertanyaan yang sama dari data yang sama, membuat asumsi yang sama, harus memberikan jawaban yang berbeda karena hasil lemparan koin atau apa pun.)
sumber
Ini adalah perluasan jawaban Scortchi dan Manoel, tetapi karena Anda tampaknya menggunakan RI, saya pikir saya akan menyediakan beberapa kode. :)
Saya percaya solusi termudah dan paling langsung untuk masalah Anda adalah dengan menggunakan analisis Bayesian dengan asumsi sebelumnya yang tidak informatif seperti yang diusulkan oleh Gelman et al (2008). Seperti Scortchi menyebutkan, Gelman merekomendasikan untuk menempatkan Cauchy sebelumnya dengan median 0,0 dan skala 2,5 pada masing-masing koefisien (dinormalisasi untuk memiliki rata-rata 0,0 dan SD 0,5). Ini akan mengatur koefisien dan menariknya sedikit ke nol. Dalam hal ini persis apa yang Anda inginkan. Karena memiliki ekor yang sangat lebar, Cauchy masih memungkinkan untuk koefisien besar (sebagai lawan dari Normal berekor pendek), dari Gelman:
Bagaimana cara menjalankan analisis ini? Gunakan
bayesglm
fungsi dalam paket lengan yang mengimplementasikan analisis ini!Tidak berfungsi dengan baik ... Sekarang versi Bayesian:
Sangat sederhana, bukan?
Referensi
Gelman et al (2008), "Sebuah distribusi sebelumnya standar informatif lemah untuk logistik & model regresi lainnya", Ann. Appl. Stat., 2, 4 http://projecteuclid.org/euclid.aoas/1231424214
sumber
bayesglm
digunakan sebelumnya ? Jika estimasi ML setara dengan Bayesian dengan flat sebelumnya, bagaimana prior non-informatif membantu di sini?prior.df
default ke1.0
dan / atau mengurangiprior.scale
default ke2.5
, mungkin mulai mencoba:m=bayesglm(match ~. , family = binomial(link = 'logit'), data = df, prior.df=5)
Salah satu penjelasan paling menyeluruh tentang masalah "pemisahan semu" dalam kemungkinan maksimum adalah makalah Paul Allison. Dia menulis tentang perangkat lunak SAS, tetapi masalah yang dia tangani dapat digeneralisasi untuk perangkat lunak apa pun:
Allison membahas banyak solusi yang telah disebutkan termasuk penghapusan variabel masalah, kategori runtuh, tidak melakukan apa-apa, meningkatkan regresi logistik yang tepat , estimasi Bayesian dan estimasi kemungkinan maksimum hukuman.
http://www2.sas.com/proceedings/forum2008/360-2008.pdf
sumber
warning
Dengan data yang dihasilkan di sepanjang baris
Peringatan itu dibuat:
yang sangat jelas mencerminkan ketergantungan yang dibangun ke dalam data ini.
Di R tes Wald ditemukan dengan
summary.glm
atau denganwaldtest
dalamlmtest
paket. Tes rasio kemungkinan dilakukan dengananova
atau denganlrtest
dalamlmtest
paket. Dalam kedua kasus tersebut, matriks informasi dihargai secara tidak terbatas, dan tidak ada kesimpulan yang tersedia. Sebaliknya, R memang menghasilkan output, tetapi Anda tidak bisa mempercayainya. Kesimpulan yang dihasilkan R dalam kasus-kasus ini memiliki nilai-p sangat dekat dengan satu. Ini karena kehilangan presisi dalam OR adalah urutan besarnya lebih kecil daripada hilangnya presisi dalam matriks varians-kovarians.Beberapa solusi yang diuraikan di sini:
Gunakan penduga satu langkah,
Ada banyak teori yang mendukung bias, efisiensi, dan kemampuan generalisasi satu penduga satu langkah yang rendah. Mudah untuk menentukan penduga satu langkah dalam R dan hasilnya biasanya sangat menguntungkan untuk prediksi dan inferensi. Dan model ini tidak akan pernah menyimpang, karena iterator (Newton-Raphson) tidak memiliki kesempatan untuk melakukannya!
Memberi:
Sehingga Anda bisa melihat prediksi yang mencerminkan arah tren. Dan kesimpulannya sangat menunjukkan kecenderungan yang kami yakini benar.
melakukan tes skor,
The Score (atau Rao) statistik berbeda dari rasio kemungkinan dan wald statistik. Itu tidak memerlukan evaluasi varian di bawah hipotesis alternatif. Kami cocok dengan model di bawah nol:
Dalam kedua kasus Anda memiliki inferensi untuk OR tanpa batas.
, dan gunakan estimasi median yang tidak bias untuk interval kepercayaan.
Anda dapat menghasilkan median rata-rata, CI 95% non-singular untuk rasio odds tak terbatas dengan menggunakan estimasi median bias. Paket
epitools
di R dapat melakukan ini. Dan saya memberikan contoh penerapan penaksir ini di sini: Interval kepercayaan untuk pengambilan sampel Bernoullisumber
test="Rao"
keanova
fungsi. (Ya, dua yang terakhir adalah not, bukan quibbles.)Hati-hati dengan pesan peringatan ini dari R. Lihatlah posting blog ini oleh Andrew Gelman, dan Anda akan melihat bahwa itu tidak selalu merupakan masalah perpisahan yang sempurna, tetapi kadang-kadang bug dengan
glm
. Tampaknya jika nilai awal terlalu jauh dari perkiraan kemungkinan maksimum, nilai itu akan meledak. Jadi, periksa dulu dengan perangkat lunak lain, seperti Stata.Jika Anda benar-benar memiliki masalah ini, Anda dapat mencoba menggunakan pemodelan Bayesian, dengan prior informatif.
Tetapi dalam praktiknya saya hanya menyingkirkan prediktor yang menyebabkan masalah, karena saya tidak tahu bagaimana memilih yang informatif sebelumnya. Tapi saya kira ada makalah dari Gelman tentang menggunakan informasi sebelumnya ketika Anda memiliki masalah dengan masalah pemisahan yang sempurna ini. Hanya google saja. Mungkin Anda harus mencobanya.
sumber
glm2
paket mengimplementasikan pemeriksaan bahwa kemungkinan sebenarnya meningkat pada setiap langkah pemberian skor, & membagi dua ukuran langkah jika tidak.safeBinaryRegression
yang dirancang untuk mendiagnosis dan memperbaiki masalah seperti itu, menggunakan metode optimasi untuk memeriksa apakah ada pemisahan atau quasiseparation. Cobalah!Saya tidak yakin bahwa saya setuju dengan pernyataan dalam pertanyaan Anda.
Saya pikir pesan peringatan berarti, untuk beberapa tingkat X yang diamati dalam data Anda, probabilitas yang dipasang adalah angka 0 atau 1. Dengan kata lain, pada resolusi, itu ditampilkan sebagai 0 atau 1.
Anda dapat menjalankan
predict(yourmodel,yourdata,type='response')
dan Anda akan menemukan 0's atau / dan 1's di sana sebagai probabilitas diprediksi.Sebagai hasilnya, saya pikir tidak apa-apa untuk hanya menggunakan hasilnya.
sumber
Saya mengerti ini adalah posting lama, namun saya masih akan melanjutkan dengan menjawab ini karena saya telah berjuang berhari-hari dengan itu dan dapat membantu orang lain.
Pemisahan total terjadi ketika variabel yang Anda pilih agar sesuai dengan model dapat dengan sangat akurat membedakan antara 0 dan 1 atau ya dan tidak. Seluruh pendekatan kami dalam ilmu data didasarkan pada estimasi probabilitas tetapi gagal dalam kasus ini.
Langkah-langkah perbaikan: -
Gunakan bayesglm () alih-alih glm (), ketika dalam kasus varians antara variabel rendah
Pada saat menggunakan (maksit = ”beberapa nilai numerik”) bersama dengan bayesglm () dapat membantu
3. Periksa ketiga dan paling penting untuk variabel yang Anda pilih untuk pemasangan model, harus ada variabel yang multi collinearity dengan variabel Y (outout) sangat tinggi, buang variabel itu dari model Anda.
Seperti dalam kasus saya, saya memiliki data churn telekomunikasi untuk memprediksi churn untuk data validasi. Saya memiliki variabel dalam data pelatihan saya yang bisa sangat membedakan antara ya dan tidak. Setelah menjatuhkannya saya bisa mendapatkan model yang benar. Selanjutnya Anda dapat menggunakan stepwise (fit) untuk membuat model Anda lebih akurat.
sumber