计量经济学:RDD 断点回归设计与稳健性检验
1. 识别直觉
RDD 适用于处理变量在阈值处决定政策暴露的情形。
如果个体无法精确操纵阈值附近取值,那么阈值两侧足够接近的样本可近似看作随机分配。
2. 参数与模型
设运行变量为 $R_i$,阈值为 $c$,处理指示为 $D_i=\mathbf{1}(R_i\ge c)$。
局部平均处理效应(sharp RDD)为:
$$ \tau = \lim_{r\downarrow c} E[Y_i\mid R_i=r]-\lim_{r\uparrow c} E[Y_i\mid R_i=r] $$
实践中常用局部线性回归并加核权重:
$$ Y_i = \alpha + \tau D_i + \beta_1(R_i-c)+\beta_2 D_i(R_i-c)+u_i $$
3. Python 示例(局部线性 + 不同带宽)
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
def fit_local_rdd(df, y, running, cutoff, bw):
d = df.copy()
d = d[np.abs(d[running] - cutoff) <= bw].copy()
d["treat"] = (d[running] >= cutoff).astype(int)
d["r_centered"] = d[running] - cutoff
model = smf.ols(
f"{y} ~ treat + r_centered + treat:r_centered",
data=d,
).fit(cov_type="HC1")
return model.params["treat"], model.bse["treat"], len(d)
for bw in [2, 4, 6]:
tau, se, n = fit_local_rdd(df, y="outcome", running="score", cutoff=60, bw=bw)
print(f"bw={bw}, tau={tau:.4f}, se={se:.4f}, n={n}")
4. 关键诊断
- McCrary 密度检验:看阈值附近是否有人为操纵。
- 协变量连续性检验:预处理变量在阈值处不应突变。
- 带宽敏感性:不同带宽结果应方向一致。
- 多项式阶数稳健性:避免高阶多项式外推。
5. 实务结论写法
- 先交代阈值规则与制度背景。
- 报告主规格(数据驱动带宽)与替代规格(更窄/更宽带宽)。
- 报告图形证据(bin scatter + 局部拟合)与操纵检验。
RDD 的可信度来自“局部可比性 + 系统稳健性检验”,而不是一条显著系数。