线性混合模型(LMM)事后分析运行报错:缺失TRUE/FALSE逻辑值求助
报错触发原因
该错误本质是pairs()函数执行逻辑判断时,获取到的emmeans返回对象存在空值,导致无法完成TRUE/FALSE的布尔判断,常见诱因有两个:
- 随机效应语法错误,
lmer模型拟合结果异常,emmeans无法正常估算边缘均值 - 自变量存在连续变量/缺失组合/未转因子的情况,边缘均值估算结果存在NA值
解决方案
- 修正随机效应语法
你当前写的(1|"FACTOR of 13 levels")是无效语法,不能直接把因子描述放在引号中作为随机效应项,需要替换为数据集内实际的分组变量名,且提前将该变量转换为因子类型:# 替换group为你实际的13水平分组变量名 data$group <- as.factor(data$group) model1 <- lmer(Y ~ X1 * X2 + (1|group), data = data, REML = FALSE) - 校准自变量属性和数据完整性
如果X1、X2为分类变量,需先转换为因子,同时检查两个变量的交叉组合是否存在空白单元格:# 查看变量类型 str(data[,c("X1","X2")]) # 转换为分类因子(仅当X1/X2为分类变量时执行) data$X1 <- as.factor(data$X1) data$X2 <- as.factor(data$X2) # 检查交叉组合的观测数,确认是否存在0观测的空白组合 table(data$X1, data$X2, useNA = "ifany") - 调整事后检验参数
重新运行emmeans和pairs时加入na.rm = TRUE参数过滤空值,若存在空白组合可以将tukey替换为更适合非平衡设计的mvt校正方法:library(emmeans) # 估算边缘均值时过滤空值 post_hoc <- emmeans(model1, ~ X1*X2, na.rm = TRUE) # 先打印确认post_hoc无NA值 print(post_hoc) # 执行两两对比 pairs(post_hoc, adjust = "tukey", na.rm = TRUE)
如果修改后仍报错,可以在emmeans函数中加入参数lmer.df = "satterthwaite",避免自由度估算异常导致的空值问题。
内容的提问来源于stack exchange,提问作者Mendes Vinícius
相关产品推荐
相关产品推荐

