4个分组lmer模型anova比较结果异常的排查与正确实现
异常结果根本原因
调用anova()对多个lmer模型执行似然比检验存在硬性前提:所有待比较模型必须拟合自完全相同的观测数据集,且模型之间为嵌套关系(即复杂模型仅在简单模型基础上新增固定/随机效应项)。
你当前操作将全数据集按Group拆分为4个独立子集分别建模,得到的NKurdish.model、NAmerican.model、KEFL1.model、KEFL2.model四个模型使用的观测样本完全不重叠,模型的对数似然值、参数估计空间不具备可比性,anova()无法计算符合统计定义的似然比统计量,因此会返回Chisq、Df、Pr(>Chisq)为空值、0值的异常结果。
现有操作的逻辑偏差
你当前的建模思路完全无法支撑“检验4个研究分组VOT指标差异”的研究目标:
- 分数据集独立建模只能分别得到每个组内部VOT和其他预测变量的关联模式,无法直接输出组间VOT差异的统计检验量
- 跨组差异检验的核心是估计Group变量对VOT的主效应、以及Group和其他控制变量的交互效应,拆分数据集的操作直接把Group变量的所有变异从每个子模型中剔除了,根本不存在检验组间差异的统计基础
正确实现流程
不要拆分全数据集,直接在完整数据上通过嵌套模型比较完成组间差异检验,操作步骤如下:
- 拟合不含Group效应的基线模型,注意似然比检验需使用最大似然估计,设置
REML = FALSE
baseline.model <- lmer( VOT ~ Gender * POA * Laryngeal * Vowel.Height + (1|Speaker), data = full_dataset, REML = FALSE )
- 拟合包含Group主效应及所有高阶交互项的全模型
full.model <- lmer( VOT ~ Group * Gender * POA * Laryngeal * Vowel.Height + (1|Speaker), data = full_dataset, REML = FALSE )
- 执行似然比检验,输出Group整体效应的显著性结果
anova(baseline.model, full.model)
- 若需得到4个组两两之间的VOT差异检验结果,可通过估计边际均值实现
library(emmeans) # 控制其他协变量,计算4个组的VOT调整边际均值并做两两比较 group_emm <- emmeans(full.model, specs = ~ Group, adjust = "tukey") pairs(group_emm)
补充说明
如果你需要单独汇报每个组内部VOT和各预测变量的关联模式,可以保留你之前在4个子集上拟合的分模型,但这4个模型是完全独立的,不能传入同一个anova()函数做跨组比较。
内容的提问来源于stack exchange,提问作者lureen naser
相关产品推荐
相关产品推荐

