causal_inference_tutorial

第七章:断点回归设计

断点回归设计(Regression Discontinuity Design, RDD)是因果推断中最接近随机实验的准实验方法之一。当处理分配基于某个连续变量是否超过特定阈值时,RDD利用阈值附近个体的”准随机”分配来识别因果效应。这种方法在政策评估、教育研究和商业决策中有着广泛应用,因为许多实际决策规则都基于明确的阈值标准。

本章将系统介绍RDD的理论基础、实施方法和实践应用。我们将学习如何在精确和模糊的处理分配场景下应用RDD,掌握带宽选择和稳健性检验的关键技术,并通过实际案例理解RDD的优势与局限。

7.1 精确断点回归(Sharp RDD)

7.1.1 基本设定

精确断点回归适用于处理完全由运行变量(running variable)决定的情况。设 $X_i$ 为运行变量,$c$ 为断点(cutoff),处理分配规则为:

\[D_i = \mathbb{1}(X_i \geq c)\]

其中 $D_i$ 是处理指示变量。在断点附近,我们可以将因果效应识别为:

\[\tau_{RDD} = \lim_{x \downarrow c} E[Y_i | X_i = x] - \lim_{x \uparrow c} E[Y_i | X_i = x]\]

7.1.2 识别假设

Sharp RDD的关键识别假设包括:

  1. 连续性假设:潜在结果的条件期望在断点处连续 \(E[Y_i(0) | X_i = c^+] = E[Y_i(0) | X_i = c^-]\)

  2. 局部随机化:在断点附近,个体无法精确操纵运行变量

  3. 单调性:处理分配在断点处严格变化

运行变量分布图示:
     |
  密  |    。。。
  度  |  。    。
     |。        。
     |。          。。
     |____________。___
            c    断点

7.1.3 局部线性回归估计

实践中,我们通常使用局部线性回归来估计RDD效应:

\[Y_i = \alpha + \tau D_i + \beta_1 (X_i - c) + \beta_2 D_i \cdot (X_i - c) + \epsilon_i\]
其中样本限制在带宽 $h$ 内:$ X_i - c \leq h$

这种方法允许断点两侧有不同的斜率,更灵活地拟合数据。

7.1.4 图形分析的重要性

RDD分析的第一步应该是图形检验:

  1. 结果变量在断点处的跳跃
  2. 运行变量的密度检验(McCrary检验)
  3. 协变量的平衡性检验

良好的RDD图形应该显示:

7.2 模糊断点回归(Fuzzy RDD)

7.2.1 不完全遵从的处理

在现实中,并非所有个体都严格遵循断点规则。模糊RDD处理这种不完全遵从的情况:

\[P(D_i = 1 | X_i = c^+) - P(D_i = 1 | X_i = c^-) = \pi < 1\]

其中 $\pi$ 是断点处处理概率的跳跃。

7.2.2 作为工具变量的RDD

模糊RDD可以理解为使用断点指示作为工具变量:

第一阶段: \(D_i = \gamma_0 + \gamma_1 Z_i + \gamma_2 (X_i - c) + \gamma_3 Z_i \cdot (X_i - c) + \nu_i\)

第二阶段: \(Y_i = \alpha + \tau \hat{D}_i + \beta_1 (X_i - c) + \beta_2 Z_i \cdot (X_i - c) + \epsilon_i\)

其中 $Z_i = \mathbb{1}(X_i \geq c)$ 是工具变量。

7.2.3 识别与解释

模糊RDD识别的是局部平均处理效应(LATE):

\[\tau_{Fuzzy} = \frac{\lim_{x \downarrow c} E[Y_i | X_i = x] - \lim_{x \uparrow c} E[Y_i | X_i = x]}{\lim_{x \downarrow c} E[D_i | X_i = x] - \lim_{x \uparrow c} E[D_i | X_i = x]}\]

这个效应仅对”遵从者”(compliers)有效——即那些因为超过断点而接受处理的个体。

7.3 带宽选择与稳健性检验

7.3.1 最优带宽选择

带宽选择涉及偏差-方差权衡:

  1. MSE最优带宽(Imbens-Kalyanaraman): \(h_{IK} = \left( \frac{2\sigma^2(c)}{f(c) \cdot (m_+''(c) - m_-''(c))^2} \right)^{1/5} \cdot n^{-1/5}\)

  2. 覆盖误差率最优带宽(Calonico-Cattaneo-Titiunik): 考虑有限样本偏差修正,提供更准确的置信区间

  3. 交叉验证方法: 通过留一交叉验证选择预测误差最小的带宽

