使用 anova() 的 lme4 包中的错误

bug in lme4 package with anova()

library(Matrix)
library(lme4)


data <- lme4::sleepstudy

model1 <- lm(Reaction ~ Days, data = data)
model2 <- lmer(Reaction ~ 1+Days+(1+Days|Subject), data = data)
summary(model1)
summary(model2)
anova(model1, model2)

所以我需要将 R 更新到 4.0.2,现在比较使用 anova 函数的混合效果模型 returns 一个错误。当我分配模型时似乎出现了错误,因为在全局环境中它说“object with null pointer”。该错误似乎只出现在使用 lmer 而不是使用 lm 时。谁能告诉我如何解决这个问题?我至少需要 R 版本 4.0.0(我的教授编写的脚本需要这个版本)。

您可以直接从lme4包中调用相应的anova方法。

lme4:::anovaLmer(model1, model2)
# refitting model(s) with ML (instead of REML)
# Data: data
# Models:
# model1: Reaction ~ Days
# model2: Reaction ~ 1 + Days + (1 + Days | Subject)
#        npar    AIC    BIC  logLik deviance  Chisq Df Pr(>Chisq)    
# model1    3 1906.3 1915.9 -950.15   1900.3                         
# model2    6 1763.9 1783.1 -875.97   1751.9 148.35  3  < 2.2e-16 ***
#   ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

但是,这在例如R 3.6.3 要么!

接受的解决方案(显式调用 lme4::anovaLmer())有效,但这里的实际问题是如果你想 运行 anova() 比较 a(n) [g]lm模型和 (n) [g]lmer 模型,你需要将 [g]lmer 模型放在参数列表的第一位 ,<因为......无聊的技术细节:S3方法调度等等等等......>。 (这应该被记录在案,这不是我能说的。)对于你的例子,

anova(model2,model1)

工作正常!

“带空指针的对象”错误是一个转移注意力的问题:无关、神秘,可能与 RStudio 相关,另请参阅 this question and this question(均未回答...)