在 R 版本 4 中,Anova 无法将线性混合回归基础模型与具有不同变量的其他模型进行比较

问题描述

我正在使用 R 版本 3.6.3,最近更新到版本 4.0.3。我已经给出了我正在研究的模型的示例。

Model0 <- lmer(accuracy~Temperature+Relative_Humidity+scaledweek+(1 | pxids),data=ptrails.df)
Model1 <- lmer(accuracy~CO+Temperature+Relative_Humidity+scaledweek+(1 | pxids),data=ptrails.df)
Model2 <- lmer(accuracy~pm10+Temperature+Relative_Humidity+scaledweek+(1 | pxids),data=ptrails.df)
Model3 <- lmer(accuracy~NO+Temperature+Relative_Humidity+scaledweek+(1 | pxids),data=ptrails.df)

anova(Model0,Model1,Model2,Model3)

我们的想法是让每个模型与基础模型 (Model0) 进行比较,以确定哪个变量具有显着影响。

输出示例:

enter image description here

我没有得到 Model2 和 Model3 的 p 值。在以前的版本中不是这种情况。我尝试将模型 0 与模型 1 进行比较,然后将模型 0 与模型 2 等进行比较。这样的比较为我提供了 p 值,但是,我有非常大的数据,我需要一起进行。

解决方法

这有点猜测,因为您没有提供可重现的示例,但这可能与 1.1-24 版之前和之后的 lme4(不是 R)版本有关:{{ 3}} 报告说

如果两个模型之间的 df 差异为 0(意味着它们是等效模型),则 anova() 现在返回 NA 的 p 值

“df 差异”表示估计的参数数量的差异。有两种方法可以使不同模型具有相同数量的 df:

  • 这些模型实际上是等价的(尽管它们的参数可能指定不同,例如,如果 fg 是因子,那么包括 f*gf:g 会给出不同的参数化,但是等效模型拟合。在这种情况下,偏差(“Chisq”)的变化也为零。这似乎是您的情况下模型 0 与 2 中发生的情况(尽管让我感到困惑的是 npar 不同:很难没有可重复的例子来理解。也许你添加了一个完全相关的预测变量,或者你的模型拟合是奇异的?)在这种情况下,可能会认为 p 值为 1,但 NA 也是合理的(见这个NEWS file for lme4)
  • 模型是非嵌套,例如一个模型包含数值协变量 A,第二个模型包含数值协变量 B。这不是包开发人员遇到的情况......在这种情况下似然比检验不合适,因此返回 p 值根本没有意义。

如果你想比较非嵌套模型,你要么需要像 Vuong 的测试,要么只是比较 AIC 值。 (我认为 bbmle::AICtab() 提供了更有用的比较格式...)