7.3.2 稳健性检验清单

  1. 带宽敏感性分析
    • 使用多个带宽(如0.5h, h, 1.5h, 2h)
    • 绘制不同带宽下的估计值
  2. 多项式阶数检验
    • 比较线性、二次、三次多项式
    • 检查高阶项的显著性
  3. 安慰剂检验
    • 在非断点处进行RDD分析
    • 检验预定协变量的跳跃
  4. 甜甜圈RDD
    • 排除断点附近的观测值
    • 检验对可能操纵的稳健性

7.3.3 操纵检验

检验运行变量是否被操纵是RDD有效性的关键:

  1. 密度检验(McCrary Test) \(\hat{\theta} = \ln \hat{f}_+ - \ln \hat{f}_-\) 其中 $\hat{f}+$ 和 $\hat{f}-$ 是断点两侧的密度估计

  2. 协变量平衡检验 对预定协变量进行RDD分析,检验是否存在显著跳跃

  3. 排序检验 检查运行变量的分布是否存在异常模式

7.4 应用案例分析

7.4.1 教育政策评估:高考录取线的因果效应

考虑使用RDD评估重点大学录取对学生未来收入的影响:

设定

分析步骤

  1. 图形检验
    收入(万元)
      40 |       。。
         |     。  。
      30 |   。    |。
         | 。      | 。
      20 |。       |  。
         |________|____。
          580  600  620
             高考分数
    
  2. 局部线性回归 在带宽 $h = 20$ 分内估计: \(\tau_{RDD} = 8.5万元 \quad (SE = 2.1)\)

  3. 稳健性检验
    • 不同带宽:$h \in [10, 30]$,效应稳定在7-10万元
    • 密度检验:$p = 0.43$,无操纵证据
    • 协变量平衡:家庭背景、性别等无显著跳跃

7.4.2 选举研究:在职优势

研究现任者在选举中的优势:

设定

关键发现

  1. 勉强当选的候选人vs勉强落选的候选人几乎相同
  2. 现任者优势约为8个百分点
  3. 效应在不同政党、地区间存在异质性

7.5 行业案例:拼多多用户等级制度的效果分析

背景

拼多多实施了基于累计消费金额的用户等级制度,不同等级享受不同的优惠和服务。我们使用RDD评估升级到”黄金会员”(消费满1000元)对用户后续消费行为的影响。

数据与设定

分析过程

  1. 初步图形分析
    后续消费(元)
      500 |        。。
          |      。  。
      400 |    。    |。
          |  。      | 。。
      300 |。        |    。
          |_________|_____。
           900   1000   1100
           累计消费金额(元)
    
  2. Sharp RDD估计 由于会员升级是自动的,这是一个精确断点设计:

    \[Y_i = 320 + 85 \cdot D_i + 0.12(X_i - 1000) + 0.05 \cdot D_i(X_i - 1000)\]

    效应估计:$\tau = 85$元($SE = 18$)

  3. 机制分析 通过分析不同结果变量:
    • 购买频次增加:$\Delta f = 2.3$次/月
    • 客单价提升:$\Delta p = 12$元
    • 品类扩展:新品类购买概率提升15%

业务洞察

  1. 即时效应vs持续效应
    • 短期(7天):效应最强,增量150元
    • 中期(30天):稳定在85元
    • 长期(90天):衰减至40元
  2. 异质性分析
    • 价格敏感用户:效应更强(120元)
    • 高频用户:效应较弱(50元)
    • 新用户vs老用户:新用户响应更积极
  3. 策略优化建议
    • 动态调整门槛:基于用户特征个性化
    • 分级激励:多个断点形成递进激励
    • 配合营销活动:在断点附近推送优惠

实施挑战与解决方案

  1. 操纵问题
    • 发现:临近1000元的订单异常增多
    • 解决:采用甜甜圈RDD,排除995-1005元区间
  2. 溢出效应
    • 问题:用户可能延迟消费等待升级
    • 处理:分析断点前的消费模式变化
  3. 多重断点
    • 挑战:银牌(500)、金牌(1000)、钻石(2000)多个等级
    • 方法:分别估计各断点效应,注意样本重叠

7.6 本章小结

断点回归设计是因果推断工具箱中的有力武器,特别适用于基于明确规则的政策评估。本章的关键要点:

核心概念

  1. RDD的识别策略
    • 利用断点处的局部随机化
    • 连续性假设是关键
    • 图形分析先于统计分析
  2. 两种RDD类型
    • Sharp RDD:处理完全由断点决定,$D_i = \mathbb{1}(X_i \geq c)$
    • Fuzzy RDD:断点影响处理概率,需要IV方法
  3. 估计方法
    • 局部线性回归:$Y_i = \alpha + \tau D_i + \beta_1(X_i-c) + \beta_2 D_i(X_i-c) + \epsilon_i$
    • 带宽选择的偏差-方差权衡
    • 稳健性检验的系统方法

