我正在寻找在 R 中进行似然比检验以比较模型拟合的方法。我首先自己编写了代码,然后在包中找到了默认anova()
函数。但是,当我检查时,即使“测试”参数设置为“LRT”,它总是会产生与其他两个稍有不同的 p 值。实际上是在执行一些微妙不同的测试,还是我不理解某些东西?lrtest()
lmtest
anova()
anova()
平台:在 Linux Mint 17 上运行的 R 3.2.0,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()
给出的 p 值为 0.6071,而其他两个给出的 p 值为 0.60599。一个很小的差异,但一致,并且太大以至于浮点数的存储方式不精确。有人可以解释为什么anova()
给出不同的答案吗?