Saya mencari cara untuk melakukan uji rasio kemungkinan dalam R untuk membandingkan model yang cocok. Saya pertama kali mengkodekannya sendiri, kemudian menemukan anova()
fungsi default dan juga lrtest()
dalam lmtest
paket. Ketika saya memeriksa, anova()
selalu menghasilkan nilai p yang sedikit berbeda dari dua lainnya meskipun parameter 'test' diatur ke "LRT". Apakah anova()
sebenarnya melakukan beberapa tes yang agak berbeda, atau apakah saya tidak memahami sesuatu?
Platform: R 3.2.0 berjalan pada Linux Mint 17, lmtest
versi 0.9-33
Kode sampel:
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)
Ketika saya menjalankannya, anova()
memberikan nilai p 0,6071, sedangkan dua lainnya memberikan 0,60599. Perbedaan kecil, tetapi konsisten, dan terlalu besar untuk menjadi tidak akurat dalam bagaimana angka floating point disimpan. Adakah yang bisa menjelaskan mengapa anova()
memberi jawaban yang berbeda?