Model uyumlarını karşılaştırmak için R'de bir olasılık oranı testi yapmanın yollarını arıyordum. İlk kendim kodlu, varsayılan hem bulundu anova()
fonksiyonu ve aynı zamanda lrtest()
içinde lmtest
paketin. Ancak kontrol ettiğimde anova()
, 'test' parametresi "LRT" olarak ayarlanmış olsa bile, her zaman diğer ikisinden biraz farklı bir p değeri üretir. Is anova()
aslında bazı ustaca farklı testi, yoksa bir şey anlamak değil ben?
Platform: R 3.2.0 Linux Mint 17, lmtest
sürüm 0.9-33 üzerinde çalışıyor
Basit kod:
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)
Çalıştırdığımda anova()
0.6071'lik bir p değeri verirken, diğer ikisi 0.60599 verir. Küçük bir fark, ancak tutarlı ve kayan nokta sayılarının nasıl saklandığı konusunda belirsiz olamayacak kadar büyük. Birisi neden anova()
farklı bir cevap verdiğini açıklayabilir mi?