关键公式汇总

实践要点

  1. 分析流程:图形检验 → 主分析 → 稳健性检验 → 机制探索
  2. 有效性检验:密度检验、协变量平衡、安慰剂测试
  3. 常见应用:政策阈值、考试分数线、年龄限制、地理边界

RDD的优势在于其准实验性质和结果的可信度,但也要注意其局限性:仅识别局部效应、需要大样本、易受操纵影响。掌握RDD不仅需要理解统计方法,更需要对制度背景的深入了解。

7.7 练习题

基础题

练习7.1 判断以下场景是否适合使用RDD分析,如果适合,指出运行变量和断点: a) 评估最低工资法对就业的影响 b) 分析优惠券(满100减20)对消费的影响
c) 研究退休(65岁)对健康的影响 d) 评估随机分配的培训项目效果

提示 考虑是否存在明确的分配规则和断点。
答案 a) 不太适合 - 最低工资通常全面实施,缺少明确的断点 b) 适合 - 运行变量:消费金额,断点:100元 c) 适合 - 运行变量:年龄,断点:65岁 d) 不适合 - 随机分配不需要RDD,应使用简单比较

练习7.2 某公司规定月销售额达到50万的销售员可获得额外奖金。数据显示:

这7万的差异能否解释为奖金的因果效应?需要检验什么?

提示 考虑RDD的关键假设和可能的违反情况。
答案 不能直接解释为因果效应。需要检验: 1. 密度检验:50万处是否有异常堆积(操纵) 2. 协变量平衡:员工特征在断点处是否连续 3. 带宽选择:使用更窄的带宽重新估计 4. 时间趋势:检查断点实施前是否存在类似跳跃 关键担忧:销售员可能操纵销售额刚好达到50万。

练习7.3 使用以下RDD回归结果,计算处理效应:

Y = 50 + 20D + 2(X-c) + 3D(X-c), 带宽h=10

其中D是处理指示变量,c是断点。

提示 在断点处,(X-c) = 0。
答案 处理效应 τ = 20 解释:在断点c处,(X-c) = 0,因此: - 控制组(D=0):E[Y|X=c-] = 50 - 处理组(D=1):E[Y|X=c+] = 50 + 20 = 70 - 因果效应:τ = 70 - 50 = 20

挑战题

练习7.4 某在线教育平台发现,学习时长超过100小时的用户可获得”认证学员”标识。你想评估这个标识对用户完课率的影响。设计一个完整的RDD分析方案,包括: a) 可能的威胁和解决方案 b) 需要进行的稳健性检验 c) 如何解释结果的局限性

提示 考虑用户行为的内生性和标识的信号价值。
答案 **分析方案**: a) 可能的威胁和解决方案: - 操纵:用户可能刷课时 → 检查99-101小时密度分布 - 选择性:主动学习者更易超过100小时 → 使用窄带宽 - 混杂时间趋势:平台同时推出其他激励 → 检查政策实施时间 b) 稳健性检验: - 多带宽分析:h ∈ [5, 20]小时 - 甜甜圈RDD:排除98-102小时 - 安慰剂检验:在80、120小时测试 - 协变量检验:用户特征(年龄、教育)的连续性 c) 结果局限性: - LATE:仅对100小时附近用户有效 - 外部效度:不能推广到所有用户 - 机制不明:可能是动机效应或信号效应 - 短期vs长期:需追踪长期影响

练习7.5 你在分析某电商平台的会员制度(消费满1000元自动升级),发现:

请解释: a) 为什么会出现Fuzzy RDD的情况? b) 两个估计值差异的含义 c) 哪个更适合政策制定?

提示 考虑处理分配的不完美遵从和不同人群的异质性。
答案 a) Fuzzy RDD的原因: - 系统延迟:达到1000元后升级有延迟 - 用户认知:部分用户不知道已升级 - 账户问题:某些账户类型不参与升级 b) 估计值差异的含义: - Sharp RDD = 100:意向处理效应(ITT) - Fuzzy RDD = 150:对实际升级者的效应(LATE) - 比例:升级率 = 100/150 = 67% - 解释:1/3的符合条件用户未实际"接受处理" c) 政策制定考虑: - 评估现有制度:用Sharp RDD(实际影响) - 优化制度设计:用Fuzzy RDD(潜在影响) - 成本效益分析:考虑提高升级率的成本vs收益 - 建议:解决技术问题提高自动升级率,可增加50%效果

练习7.6 设计一个利用地理断点的RDD研究。要求:

