如何用marginaleffects绘制双组含95%CI的单张群体预测图?
解决方案
要把CONTROL和INT两组的预测轨迹及置信区间放在同一张图里,核心是调整预测数据的生成方式,再用ggplot的分组映射替代分面,具体步骤如下:
1. 生成包含两组的群体水平预测数据
使用marginaleffects::predictions()时,明确指定要生成所有group水平在time_cont全范围内的预测值,同时通过re_formula = NA固定随机效应,得到群体水平的结果:
library(marginaleffects) library(tidyr) library(ggplot2) # 假设你的混合模型包含time_cont与group的交互项(适配轨迹比较需求) model <- lmer(outcome ~ time_cont * group + (1 + time_cont | subject), data = your_data) # 生成预测数据:crossing生成time_cont序列和group两个水平的所有组合 pred_data <- predictions( model, newdata = crossing( time_cont = seq(min(your_data$time_cont), max(your_data$time_cont), length.out = 100), group = c("CONTROL", "INT") ), re_formula = NA # 生成群体水平预测,忽略随机效应 )
2. 用ggplot绘制同图双组轨迹
不再使用facet_wrap,而是将group映射到颜色(或线型),同时用geom_ribbon绘制置信区间,geom_line绘制预测线:
ggplot(pred_data, aes(x = time_cont, y = estimate, color = group)) + # 绘制95%置信区间 geom_ribbon( aes(ymin = conf.low, ymax = conf.high, fill = group), alpha = 0.2, color = NA ) + # 绘制预测线 geom_line(linewidth = 1) + # 调整标签与主题 labs( x = "连续时间", y = "预测结果", color = "分组", fill = "分组" ) + theme_minimal()
关键说明
crossing()函数确保生成time_cont和group的全组合,让两组都有完整的预测序列re_formula = NA是混合模型生成群体水平预测的核心参数,避免随机效应带来的个体差异干扰- 用
color区分线条、fill区分置信区间填充色,搭配alpha调整透明度,避免区间遮挡线条
内容的提问来源于stack exchange,提问作者jtjtjtjt
相关产品推荐
相关产品推荐

