问题描述
我正在使用 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
) 进行比较,以确定哪个变量具有显着影响。
输出示例:
我没有得到 Model2 和 Model3 的 p 值。在以前的版本中不是这种情况。我尝试将模型 0 与模型 1 进行比较,然后将模型 0 与模型 2 等进行比较。这样的比较为我提供了 p 值,但是,我有非常大的数据,我需要一起进行。
解决方法
这有点猜测,因为您没有提供可重现的示例,但这可能与 1.1-24 版之前和之后的 lme4
(不是 R)版本有关:{{ 3}} 报告说
如果两个模型之间的 df 差异为 0(意味着它们是等效模型),则 anova() 现在返回 NA 的 p 值
“df 差异”表示估计的参数数量的差异。有两种方法可以使不同模型具有相同数量的 df:
- 这些模型实际上是等价的(尽管它们的参数可能指定不同,例如,如果
f
和g
是因子,那么包括f*g
和f:g
会给出不同的参数化,但是等效模型拟合。在这种情况下,偏差(“Chisq”)的变化也为零。这似乎是您的情况下模型 0 与 2 中发生的情况(尽管让我感到困惑的是npar
不同:很难没有可重复的例子来理解。也许你添加了一个完全相关的预测变量,或者你的模型拟合是奇异的?)在这种情况下,可能会认为 p 值为 1,但NA
也是合理的(见这个NEWS file for lme4) - 模型是非嵌套,例如一个模型包含数值协变量
A
,第二个模型包含数值协变量B
。这不是包开发人员遇到的情况......在这种情况下似然比检验不合适,因此返回 p 值根本没有意义。
如果你想比较非嵌套模型,你要么需要像 Vuong 的测试,要么只是比较 AIC 值。 (我认为 bbmle::AICtab()
提供了更有用的比较格式...)