为何sjPlot的tab_model()与Anova()输出的LMM p值不一致?
LMM中tab_model与Anova() p值不匹配的解决方法
核心原因分析
你的问题大概率来自以下两种差异:
- 检验对象不同:
car::Anova()默认输出固定效应的整体联合检验p值(比如多分类因子的整体显著性);而tab_model()默认输出单个参数的Wald检验p值(比如因子每个水平相对于参照组的显著性)。这是最常见的不一致原因。
- 检验方法与参数设置差异:
- 两者默认的检验统计量、自由度近似方法、平方和类型可能不同:
Anova()默认用Type II平方和的卡方/F检验,而tab_model()默认用Wald z/t检验,即使指定df.method,统计量的计算逻辑仍可能存在差异。
- 两者默认的检验统计量、自由度近似方法、平方和类型可能不同:
具体解决步骤
1. 统一检验对象:让tab_model输出整体效应p值
如果Anova()的显著结果是针对某个多分类因子的整体效应,在tab_model()中添加test = "anova"参数,切换到整体效应检验模式,与Anova()的输出对齐:
tab_model(my_lmm, seed = 42, show.se = TRUE, show.stat = FALSE, show.intercept = FALSE, show.df = FALSE, show.re.var = FALSE, show.icc = TRUE, show.obs = FALSE, p.style = "scientific", p.threshold = c(0.05), p.adjust = NULL, df.method = "satterthwaite", digits = 6, digits.p = 3, test = "anova") # 关键参数:输出整体效应的ANOVA p值
2. 统一检验方法与参数设置
如果是单个参数的p值不一致,需要让两者的检验逻辑完全对齐:
- 对
Anova()显式指定平方和类型、检验统计量和自由度近似方法:# 使用Type II平方和、Satterthwaite近似的F检验,与tab_model的df.method匹配 car::Anova(my_lmm, type = "II", test.statistic = "F", df.method = "satterthwaite") - 确保
tab_model()的df.method与Anova()一致,同时关闭p值校正(你已经设置p.adjust = NULL,这一步没问题)。
3. 手动验证统计量
如果仍有差异,可以手动计算单个参数的检验统计量验证:
- 从
summary(my_lmm)中提取固定效应的估计值和标准误,计算t值(估计值/标准误); - 用
pt()函数结合Satterthwaite自由度计算p值,对比tab_model()和Anova()的结果,定位差异来源。
内容的提问来源于stack exchange,提问作者Merle
相关产品推荐
相关产品推荐

