R语言lme4包lmer模型调用printCoefmat函数报错原因排查
报错原因
你调用的$tTable是nlme包中lme()模型拟合后summary结果的系数矩阵专属字段,而你当前使用的是lme4包的lmer()函数,其返回的summary结果中不存在tTable这个元素,因此summary(model2)$tTable的结果为NULL,传入printCoefmat()时不符合"系数矩阵/数据框"的输入要求,触发报错。
额外说明:默认情况下lme4::lmer的summary结果的系数矩阵$coefficients仅包含估计值、标准误、t值三列,没有p值列,直接调用printCoefmat开启P.values参数也无法输出p值。
解决方法
方案1:使用lmerTest包获得带p值的系数表(最简便)
lmerTest包完全兼容lme4的语法,拟合模型后会自动在系数表中补充基于Satterthwaite法计算的p值,代码示例如下:
# 未安装包先运行 install.packages("lmerTest") library(lmerTest) # 拟合模型,语法和lme4的lmer完全一致 model2 <- lmer(metric ~ treatment + (1 | participant), data = data_metrics) # 调用正确的系数矩阵字段打印 printCoefmat(summary(model2)$coefficients, has.Pvalue = TRUE, P.values = TRUE)
方案2:仍使用lme4包,手动获取系数矩阵
如果你不需要p值,或者要自行计算p值,可以直接提取lme4默认的系数矩阵:
# 直接打印默认的三列系数表 printCoefmat(summary(model2)$coefficients) # 如果需要p值,可配合car包的Anova函数输出检验结果 library(car) Anova(model2, test.statistic = "F")
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

