Pearson'u nasıl hesaplayabilirim


10

Olabilirlik oranı (aka sapma) G2istatistiksel ve uyumsuzluk (veya uyum iyiliği) testi, glm(..., family = binomial)R'de bir lojistik regresyon modeli ( işlevi kullanarak uyum) elde etmek için oldukça basittir. Ancak, bazı hücre sayımlarının yeterince düşük olması kolay olabilir. testin güvenilir olmadığını. Uyum eksikliği için olasılık oranı testinin güvenilirliğini doğrulamanın bir yolu, test istatistiği ve P- değerini, Pearson ki-kare (veyaχ2) uyum eksikliği testi.

Ne glmnesne ne de summary()yöntemi, Pearson'un ki kare testi için uyumsuzluk test istatistiklerini bildirmez. Araştırmamda bulduğum tek şey chisq.test()işlevdir ( statspakette): belgelerinde " chisq.testki-kare acil durum tablosu testleri ve uyum iyiliği testleri gerçekleştiriliyor " yazıyor . Bununla birlikte, bu tür testlerin nasıl yapılacağı konusunda belgeler seyrektir:

Bir xsatır veya sütuna sahip bir matrisse veya xbir vektörse ve yverilmemişse, uygunluk testi yapılır ( xtek boyutlu bir olasılık tablosu olarak kabul edilir). Girişleri xnegatif olmayan tamsayılar olmalıdır. Bu durumda, test edilen hipotez popülasyon olasılıklarının verilenlere eşit olup olmadığı pveya pverilmemesi durumunda hepsinin eşit olup olmadığıdır.

Nesnenin ybileşenini glm, xargüman olarak kullanabileceğinizi hayal ediyorum chisq.test. Ancak, bir argüman fitted.valuesiçin glmnesnenin bileşenini kullanamazsınız , çünkü bir hata alırsınız: " "pchisq.testprobabilities must sum to 1.

En azından Pearson'u nasıl hesaplayabilirim? χ2 manuel olarak adımlar atmak zorunda kalmadan uyum eksikliği için istatistik test?

Yanıtlar:


13

Kareli Pearson kalıntılarının toplamı, Pearson'a tam olarak eşittir χ2istatistiği uyumsuzluk açısından test edin. Dolayısıyla, takılı modeliniz (yani glmnesne) çağrılırsa logistic.fit, aşağıdaki kod test istatistiğini döndürür:

sum(residuals(logistic.fit, type = "pearson")^2)

residuals.glmDiğer kalıntıların neler olduğu da dahil olmak üzere daha fazla bilgi için belgelere bakın . Örneğin, kod

sum(residuals(logistic.fit, type = "deviance")^2)

seni alacak G2test istatistiği, aynı deviance(logistic.fit)sağlar.


Macro ile aynı fikirdeyim. Eğer gruptan cevap almak istiyorsanız, önce başkalarının ne söylemesini beklemelisiniz. Şimdi alabileceğiniz her şey cevabınızı görerek önyargılıdır. Ayrıca, cevabı biliyorsanız, bunu yaparak neyi kanıtlamaya çalışıyorsunuz?
Michael R.Chernick

@Macro - Firefeather bu siteye (bu dahil) dört soru gönderdi ve bunlardan üçünü (bu dahil) kendisi cevapladı ve kendi cevaplarından birini bir kez kabul etti. Birkaç tane daha böyle ve bir model görmeye başlayabilirim!
jbowman

@jbowman, başka bir cevap göndermeden önce kendi başınıza çözdüğünüzde kendi sorunuzu cevapladığımı hayal edebiliyorum, ancak itfaiyeci soruyu gönderdikten sonra 5 dakikadan daha kısa bir süre içinde bir cevap gönderdi, yardıma ihtiyacı yok gibi görünüyor , bu yüzden nedenini sormama neden oldu ... Motivasyonu gerçekten anlamıyorum ...
Macro

3
@Macro, lütfen şu resmi bağlantıya bakın: blog.stackoverflow.com/2011/07/… (alt taraftaki onay kutusu etiketindeki Soru Sor sayfasında bağlantılıdır: "Kendi sorunuzu cevaplayın - bilginizi paylaşın, Soru-Cevap stili "). Ödev yaparken bu soruyu sordum (Minitab sınıfta gösterilmiş olsa da Minitab yerine R kullanmayı seçtikten sonra), ancak soruyu yazmak ve bir yanıt beklemek için yeterli zamanım yoktu. Bu geçici çözümü anladım ve toplulukla paylaşmaya karar verdim.
Firefeather

