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

基于长格式填补面板数据的匹配以开展双重差分(DiD)分析

长格式多重填补数据集的PSM+DiD处理方案

核心思路

PSM是基于个体基线特征的匹配,只需用每个ID的基线(t1)行计算倾向得分、完成匹配,之后保留匹配ID对应的所有时间点(t1/t2/t3)记录,就能用于DiD分析。针对mice生成的多重填补数据集,需对每个填补样本重复该流程。

具体步骤(R代码示例)

假设你的多重填补数据集是imputed_data(mids对象),长格式包含列:ID, time(取值t1/t2/t3), treat(处理组标识,t1时确定), 基线协变量(如age, gender, baseline_score), 结局变量(如outcome)。

1. 提取每个填补样本的个体基线信息(宽格式)

从长格式填补数据中筛选t1行,得到个体层面的匹配数据集:

library(mice)
library(dplyr)
library(MatchThem)

# 从单个填补数据中提取基线行
extract_baseline <- function(data) {
  data %>%
    filter(time == "t1") # 替换为你的基线时间标识,比如1
    select(ID, treat, age, gender, baseline_score) # 保留ID、处理变量和所有基线协变量
}

# 对所有填补样本应用函数,转换为mids对象
imputed_baseline <- lapply(complete(imputed_data, "all"), extract_baseline)
imputed_baseline <- as.mids(imputed_baseline)

2. 用MatchThem完成个体层面PSM

和宽格式处理逻辑一致,基于基线协变量匹配处理组与对照组:

# 执行1:1近邻匹配(可根据需求调整参数)
matched_baseline <- matchthem(
  treat ~ age + gender + baseline_score,
  data = imputed_baseline,
  approach = "nearest",
  ratio = 1,
  replace = FALSE
)

# 检查匹配平衡性(可选,在个体层面验证)
summary(matched_baseline, type = "balance")

3. 将匹配结果映射回长格式数据集

提取匹配后的ID列表,回到原长格式填补数据中筛选对应所有行:

# 从匹配后的基线数据中筛选长格式全量记录
get_matched_long <- function(long_data, matched_baseline_data) {
  matched_ids <- matched_baseline_data$ID
  long_data %>% filter(ID %in% matched_ids)
}

# 对每个填补样本执行映射
matched_long_list <- mapply(
  get_matched_long,
  long_data = complete(imputed_data, "all"),
  matched_baseline_data = complete(matched_baseline, "all"),
  SIMPLIFY = FALSE
)

# 转换为mids对象,方便后续分析
matched_long_imputed <- as.mids(matched_long_list)

4. 在匹配后的长格式数据上做DiD分析

用固定效应模型拟合DiD,合并多重填补的结果:

library(fixest)

# 定义DiD模型函数
fit_did <- function(data) {
  feols(outcome ~ treat * i(time, ref = "t1") | ID, data = data)
}

# 对所有匹配后的填补样本拟合模型
did_models <- lapply(complete(matched_long_imputed, "all"), fit_did)

# 合并多重填补结果
pooled_results <- pool(did_models)
summary(pooled_results)

关键注意事项

  • 处理变量treat必须是基线时确定的固定变量,不能随时间变化,否则PSM逻辑不成立。
  • 匹配平衡性检查需在个体层面的基线数据上完成,而非长格式数据。
  • 多重填补的每个样本需独立完成匹配与DiD,最后用pool()合并结果,符合多重填补的统计推断要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:43:19