如何用emmeans可视化中断时间序列模型中T与D的交互效应
中断时间序列(ITS)模型中T与D交互效应的emmeans可视化方案
问题背景
你已构建包含T(时间)、D(干预)交互项的线性回归模型,控制了sex和race协变量,希望用emmeans包可视化T和D的交互效应,直观展示干预前后幸福感指数的水平变化与趋势变化。
实现步骤
1. 安装并加载必要包
若未安装emmeans,先执行安装命令:
install.packages("emmeans") library(emmeans)
2. 基于模型生成边际均值预测
用emmeans计算sex和race取平均水平时,不同D分组下Y随T变化的边际均值:
# 按D分组,计算Y随T的预测值,指定T的取值范围保证曲线平滑 emm <- emmeans(ts, ~ T | D, at = list(T = seq(0, 400, 10)))
3. 可视化交互效应
提供两种常用实现方式:
方式一:用emmeans内置函数快速绘图
emmip(ts, D ~ T, at = list(T = seq(0, 400, 10)), xlab = "Time (days)", ylab = "Wellbeing Index", main = "Interaction of Time and Swimming Intervention") # 添加干预标记线 abline(v = 200, col = "firebrick", lty = 2) text(200, max(predict(ts)), "Start of Swimming Classes", col = "firebrick", pos = 4)
- 自动生成两条拟合线,分别对应干预前(D=0)和干预后(D=1)的趋势
方式二:结合ggplot2自定义样式(更灵活)
若需个性化图形,先将emmeans结果转为数据框,再用ggplot2绘图:
library(ggplot2) # 转换emmeans结果为数据框 emm_df <- as.data.frame(emm) # 绘制带置信区间的交互效应图 ggplot(emm_df, aes(x = T, y = emmean, color = as.factor(D))) + geom_line(linewidth = 1.2) + geom_ribbon(aes(ymin = lower.CL, ymax = upper.CL, fill = as.factor(D)), alpha = 0.2) + labs(x = "Time (days)", y = "Wellbeing Index", color = "Swimming Intervention", fill = "Swimming Intervention", title = "Effect of Swimming Classes on Wellbeing Index") + scale_color_manual(values = c("0" = "gray", "1" = "blue")) + scale_fill_manual(values = c("0" = "gray", "1" = "blue")) + theme_bw() + # 添加干预标记线与说明文本 geom_vline(xintercept = 200, color = "firebrick", linetype = "dashed") + annotate("text", x = 220, y = max(emm_df$emmean), label = "Start of Swimming Classes", color = "firebrick")
- 加入置信区间,直观展示估计的不确定性
- 支持自定义颜色、主题等样式
4. 图形解读
- 两条线的垂直差距对应干预的即时水平变化(β2)
- 两条线的斜率差异对应干预后的趋势变化(β3)
- 干预线(v=200)明确划分干预前后的时间区间
内容的提问来源于stack exchange,提问作者Eagle Hawk
相关产品推荐
相关产品推荐

