You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一数据集拟合多glmer模型后AIC对比出现观测数不一致警告

问题分析与解决办法

你遇到的这个情况其实是glmer(以及大多数R建模函数)的默认行为导致的,核心原因就是模型公式里的交互项引入了缺失值过滤,而非数据集本身不一致。

为什么观测数会不一样?

你的三个模型里,只有m2包含了Y1*A、Y2*A、Y3*A这类交互项。交互项的计算要求参与交互的两个变量(比如Y1和A)同时都没有缺失值——只要其中一个变量在某条观测里是缺失的,这条观测就会被glmer自动排除(行删除法,listwise deletion)。

而m1和m3呢?m1没用到变量A,m3也完全不涉及A,所以它们只会过滤掉X、Y1/Y2/Y3、B/C这些变量里有缺失的观测,不会因为A的缺失而删除行,因此观测数和原始数据集一致。

怎么验证这个结论?

你可以跑几行代码确认:

# 查看变量A的缺失数量
sum(is.na(dataset$A))

# 查看Y1/Y2/Y3和A同时无缺失的观测数
sum(complete.cases(dataset[, c("Y1", "Y2", "Y3", "A")]))

第二个命令的结果应该刚好等于nobs(m2)的150164,这就能实锤是缺失值导致的观测数差异。

怎么解决AIC对比的问题?

要让所有模型在相同观测数下对比AIC,你需要先统一数据集:

  1. 先提取所有模型涉及到的变量,筛选出这些变量都没有缺失的观测:
# 列出所有模型用到的变量:X、Y1、Y2、Y3、A、B、C
clean_data <- dataset[complete.cases(dataset[, c("X", "Y1", "Y2", "Y3", "A", "B", "C")]), ]
  1. 用这个clean_data重新拟合三个模型,之后再运行AIC(m1, m2, m3)就不会出现警告了。

另外,你也可以考虑对缺失值进行插补,但插补需要结合你的研究场景谨慎选择方法(比如均值插补、多重插补等),确保结果的合理性。

内容的提问来源于stack exchange,提问作者mto23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:05:24