R de olabilirlik oranı testi


25

Farz edelim ki birkaç bağımsız değişkende tek değişkenli bir lojistik regresyon yapacağım, bunun gibi:

mod.a <- glm(x ~ a, data=z, family=binominal("logistic"))
mod.b <- glm(x ~ b, data=z, family=binominal("logistic"))

Bu komutla modelin null modelden daha iyi olup olmadığını görmek için bir model karşılaştırma yaptım (olasılık oranı testi).

1-pchisq(mod.a$null.deviance-mod.a$deviance, mod.a$df.null-mod.a$df.residual)

Sonra içindeki tüm değişkenleri olan başka bir model kurdum

mod.c <- glm(x ~ a+b, data=z, family=binomial("logistic"))

Çok değişkenli modelde değişkenin istatistiksel olarak anlamlı olup olmadığını görmek için, lrtestkomutunu kullandım.epicalc

lrtest(mod.c,mod.a) ### see if variable b is statistically significant after adjustment of a
lrtest(mod.c,mod.b) ### see if variable a is statistically significant after adjustment of b

pchisqMetot ve lrtestmetodun mantık testi yapmakla aynı olup olmadığını merak ediyorum. lrtestUnivate lojistik modeli için nasıl kullanılacağını bilmiyorum .


@Gavin stackoverflow ile karşılaştırıldığında bana hatırlattığın için teşekkür ederim, cevabın uygun olup olmadığına karar vermeden önce cevabı "sindirmek" için daha fazla zaman harcamam gerekiyor, yine de teşekkürler.
lokheart

Waltest den lmtest kullanarak tavsiye etmem. Model testi için aod paketini kullanın. Çok daha basit. cran.r-project.org/web/packages/aod/aod.pdf
Bay Hiçkimse

epicalckaldırıldı ( kaynak ). Bir alternatif olabilir lmtest.
Martin Thoma

Yanıtlar:


21

Temel olarak, evet, log olasılığındaki doğru farkı kullanmanız koşuluyla:

> library(epicalc)
> model0 <- glm(case ~ induced + spontaneous, family=binomial, data=infert)
> model1 <- glm(case ~ induced, family=binomial, data=infert)
> lrtest (model0, model1)
Likelihood ratio test for MLE method 
Chi-squared 1 d.f. =  36.48675 , P value =  0 
> model1$deviance-model0$deviance
[1] 36.48675

ve her iki durumda da aynı olan boş modele olan sapma . Df sayısı, iki iç içe model arasında farklılık gösteren parametre sayısıdır, burada df = 1. Btw, lrtest()sadece yazarak kaynak koduna bakabilirsiniz

> lrtest

R isteminde.


teşekkürler ve ben sadece NULL modelini oluşturmak için glm (output ~ NULL, data = z, family = binomial ("logistic")) kullanabileceğimi öğrendim ve sonra da en sonra kullanabileceğimi öğrendim. Bilginize, tekrar teşekkürler
lokheart

2
@lokheart anova(model1, model0)da işe yarayacak.
chl

5
@lokheart glm(output ~ 1, data=z, family=binomial("logistic"))söylüyor daha doğal boş modeli olacağını outputsize etkisi için test ediyoruz, böylece sabit bir terim (durduran) / müdahale tüm modellerinde ima ile açıklanabilir akesişmesine hesaplandıktan sonra.
Monica'yı eski durumuna getirme - G. Simpson

Veya "elle" yapabilirsiniz: LR testinin p değeri = 1-pchisq (sapma,
dof

22

Bir alternatif, tek bir modeli kabul eden lmtestbir lrtest()işleve sahip olan pakettir . İşte gelen örnek ?lrtestiçinde lmtestbir LM içindir paketin ama yöntemler GLMs ile bu işe vardır:

> require(lmtest)
Loading required package: lmtest
Loading required package: zoo
> ## with data from Greene (1993):
> ## load data and compute lags
> data("USDistLag")
> usdl <- na.contiguous(cbind(USDistLag, lag(USDistLag, k = -1)))
> colnames(usdl) <- c("con", "gnp", "con1", "gnp1")
> fm1 <- lm(con ~ gnp + gnp1, data = usdl)
> fm2 <- lm(con ~ gnp + con1 + gnp1, data = usdl)
> ## various equivalent specifications of the LR test
>
> ## Compare two nested models
> lrtest(fm2, fm1)
Likelihood ratio test

Model 1: con ~ gnp + con1 + gnp1
Model 2: con ~ gnp + gnp1
  #Df  LogLik Df  Chisq Pr(>Chisq)    
1   5 -56.069                         
2   4 -65.871 -1 19.605  9.524e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 
>
> ## with just one model provided, compare this model to a null one
> lrtest(fm2)
Likelihood ratio test

Model 1: con ~ gnp + con1 + gnp1
Model 2: con ~ 1
  #Df   LogLik Df  Chisq Pr(>Chisq)    
1   5  -56.069                         
2   2 -119.091 -3 126.04  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

+1 Bilmek güzel (ve o paketi unutmuş gibiyim).
chl

2
@GavinSimpson Bu aptalca görünebilir, ancak 'lrtest (fm2, fm1)' sonuçlarını nasıl yorumlarsınız? Model 2, model 1'den önemli ölçüde farklıdır ve bu nedenle con1 değişkeninin eklenmesi yararlı oldu mu? Ya da en içten (fm2) model 2'nin model 1'den önemli ölçüde farklı olduğunu mu söylüyor? Ama hangi model daha iyidir?
Kerry,

5
@Kerry'nin fm1kütük olasılığı daha düşük ve bu nedenle de daha zayıf bir uyumu var fm2. LRT bize, eğer modeller arasında farklı terimler yararlı olsaydı, beklenmedik fm1bir şekilde daha zayıf bir model yaptığımız derecenin bize bildirdiğini söylüyor fm2(yanıtı açıkladı). lrtest(fm2)ile karşılaştırılmaz fm1hiç model fm2, bu çıktıda belirtildiği gibi eğer bu durumda ile karşılaştırılır: con ~ 1. Bu model, null model, en iyi yordayıcısının conörnekleme ortalaması olduğunu söyler con(kesişme / sabit terim).
Monica'yı eski
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.