लोएरेस्ट () एनोवा (टेस्ट = "एलआरटी") से मेल नहीं खाता है


15

मैं मॉडल फिट की तुलना करने के लिए आर में संभावना अनुपात परीक्षण करने के तरीकों की तलाश कर रहा था। मैंने पहले इसे स्वयं कोडित किया, फिर डिफ़ॉल्ट anova()फ़ंक्शन और पैकेज lrtest()में भी पाया lmtest। जब मैंने जाँच की, हालांकि, anova()हमेशा अन्य दो से थोड़ा अलग पी-मूल्य पैदा करता है , भले ही 'परीक्षण' पैरामीटर "एलआरटी" पर सेट हो। क्या anova()वास्तव में कुछ अलग तरह का टेस्ट हो रहा है, या मैं कुछ समझ नहीं रहा हूं?

प्लेटफ़ॉर्म: R 3.2.0 लिनक्स मिंट 17, lmtestसंस्करण 0.9-33 पर चल रहा है

नमूना कोड:

set.seed(1) # Reproducibility
n=1000
y = runif(n, min=-1, max=1)
a = factor(sample(1:5, size=n, replace=T))
b = runif(n)

# Make y dependent on the other two variables
y = y + b * 0.1 + ifelse(a==1, 0.25, 0)
mydata = data.frame(y,a,b)

# Models
base = lm(y ~ a, data=mydata)
full = lm(y ~ a + b, data=mydata)

# Anova
anova(base, full, test="LRT")

# lrtest
library(lmtest)
lrtest(base, full)

# Homebrew log-likelihood test
like.diff = logLik(full) - logLik(base)
df.diff = base$df.residual - full$df.residual
pchisq(as.numeric(like.diff) * 2, df=df.diff, lower.tail=F)

जब मैं इसे anova()चलाता हूं, तो 0.6071 का पी-मूल्य देता है, जबकि अन्य दो 0.60599 देते हैं। एक छोटा सा अंतर, लेकिन सुसंगत, और बहुत बड़ा होने के लिए कैसे अस्थायी बिंदु संख्याओं में संग्रहित किया जाता है। क्या कोई समझा सकता है कि anova()अलग जवाब क्यों देता है?

जवाबों:


7

परीक्षण के आँकड़े अलग-अलग तरीके से प्राप्त होते हैं। anova.lmlistवर्गों के अवशिष्ट योग के स्केल किए गए अंतर का उपयोग करता है:

anova(base, full, test="LRT")
#  Res.Df    RSS Df Sum of Sq Pr(>Chi)
#1    995 330.29                      
#2    994 330.20  1   0.08786   0.6071

vals <- (sum(residuals(base)^2) - sum(residuals(full)^2))/sum(residuals(full)^2) * full$df.residual 
pchisq(vals, df.diff, lower.tail = FALSE)
#[1] 0.6070549

16

जैसा कि पिछले उत्तर में बताया गया है, स्केलिंग में अंतर के कारण अंतर कम हो जाता है, अर्थात, त्रुटियों के मानक विचलन के लिए अलग-अलग अनुमानक। अंतर के लिए स्रोत हैं (1) (निष्पक्ष ओएलएस अनुमानक) बनाम (स्केल्ड एमएल अनुमानक) द्वारा स्केलिंग , और (2) शून्य परिकल्पना या विकल्प के तहत अनुमानक का उपयोग करके स्केलिंग ।n-n

संभावना अनुपात परीक्षण में लागू lrtest()अलग से एक मॉडल के लिए उपयोग करता है एमएल आकलनकर्ता, जबकि anova(..., test = "LRT")का उपयोग करता है OLS विकल्प के तहत अनुमानक।

sd_ols <- function(object) sqrt(sum(residuals(object)^2)/df.residual(object))
sd_mle <- function(object) sqrt(mean(residuals(object)^2))

फिर lrtest()गणना करने वाला आँकड़ा है

ll <- function(object, sd) sum(dnorm(model.response(model.frame(object)),
  mean = fitted(object), sd = sd, log = TRUE))
-2 * (ll(base, sd_mle(base)) - ll(full, sd_mle(full)))
## [1] 0.266047

anova(..., test = "LRT") दूसरी ओर उपयोग करता है

-2 * (ll(base, sd_ols(full)) - ll(full, sd_ols(full)))
## [1] 0.2644859

अशक्त परिकल्पना के तहत, दोनों समान रूप से समान रूप से समतुल्य हैं, लेकिन परिमित नमूनों में एक छोटा सा अंतर है।


1
जवाब के लिए धन्यवाद। तो, क्या हम कह सकते हैं कि एक वेरिएंट दूसरे से बेहतर है? क्या मैं चिंताओं के बिना एनोवा-परीक्षण का उपयोग कर सकता हूं?
जूलियन

1
मुझे इस प्रश्न से संबंधित कोई सैद्धांतिक परिणाम नहीं पता है, लेकिन मुझे आश्चर्य नहीं होगा यदि ओएलएस वेरिएंट गॉसियन त्रुटियों के साथ छोटे नमूनों में थोड़ा बेहतर प्रदर्शन करता है। लेकिन पहले से ही मध्यम बड़े नमूनों में अंतर नगण्य होना चाहिए।
अचिमे ज़ीलिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.