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

如何在R的ggplot中为双重差分研究实现中心日期可变窗口绘图?

实现DID图表的日期窗口控制(ggplot版)

核心思路

先将原始日期转换为相对中心日期的天数(中心日期标记为0,前n天为-n,后n天为n),再通过函数参数筛选指定窗口内的数据,最后用ggplot完成绘图。

具体步骤与代码示例

1. 数据预处理:生成相对时间变量

假设你的数据集包含date(原始日期)、group(处理/对照组)、value(观测指标)三列,先定义中心日期,再计算每条记录的相对时间:

# 构造模拟DID数据
set.seed(123)
df <- data.frame(
  date = seq(as.Date("2023-01-01"), as.Date("2023-01-10"), by = "day"),
  group = rep(c("处理组", "对照组"), each = 5),
  value = rnorm(10, mean = 10, sd = 2)
)

# 指定中心日期(比如政策实施日期)
center_date <- as.Date("2023-01-06")

# 生成相对时间:相对于中心日期的天数差
df$relative_day <- as.numeric(df$date - center_date)

2. 编写带窗口参数的绘图函数

函数接受数据集、中心日期、窗口宽度三个核心参数,内部自动完成数据筛选与绘图:

plot_did_window <- function(data, center_date, window_width) {
  # 计算相对时间
  data$relative_day <- as.numeric(data$date - center_date)
  
  # 筛选指定窗口内的数据(包含边界值)
  filtered_data <- data[data$relative_day >= -window_width & data$relative_day <= window_width, ]
  
  # ggplot绘图
  ggplot(filtered_data, aes(x = relative_day, y = value, color = group)) +
    geom_line(linewidth = 1) +
    geom_point(size = 2) +
    # 添加中心日期虚线,突出政策时点
    geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
    # 自定义标签,明确时间窗口范围
    labs(
      x = paste0("相对中心日期的天数(-", window_width, "到", window_width, ")"),
      y = "观测指标",
      color = "组别",
      title = "DID趋势图(指定时间窗口)"
    ) +
    theme_minimal() +
    # 强制x轴显示整数刻度,提升可读性
    scale_x_continuous(breaks = seq(-window_width, window_width, by = 1))
}

3. 调用函数生成目标图表

比如输入窗口宽度为2,即可展示中心日期前2天到后2天的数据:

plot_did_window(df, center_date = as.Date("2023-01-06"), window_width = 2)

关键细节说明

  • 相对时间计算:用as.numeric(date - center_date)直接得到天数差,避免复杂的日期格式转换。
  • 窗口筛选:通过简单的数值范围判断精准截取目标区间,逻辑清晰不易出错。
  • 可视化优化:添加中心日期虚线、设置整数刻度,让DID的政策时点对比更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:32:25