2
@Macro, çok hoş geldiniz! Keşke cevabı vermediğim yerlerde daha fazla soru sorabilsem ve sormadığım daha fazla soruyu da yanıtlayabilirsem. Ama jbowman bir desen hakkında haklı: topluma katkılarım olan kendime konuşuyorum doğru eğilimi. :) (En azından topluma bir şekilde katkıda bulunuyorum, değil mi?)
Firefeather

10

Pearson istatistiği dejenere bir dağılıma sahiptir, bu nedenle genel olarak lojistik model uyum iyiliği için önerilmez. Yapısal testleri tercih ediyorum (doğrusallık, katkı). Omnibus testi istiyorsanız, R rmspaket residuals.lrmfonksiyonunda uygulandığı gibi tek serbestlik derecesi le Cessie - van Houwelingen - Copas - Hosmer ağırlıksız kareler testine bakın .


2
-1: İçgörü için teşekkürler! Ancak bu sorumu cevaplamıyor. Sorumun arka planında yaptığım bir ifade ile ilgili yorum / tartışma olduğundan, cevabınız muhtemelen bir cevap yerine bir yoruma aittir.
Mart'ta Firefeather

2
Sanırım cevabım için oy veren dört kişi seninle aynı fikirde değil. Ve dejenere dağılımla ilgilenmediniz.
Frank Harrell

@FrankHarrell: Bu GOF ölçümü Hosmer-Lemeshow (HL) GOF testinden farklı mı? Adından dolayı varsayılarak ve ikisini de karşılaştırdık: ResourceSelectionPakette bulunan iletken HL GOF testi ve sonucu, resid(lrm_object, 'gof')lojistik regresyon modelimi taktıktan sonra koştuğumdan farklı lrm_object <- lrm(...). Eğer gerçekten farklılarsa, HL testinin burada bahsettiğiniz teste göre nasıl biriktiği hakkında yorum yapabilir misiniz? Teşekkür ederim!
Meg

1
İkisi çok farklı. HL istatistiği (artık kullanılmıyor) df'yi sabitledi ve genellikle risk ondalıklarına dayanıyor. HLχ2 dolayısıyla istatistik dejenere olmaz N. Öte yandan, herhangi birχ2 df'nin genişlemeye devam ettiği istatistik N.
Frank Harrell

Bu dejenerasyonu gösteren bir simülasyon görmek isterim.
wdkrnls

0

Teşekkürler, bunun kadar basit olduğunu fark etmedim: toplam (artıklar (f1, type = "pearson") ^ 2) Ancak, Pearsons kalıntısının, değişken grup tarafından mı yoksa bireysel olarak mı hesaplandığına bağlı olarak değiştiğini lütfen unutmayın. Basit bir örnek:

m1 bir matristir (bu daha büyük bir matrisin başıdır):

m1 [1: 4,1: 8]

    x1 x2 x3 obs    pi   lev  yhat y
obs  1  1 44   5 0.359 0.131 1.795 2
obs  0  1 43  27 0.176 0.053 4.752 4
obs  0  1 53  15 0.219 0.062 3.285 1
obs  0  1 33  22 0.140 0.069 3.080 3

X1-3'ün yordayıcı olduğu durumlarda obs hayırdır. her gruptaki gözlemler, pi grup üyeliği olasılığıdır (regresyon denkleminden tahmin edilir), lev kaldıraç, şapka matrisinin köşegenidir, tahmin edilen hayır. (y = 1) grupta ve y gerçek no.

Bu size Pearson'u gruba göre verecektir. Y == 0: ' 'fun1 <- function(j){        if (m1[j,"y"] ==0){ # y=0 for this covariate pattern     Pr1 <- sqrt( m1[i,"pi"] / (1-m1[i,"pi"]))     Pr2 <- -sqrt (m1[i,"obs"]) res <- round( Pr1 * Pr2, 3) return(res) } else {  Pr1 <- m1[j,"y"] - m1[j,"yhat"] Pr2 <- sqrt(   m1[j,"yhat"] * ( 1-(m1[j,"pi"]) )   ) res <- round( Pr1/Pr2, 3) return(res) }    }

Böylece

nr <-nrow(m1)
nr1 <- seq(1,nr)
Pr <- sapply(1:nrow[m1], FUN=fun1)
PrSj <- sum(Pr^2)

Y = 0 ortak değişken paternli çok sayıda konu varsa, Pearon kalıntısı, 'bireysel' yöntem yerine 'grup' kullanılarak hesaplandığında çok daha büyük olacaktır.

Bkz. Örneğin Hosmer & Lemeshow "Uygulamalı Lojistik Regresyon", Wiley, 200.


0

c_hat(mod)Aynı çıktıyı verecek olanı da kullanabilirsiniz sum(residuals(mod, type = "pearson")^2).


1
Hangi pakette c_hatbulunur?
Firefeather
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.