为什么lrtest()与anova(test =“ LRT”)不匹配


15

我一直在寻找在R中进行似然比测试以比较模型拟合的方法。我首先自己编写了代码,然后在包中找到了默认anova()功能。但是,当我检查时,即使将“ test”参数设置为“ LRT” ,也总是会产生与其他两个略有不同的p值。实际上是在执行一些微妙的不同测试,还是我不了解某些内容?lrtest()lmtestanova()anova()

平台:在Linux Mint 17 lmtest版本0.9-33 上运行的R 3.2.0

样例代码:

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,而其他两个为0.60599。浮点数的存储方式差异很小,但始终如一,而且太大,以致于不精确。有人可以解释为什么anova()给出不同的答案吗?

Answers:


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)按缩放(无偏OLS估计量)与缩放(有偏ML估计量),以及(2)在原假设或替代条件下使用估计量。nkn

在中实现的似然比测试lrtest()分别对每个模型使用ML估计器,而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
我不知道有关此问题的任何理论结果,但如果OLS变体在带有高斯误差的小样本中表现更好,我也不会感到惊讶。但是在中等规模的样本中,差异应该可以忽略不计。
Achim Zeileis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.