1. 断点回归RDD基础概念断点回归设计Regression Discontinuity Design, RDD是因果推断中的黄金标准之一。它的核心思想是利用政策或规则中存在的明确分界线比如奖学金分数线、贫困县划分标准比较分界线两侧邻近个体的结果差异。举个例子假设大学奖学金发放以高考分数600分为界限那么考了599分和601分的两个学生实际能力可能非常接近但奖学金待遇截然不同——这种设计巧妙模拟了随机实验的场景。RDD分为两种主要类型清晰断点Sharp RDD处理状态完全由驱动变量决定如分数≥600必获奖学金模糊断点Fuzzy RDD处理概率在断点处跃升但不完全确定如分数达标后获奖概率从20%提升到80%我在分析教育政策效果时曾遇到一个典型案例某省重点高中录取线为550分。通过比较549分和551分学生的大学升学率就能有效控制学生基础能力的差异因为这两组学生在分数线附近的初始水平应该是相似的。这就是RDD的魅力所在——它不需要控制所有混杂变量而是通过断点附近近似随机的特性实现因果识别。2. Stata实战准备2.1 数据模拟与可视化先模拟一份包含4000个观测值的教育政策评估数据clear all set obs 4000 set seed 123 gen score runiform()*100 500 // 模拟高考分数500-600分 gen centered_score score - 550 // 中心化处理断点550分 gen noise rnormal()*5 // 随机噪声 gen parental_income rnormal()*2 3 // 模拟家庭收入 gen treatment (score 550) // 处理变量达线1 gen college_admission 50 0.3*score 15*treatment 0.5*parental_income noise用rdplot进行初步可视化ssc install rdrobust, replace // 安装必要包 rdplot college_admission centered_score, c(0) p(1) // 线性拟合 graph export rdplot_linear.png, replace这个命令会生成带局部线性拟合线的散点图我建议重点关注断点处的跳跃幅度。如果效果真实存在图像会显示明显的台阶状 discontinuity。2.2 数据预处理要点驱动变量中心化将断点位置调整为0如gen xc x - cutoff带宽选择就像显微镜的焦距太宽会引入混杂太窄会损失信息。我通常先用rdrobust的自动带宽再手动调整验证协变量平衡检验确保断点两侧的协变量如家庭收入分布连续3. 核心估计方法3.1 局部线性回归rdrobust是当前最稳健的估计命令rdrobust college_admission centered_score, c(0) p(1) kernel(triangular)输出结果包含三个关键部分Conventional传统局部线性回归结果Robust偏差校正的稳健估计Bias-Corrected更保守的置信区间我最近分析的一个案例显示使用三角核triangular kernel在断点处赋予更大权重比均匀核uniform的估计更精确。结果解读时要注意系数处理效应大小置信区间统计显著性最优带宽显示有效分析范围3.2 多项式回归进阶当关系存在非线性时可尝试高阶多项式foreach p in 1 2 3 4 { rdrobust college_admission centered_score, c(0) p(p) estimates store model_pp } estimates table model_p*, b(%9.3f) se(%9.3f) keep(tau)实践中我发现三阶以上多项式容易过拟合。建议通过AIC/BIC准则选择最优阶数我在教育政策评估中通常使用二阶多项式作为基准。4. 有效性检验体系4.1 McCrary密度检验检验驱动变量是否存在人为操纵ssc install rddensity, replace rddensity centered_score如果p值0.05意味着断点附近可能存在分数操纵如老师刻意给部分学生加分。去年分析某奖学金数据时就发现断点右侧密度异常堆积说明存在策略性行为。4.2 协变量平滑性检验验证协变量在断点处是否连续foreach var in parental_income { rdplot var centered_score, c(0) rdrobust var centered_score, c(0) }健康的数据应该显示协变量在断点处无跳跃。我曾见过家庭收入变量在奖学金断点处出现显著跳跃这说明单纯RDD估计可能有偏。4.3 安慰剂检验将假想断点设在真实断点两侧forvalues i -20(10)20 { if i ! 0 { rdrobust college_admission centered_score, c(i) estimates store placebo_i } } coefplot placebo_*, vertical keep(tau) xline(0)好的结果应该只有真实断点处出现显著效应。这个检验特别适合反驳此处本来就有跳跃的质疑。5. 稳健性检验策略5.1 带宽敏感性分析检验不同带宽下的结果稳定性rdrobust college_admission centered_score, c(0) all local h e(h_l) // 提取最优带宽 forvalues i 1/4 { local bw h*0.5*i rdrobust college_admission centered_score, c(0) h(bw) estimates store bw_i }5.2 甜甜圈检验Donut Hole排除紧邻断点的可疑样本foreach hole in 1 2 5 { rdrobust college_admission centered_score if abs(centered_score)hole, c(0) }这个方法在我分析企业补贴政策时特别有用——排除刚好达标的关系户企业后处理效应依然显著。5.3 模型设定检验比较不同核函数、带宽选择方法的结果差异。下表是我最近项目的对比结果方法处理效应标准误带宽三角核-ROT带宽14.23.112.3均匀核-CCT带宽13.83.410.7二次型-IMSE带宽15.13.815.06. 结果呈现技巧6.1 图形化展示制作专业论文图表的三要素原始散点图jitter处理避免重叠局部多项式拟合线断点位置标记twoway (scatter college_admission score if treatment0, msize(small)) /// (scatter college_admission score if treatment1, msize(small)) /// (lpoly college_admission score if treatment0, bw(15) lcolor(red)) /// (lpoly college_admission score if treatment1, bw(15) lcolor(blue)), /// xline(550) legend(order(1 未获奖 2 获奖 3 拟合线))6.2 表格组织建议包含以下信息不同带宽下的估计结果不同多项式阶数的对比协变量平衡性检验结果稳健性检验的关键指标使用esttab输出专业表格esttab model_p* using results.rtf, b(%9.3f) se(%9.3f) replace7. 常见问题排查在实际应用中我遇到过这些坑带宽过宽导致估计偏误。有次分析时自动带宽包含整个样本结果发现是忘记设置c()选项离散型驱动变量当分数只有整数时需要特别处理。可尝试密度检验和排序检验多重断点比如不同学校有不同分数线。这时要用rdmulti命令样本选择性流失断点右侧学生可能因获奖而转学。可通过追踪数据检验一个实用的诊断清单[ ] 驱动变量密度在断点处连续p0.1[ ] 协变量在断点处无跳跃p0.1[ ] 安慰剂检验仅在真实断点显著[ ] 不同带宽下效应量稳定[ ] 高阶多项式结果与线性模型接近最后提醒RDD本质是局部平均处理效应LATE只能推断断点附近群体的效果。若要推广到全体人群需要额外的假设和检验。我在报告中会明确标注本结果适用于分数线附近±15分的学生群体。