R'deki lojistik regresyon, mükemmel ayrılma ile sonuçlandı (Hauck-Donner fenomeni). Şimdi ne olacak?


56

50 sürekli açıklayıcı değişken kullanarak ikili sonucu tahmin etmeye çalışıyorum (değişkenlerin çoğunun aralığı ila ∞ arasındadır ). Veri setimin neredeyse 24.000 satırı var. R'de koşarken , alıyorum:glm

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

Mükemmel ayrılmanın olabileceğini gösteren diğer yanıtları okudum, ancak verilerimde durumun olmadığından eminim (yarı-ayrılık olsa da; durumun böyle olup olmadığını nasıl test edebilirim?) . Bazı değişkenleri kaldırırsam "yakınsama" hatası ortadan kalkabilir. Ama her zaman olan bu değil.

Bir bayesglmfonksiyonda aynı değişkenleri kullanmayı denedim ve aynı hataları aldım.

Burada tam olarak ne olduğunu anlamak için hangi adımları atmalısınız? Hangi değişkenlerin soruna neden olduğunu nasıl anlarsınız?


5
Neden ayrılmanın gerçekleşmediğinden emin misin? Olarak kağıt gibi, "örnek boyutu büyüktür ve prediktörler sayısının az olduğu zaman bile, genel bir sorun," ayırma olduğunu iddiabayesglm
David J. Harris

2
Başka bir düşünce: bir bayesglmöncekini ekleyerek ayrılmayı önlemeye çalışır, ancak 24.000 sıra ile öncek muhtemelen olasılıkla batırılır. Küçültmeyi prior.scale, muhtemelen büyük miktarda çekmeyi deneyin . Ayrıca, ayrılma ile ilgili büyük değerlerin ekarte edilmesine yardımcı olacak önceliğin serbestlik derecelerini arttırmayı düşünün.
David J. Harris,

Önerileriniz için teşekkürler David. Ayrılmanın gerçekleştiğini düşünmüyorum çünkü açıklayıcı değişkenlerin her birini sıraladığımda, bağımlı değişken açıklayıcı değişkenlerin yüksek veya düşük değerleri için her zaman doğru veya yanlış değildir. Bu ayrılma olarak kabul edilmediği sürece: bağımlı değişken tüm x7> 32 için geçerlidir, ancak 10 durumda x7 sadece> 32'dir. Lojistik bir regresyonun dışındaki ayrımı doğrulamanın bir yolu var mı? Veya hangi değişkenin ayrılmaya neden olduğunu görün? Bayesglm ile ilgili önerilerinizi denedim (önce 1'den önce ve 1'den önce Inf'e ayarlıyorum) ve hala Hauck Donner hatası alıyorum.
Dcook


“Hangi değişkenlerin soruna neden olduğunu nasıl anlarsınız?” İkili arama her zaman iyi bir geri dönüş. Yalnızca 50 değişkene sahipsiniz, bu nedenle tek bir değişkenle tamamen ayrılırsa, 6 yineleme suçluyu bulur. İki değişken ise en fazla 49 + 6 = 55 iterasyon bulacaktır, en kötüsü.
smci

Yanıtlar:


55

R50

Sınıflarınızın tasarım alanınızda mükemmel bir şekilde ayrılıp ayrılmadığını kolayca test edebilirsiniz. Bu, doğrusal bir programlama problemini çözmekle sonuçlanır. SafeBinaryRegression paketinde bu 'testin R uygulaması (terimin istatistiksel anlamındaki bir test değil) uygulanır .

Ayrılmanın gerçekte sorun olduğu ortaya çıkarsa ve eğer glm'nin sade bir vanilya kullanımıyla ilgileniyorsanız (örneğin, glm daha üst düzey bir işlev tarafından değil, sizin tarafınızdan çağrılır), o zaman bir algoritmanın bir R uygulaması vardır. Klasik olanı, ayrılığa karşı 'sağlam' yapması için hafifçe değiştirir. Hlr paketinde uygulanmaktadır


4
Çok güzel ve faydalı cevap! Bu paketleri araştırmam gerekecek. (+1)
Peter Flom - Monica'yı yeniden yerleştir

1
FWIW burada başka bir sağlam algoritmanın açıklamasıdır: win-vector.com/blog/2012/10/rudie-cant-fail-if-majorized
Alex

2
@Alex: bağlantı için teşekkürler. Eğer glm kötü başlangıçlar yüzünden yakınlaşmıyorsa, o zaman bu yöntemin buna nasıl yardımcı olacağını görebilirim. Öte yandan, eğer sorun mükemmel ayrılmadan kaynaklanıyorsa, MM fikrinin bunu nasıl ele alacağı bana açık değildir. Bu konuda yorum yapıp yapamayacağınızı merak ediyordum (sonunda bunu ayrı bir soru olarak gönderebilirim).
user603

Mükemmel (+1)! Ben de bu paketlere bakmak zorunda kalacağım.
jbowman

1
User603 @ cevabı için teşekkürler! SafeBinaryRegression kullandım ve ayırma gerçekten değişkenlerin birçoğunda meydana geldi. Daha sonra bu ayrılığa karşı sağlam bir model oluşturmak için hlr paketinde MEL kullanmayı denedim. Bununla birlikte, katsayılar çok büyük (ayrılık normal glm'de gerçekleştiğinde olduğu gibi) ve işte burada df ve sapma sayıları: Özgürlük Derecesi: 19112 Toplam (yani Boş); 19063 Kalan Null Sapma: 24990 Kalan Sapma: 626000 AIC: 626000 Yanlış bir şey yaptığımı mı düşünüyorsunuz?
Dcook
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.