आर में संभावना अनुपात परीक्षण


25

मान लीजिए, मैं इस तरह के कई स्वतंत्र चर पर एक संयुक्त लॉजिस्टिक प्रतिगमन करने जा रहा हूं:

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

मैंने यह देखने के लिए एक मॉडल तुलना (संभावना अनुपात परीक्षण) किया कि क्या मॉडल इस कमांड द्वारा अशक्त मॉडल से बेहतर है

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

फिर मैंने इसमें सभी वेरिएबल्स के साथ एक और मॉडल बनाया

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

मल्टीवीरेट मॉडल में वैरिएबल सांख्यिकीय रूप से महत्वपूर्ण है या नहीं यह देखने के लिए, मैंने lrtestकमांड का उपयोग किया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

मुझे आश्चर्य है कि क्या pchisqविधि और lrtestविधि loglikelihood परीक्षण करने के लिए बराबर हैं? जैसा कि मुझे पता है कि lrtestलॉजिस्टिक मॉडल को एकजुट करने के लिए कैसे उपयोग किया जाए।


@Gavin मुझे याद दिलाने के लिए धन्यवाद, स्टैकओवरफ्लो के साथ तुलना करने के रूप में, मुझे जवाब देने से पहले जवाब को "पचाने" के लिए अधिक समय बिताने की आवश्यकता है, जवाब उपयुक्त है या नहीं, वैसे भी, फिर से धन्यवाद।
lokheart

मैं lmtest से वाल्डेस्ट का उपयोग करने की अनुशंसा नहीं करूंगा। मॉडल परीक्षण के लिए थियोड पैकेज का उपयोग करें। इसका और अधिक सीधा है। cran.r-project.org/web/packages/aod/aod.pdf
श्री कोई भी

epicalc( स्रोत ) हटा दिया गया था । एक विकल्प हो सकता है lmtest
मार्टिन थोमा

जवाबों:


21

असल में, हाँ, बशर्ते आप लॉग-लाइफ़ में सही अंतर का उपयोग करें:

> 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

और अशक्त मॉडल के लिए विचलन नहीं है जो दोनों मामलों में समान है। डीएफ की संख्या उन मापदंडों की संख्या है जो दो नेस्टेड मॉडल के बीच भिन्न होती है, यहां डीएफ = 1 है। BTW, आप lrtest()केवल टाइप करके स्रोत कोड को देख सकते हैं

> lrtest

R प्रॉम्प्ट पर।


धन्यवाद, और मैंने अभी पाया कि मैं NULL मॉडल बनाने के लिए glm (आउटपुट ~ NULL, data = z, family = binomial ("logistic")) का उपयोग कर सकता हूं, और इसलिए मैं सबसे बाद में lrtest का उपयोग कर सकता हूं। FYI करें, फिर से धन्यवाद
lokheart

2
@lokheart anova(model1, model0)भी काम करेगा।
CHL

5
@lokheart glm(output ~ 1, data=z, family=binomial("logistic"))एक अधिक प्राकृतिक अशक्त मॉडल होगा, जो कहता है कि outputएक निरंतर शब्द (इंटरसेप्ट) द्वारा समझाया गया है / इंटरसेप्ट आपके सभी मॉडलों में निहित है, इसलिए आप aइंटरसेप्ट के लिए लेखांकन के बाद के प्रभाव के लिए परीक्षण कर रहे हैं ।
मोनिका की बहाली - जी। सिम्पसन

या आप इसे "मैन्युअल रूप से" कर सकते हैं: एलआर परीक्षण का पी-मान = 1-पचीसक (विचलन,
डॉफ

22

एक विकल्प lmtestपैकेज है, जिसमें एक lrtest()फ़ंक्शन होता है जो एकल मॉडल को स्वीकार करता है। यहाँ पैकेज से उदाहरण ?lrtestदिया गया lmtestहै, जो एक LM के लिए है, लेकिन ऐसे तरीके हैं जो GLM के साथ काम करते हैं:

> 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 यह जानना अच्छा है (और ऐसा लगता है कि मैं उस पैकेज के बारे में भूल गया था)।
CHL

2
@GavinSimpson यह मूर्खतापूर्ण लग सकता है, लेकिन आप 'lrtest (fm2, fm1)' परिणामों की व्याख्या कैसे करेंगे? मॉडल 2 मॉडल 1 की तुलना में काफी अलग है और इसलिए con1 चर के अलावा उपयोगी था? या सबसे बड़ा (fm2) कह रहा है कि मॉडल 2 मॉडल 1 से काफी अलग है? लेकिन कौन सा मॉडल बेहतर है?
केरी

5
@ केरी fm1की लॉग कम संभावना है और इसलिए एक गरीब की तुलना में फिट है fm2। LRT हमें बता रहा है कि जिस डिग्री को हमने fm1एक खराब मॉडल बनाया है fm2वह अप्रत्याशित रूप से बड़ी है अगर मॉडल के बीच अलग-अलग शब्द उपयोगी थे (प्रतिक्रिया को समझाया)। सभी के lrtest(fm2)साथ तुलना नहीं की जाती है fm1, मॉडल fm2की तुलना उस मामले में की जाती है यदि, जैसा कि आउटपुट में कहा गया है: यह con ~ 1। वह मॉडल, अशक्त मॉडल, कहता है कि सबसे अच्छा भविष्यवक्ता (इंटरसेप्ट / निरंतर अवधि) conका नमूना मतलब है con
मोनिका को बहाल करें - जी। सिम्पसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.