提示 考虑行政边界、政策区域、自然边界等。
答案 **研究设计:评估经济特区政策对企业生产率的影响** **研究问题**: 深圳前海自贸区的优惠政策是否提高了区内企业生产率? **识别策略**: - 运行变量:企业到边界的距离(负值表示区外) - 断点:边界(距离=0) - 处理:享受税收优惠、简化审批等政策 - 结果:全要素生产率(TFP) **RDD设定**: $$TFP_i = \alpha + \tau \cdot Inside_i + f(distance_i) + \epsilon_i$$ **关键假设检验**: 1. 企业选址的准随机性(边界附近) 2. 其他特征的连续性 **可能的挑战**: 1. **空间溢出效应** - 问题:区外企业可能受益于邻近效应 - 解决:估计不同距离的异质性效应 2. **选择性迁移** - 问题:高生产率企业可能迁入区内 - 解决:使用政策实施前就存在的企业 3. **多维度距离** - 问题:不规则边界导致距离定义困难 - 解决:使用最短欧氏距离或分段分析 4. **混合政策** - 问题:特区可能有多项政策同时实施 - 解决:识别总效应,通过异质性分析分解 **预期贡献**: - 提供特区政策效果的因果证据 - 指导优惠政策的空间设计 - 评估政策扩展的潜在收益

练习7.7 某研究使用RDD评估大学录取(分数线600分)对收入的影响,发现:

如何解释这个结果?应该报告哪个估计?

提示 考虑偏差-方差权衡和样本量的影响。
答案 **结果解释**: 1. **效应递增的原因**: - 偏差减少:窄带宽降低了函数形式误设的偏差 - 局部性增强:更接近断点的比较更可信 - 可能存在异质性:断点附近效应确实更大 2. **显著性变化**: - 样本量减少:5分带宽样本太少,标准误增大 - 统计功效不足:真实效应可能存在但检测不到 3. **报告策略**: - 主结果:报告10分带宽(平衡偏差和方差) - 稳健性:展示多个带宽的结果 - 最优带宽:使用IK或CCT方法计算 **建议的报告方式**: "使用最优带宽(IK方法,h*=11.5分)估计,大学录取使毕业生年收入增加11.2万元(SE=3.1,p<0.01)。稳健性检验显示,在合理带宽范围内(8-15分),效应稳定在10-13万元之间。" **额外考虑**: - 检查协变量平衡性在不同带宽下的表现 - 进行安慰剂检验验证5分带宽的结果 - 考虑使用局部二次多项式提高精度

7.8 常见陷阱与错误

1. 操纵运行变量

陷阱:忽视个体可能精确控制运行变量越过断点

症状

调试技巧

检查清单:
□ McCrary密度检验 p > 0.10
□ 协变量平衡检验全部通过
□ 甜甜圈RDD结果稳定
□ 检查制度细节是否允许操纵

案例:学生可能通过补考刚好达到60分及格线

2. 带宽选择偏差

陷阱:尝试多个带宽后只报告显著的结果

正确做法

  1. 先确定最优带宽(IK或CCT方法)
  2. 报告主要结果
  3. 展示带宽敏感性分析
  4. 预先注册分析计划

示例代码逻辑

主分析:h* = optimal_bandwidth()
稳健性:[0.5h*, 0.75h*, h*, 1.25h*, 1.5h*]

3. 忽视模糊断点

陷阱:假设所有RDD都是精确的

识别方法

后果:Sharp RDD用于Fuzzy情况会低估真实效应

4. 错误的函数形式

陷阱:全局高阶多项式可能产生误导性结果

建议

5. 外推过度

陷阱:将断点处的LATE解释为ATE

正确理解

6. 多重断点处理不当

陷阱:存在多个断点时分析混乱

解决方案

  1. 分别分析每个断点
  2. 注意样本重叠问题
  3. 检查不同断点间的干扰
  4. 考虑使用不同运行变量

7. 时间混淆

陷阱:断点实施时间与其他政策变化重合

检验方法

8. 协变量使用错误

陷阱:控制受处理影响的协变量

原则

7.9 最佳实践检查清单

设计阶段

实施阶段

报告阶段

进阶考虑

常用诊断代码框架

# 1. 密度检验
density_test = mccrary_test(running_var, cutoff)

# 2. 协变量平衡
for covariate in predetermined_vars:
    balance_test = rdd_estimate(covariate ~ running_var)
    
# 3. 带宽选择
h_ik = ik_bandwidth(Y, X, cutoff)
h_cct = cct_bandwidth(Y, X, cutoff)

# 4. 敏感性分析
bandwidths = [0.5*h, 0.75*h, h, 1.25*h, 1.5*h]
results = [rdd_estimate(Y, X, c, bw) for bw in bandwidths]

# 5. 图形输出
plot_rdd(Y, X, cutoff, bandwidth=h, nbins=20)

记住:RDD的可信度很大程度上依赖于制度细节的理解和图形证据的说服力,而非复杂的计量技术。