You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中绘制展示年度处理组与对照组差异的事件研究图?

在R中绘制事件研究图(Event Study Plot)的方法

基于你提供的数据集,我们可以通过数据预处理计算相对事件时间,再用ggplot2绘制带置信区间的事件研究图,展示处理组与对照组的年度结果差异,匹配目标图的样式(横轴为事件前后相对年度,纵轴为组间差异,带误差棒的点线图)。

1. 数据预处理

首先将日期转换为以2015年(事件发生年)为基准的相对年份,再分组计算组间差异及置信区间:

library(tidyverse)
library(lubridate)

# 加载你提供的数据集
groups <- c("A", "B", "C", "D", "E")
data <- tibble(id=1:10000,
               date=sample(seq(as.Date("2006-01-01"), 
                               as.Date("2019-01-01"), by="day"),
                           10000, replace = T),
               group=sample(groups, 10000, replace=T),
               treat=ifelse(group %in% c("A", "B"), 1, 0),
               after=ifelse(date>as.Date("2015-05-01"), 1, 0),
               results=rnorm(10000)+ifelse(treat*after==1, 0.2, 0)
)

# 计算相对事件年份:以2015年为事件基准年
event_year <- 2015
data <- data %>%
  mutate(year = year(date),
         rel_year = year - event_year) %>%
  # 过滤数据范围,只保留事件前后合理年份
  filter(rel_year %in% -9:4)

# 按相对年份、处理组计算结果的均值、标准误和置信区间
summary_stats <- data %>%
  group_by(rel_year, treat) %>%
  summarise(
    mean_res = mean(results),
    se = sd(results)/sqrt(n()),
    lower_ci = mean_res - 1.96*se,
    upper_ci = mean_res + 1.96*se
  ) %>%
  ungroup()

# 计算处理组与对照组的结果差异及差异的置信区间
diff_stats <- summary_stats %>%
  pivot_wider(
    names_from = treat,
    values_from = c(mean_res, lower_ci, upper_ci)
  ) %>%
  mutate(
    diff = mean_res_1 - mean_res_0,
    diff_lower = lower_ci_1 - upper_ci_0,
    diff_upper = upper_ci_1 - lower_ci_0
  )

2. 绘制事件研究图

使用ggplot2绘制带置信区间的点线图,标记事件发生时间:

ggplot(diff_stats, aes(x = rel_year, y = diff)) +
  # 绘制95%置信区间误差棒
  geom_errorbar(aes(ymin = diff_lower, ymax = diff_upper), width = 0.2, color = "#333333") +
  # 绘制数据点和连接线
  geom_point(size = 2.5, color = "#1f77b4") +
  geom_line(color = "#1f77b4", linewidth = 1) +
  # 添加事件发生时间的垂直虚线
  geom_vline(xintercept = 0, linetype = "dashed", color = "#ff7f0e", linewidth = 1) +
  # 自定义横轴标签,明确事件前后年份
  scale_x_continuous(
    breaks = unique(diff_stats$rel_year),
    labels = paste0(ifelse(unique(diff_stats$rel_year) < 0, "前", "后"), abs(unique(diff_stats$rel_year)), "年")
  ) +
  # 设置坐标轴与标题
  labs(
    x = "相对事件时间",
    y = "处理组与对照组结果差异",
    title = "事件研究图:处理效应年度变化"
  ) +
  # 优化主题样式
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10)
  )

图说明

  • 橙色虚线标记事件发生时间(2015年)
  • 蓝色点线代表处理组与对照组的年度结果差异
  • 黑色误差棒为95%置信区间,展示差异的统计显著性

内容的提问来源于stack exchange,提问作者Ajern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:12:43