如何用ggplot绘制带95% CI误差棒的二项式广义混合效应模型图?
二项式广义混合效应模型的ggplot可视化指导
需求概述
基于已拟合的二项式广义混合效应模型(用于预测出勤情况),使用ggplot绘制区分男女群体的拟合曲线,并为两组分别添加95%置信区间,体现Day的影响及Sex:Day交互效应。
模型与数据基础
已拟合的模型代码如下:
library(lme4) data <- read.csv("test2.csv") m1 <- glmer( Attendance ~ Day + Sex + Sex:Day + (1|AgeClass) + (1|Year) + (1|Plastic), data = data, family = binomial(link = "logit") )
- 核心自变量:Day(取值-30至-2,以Day 0为参照)、Sex(M/F)、Sex:Day交互项
- 随机效应:AgeClass(幼、中、老年)、Year(2014-2018年)、Plastic(个体ID,用于校正重复测量样本)
可视化方向建议
1. 构建预测数据集
- 使用
expand.grid()生成包含所有关键自变量组合的数据集:固定Day为-30到-2的连续序列,Sex包含M和F两类;若仅需展示群体水平趋势(忽略随机效应变异),可将随机效应变量设为典型值(如均值或某一类),后续预测时控制随机效应。
2. 计算预测值与置信区间
推荐两种常用方式:
- 方式一:使用
emmeans包(更便捷的边际均值计算)- 用
emmeans(m1, ~ Day * Sex, type = "response")计算Day与Sex组合下的边际预测概率(自动转换为响应尺度,即概率) - 再用
confint()获取95%置信区间,直接得到每个组合的预测值、上下限
- 用
- 方式二:使用
predict函数- 调用
predict(m1, newdata = 你的预测数据集, type = "response", se.fit = TRUE, re.form = ~0),其中re.form = ~0表示忽略随机效应,只计算固定效应的预测;若要包含随机效应,可调整该参数 - 利用标准误计算95%置信区间:
上限 = 预测值 + 1.96*标准误,下限 = 预测值 - 1.96*标准误(注意概率尺度下需确保区间在0-1范围内)
- 调用
3. ggplot绘图实现
- 初始化绘图:以预测数据集的
Day为x轴,预测概率为y轴,按Sex设置分组颜色或线型 - 绘制拟合曲线:用
geom_line(),对应示例图中的实线 - 添加置信区间:
- 若要填充区间:用
geom_ribbon(),指定ymin和ymax为置信区间上下限,设置透明度(如alpha=0.2) - 若要像示例图那样用上下虚线:分别对置信区间上限和下限调用
geom_line(),设置linetype = "dashed"
- 若要填充区间:用
- 可选:叠加原始数据点:用
geom_jitter()(避免二分类数据点重叠),设置透明度以展示数据分布
关键工具函数参考
- 数据集生成:
expand.grid() - 预测计算:
emmeans::emmeans()、emmeans::confint()、lme4::predict.merMod() - ggplot图层:
ggplot()、geom_line()、geom_ribbon()、geom_jitter()
内容的提问来源于stack exchange,提问作者NeedHelpWithR
相关产品推荐
相关产品推荐

