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

在R中使用Wald Test检验双重差分模型的平行趋势

用Wald检验验证DID平行趋势假设的方法与R代码

当然可以用Wald检验作为DID平行趋势假设的预检验——核心逻辑是检验政策前所有处理组-时间交互项的联合显著性:如果联合检验结果不显著(p值>0.05),就说明政策前处理组和控制组的趋势没有显著差异,满足平行趋势假设。

具体操作步骤

  1. 构造相对时间变量:把政策实施的年份设为基准点(rel_time=0),政策前的年份依次标记为-1(前1期)、-2(前2期)……-13(前13期)。
  2. 生成政策前交互项:为每个政策前的相对时间点生成treat × rel_time交互项(treat=1是处理组,0是控制组)。
  3. 回归与Wald检验:估计包含这些交互项、个体固定效应、时间固定效应的回归模型,然后用Wald检验验证所有政策前交互项的系数是否联合为0。

R代码实现(推荐用fixest包,高效且简洁)

假设你的数据集名为df,包含变量:treat(分组)、year(年份)、policy_year(政策实施年份)、y(被解释变量)、id(个体标识),还有可选的控制变量cov1/cov2等。

# 加载包
library(fixest)

# 1. 生成相对时间变量
df$rel_time <- df$year - df$policy_year

# 2. 估计包含所有相对时间交互项的固定效应模型
# ref=-1 表示以政策前1期为基准,避免多重共线性
model <- feols(
  y ~ i(rel_time, treat, ref = -1) | id + year,  # id是个体FE,year是时间FE
  data = df
)

# 3. 执行Wald检验:检验政策前13期到前2期的交互项系数联合为0
# 注意:如果基准是-1,那么-1的系数是基准,不需要检验
wald_result <- wald(
  model,
  "rel_time::(-13):treat = rel_time::(-12):treat = rel_time::(-11):treat = rel_time::(-10):treat = rel_time::(-9):treat = rel_time::(-8):treat = rel_time::(-7):treat = rel_time::(-6):treat = rel_time::(-5):treat = rel_time::(-4):treat = rel_time::(-3):treat = rel_time::(-2):treat = 0"
)

# 查看检验结果
print(wald_result)

替代方案(用lm+lmtest包)

如果你习惯用基础lm函数:

library(lmtest)

# 1. 生成相对时间变量
df$rel_time <- df$year - df$policy_year

# 2. 手动生成所有政策前的交互项
for (k in -13:-1) {
  df[[paste0("treat_rel_", k)]] <- df$treat * (df$rel_time == k)
}

# 3. 估计回归模型(控制个体和时间固定效应)
model_lm <- lm(
  y ~ treat_rel_-13 + treat_rel_-12 + treat_rel_-11 + treat_rel_-10 + treat_rel_-9 + treat_rel_-8 + treat_rel_-7 + treat_rel_-6 + treat_rel_-5 + treat_rel_-4 + treat_rel_-3 + treat_rel_-2 + treat_rel_-1 + factor(id) + factor(year),
  data = df
)

# 4. Wald检验:所有政策前交互项系数联合为0
wald_result_lm <- waldtest(
  model_lm,
  c("treat_rel_-13=0", "treat_rel_-12=0", "treat_rel_-11=0", "treat_rel_-10=0", "treat_rel_-9=0", "treat_rel_-8=0", "treat_rel_-7=0", "treat_rel_-6=0", "treat_rel_-5=0", "treat_rel_-4=0", "treat_rel_-3=0", "treat_rel_-2=0", "treat_rel_-1=0")
)

# 查看结果
print(wald_result_lm)

实用经验

  • 基准期选择:通常选政策前1期作为基准,既避免多重共线性,也能更清晰对比各期差异。
  • 可视化辅助:不要只依赖Wald检验,建议同时绘制平行趋势图(用fixest的iplot()函数),直观展示政策前两组的趋势走向,和统计检验结果互相印证。
  • 若检验显著:如果Wald检验p值<0.05,说明平行趋势不满足,可考虑使用合成控制法、匹配DID,或加入个体-时间趋势交互项来修正模型。

内容的提问来源于stack exchange,提问作者j.rahilly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:35:36