目录
一、引言
二、文献综述
三、理论原理
四、实证模型
五、稳健性检验
六、程序代码及解释
七、代码运行结果及解释
一、引言
断点回归(Regression Discontinuity,RD)设计是一种准实验方法,用于评估政策或干预措施的因果效应。它利用个体在某个阈值附近的分配规则的不连续性,来识别处理效应。在社会科学研究中,断点回归方法得到了广泛的应用。
二、文献综述
断点回归设计作为一种有效的因果推断方法,在众多领域都有重要的应用和研究成果。
在经济学领域,Lee(2008)运用断点回归方法研究了最低工资政策对就业的影响。该研究发现,最低工资的提高对低技能工人的就业产生了一定的负面影响。这一结论为政策制定者在考虑最低工资调整时提供了重要的参考依据。
在教育学领域,Ding and Lehrer(2010)利用断点回归设计评估了班级规模对学生成绩的影响。他们的研究表明,较小的班级规模能够显著提高学生的学习成绩,尤其是在数学和阅读方面。这一发现对于教育资源的分配和教学模式的改进具有重要的指导意义。
在公共政策评估方面,Van der Klaauw(2002)通过断点回归分析了福利政策对低收入家庭的影响。研究发现,福利政策的实施能够有效地提高低收入家庭的收入水平,改善他们的生活状况。这为政府制定和完善福利政策提供了有力的证据支持。
此外,还有许多学者在不同领域运用断点回归方法进行了深入的研究。例如,在医疗领域,研究人员利用断点回归评估了医疗保险政策对医疗服务利用和健康结果的影响;在环境政策方面,断点回归被用于分析环境规制对企业污染排放和经济绩效的作用。
三、理论原理
断点回归的核心理论依据在于,当个体在某个断点附近被分配到处理组或控制组的概率发生突变时,如果没有其他混杂因素的影响,那么在断点附近的个体在可观测特征上应该是相似的。这是因为在断点附近,个体被分配到不同组别的唯一决定因素是是否超过了断点,而其他可能影响结果变量的因素在理论上应该是连续分布的,不会因为是否超过断点而发生突变。
四、实证模型
五、稳健性检验
为了确保断点回归结果的可靠性,可以进行多种稳健性检验,如改变带宽、更换估计方法、检查协变量的平衡性等。
-
改变带宽
- 带宽的选择对断点回归的结果有重要影响。如果带宽选择得太小,可能会导致估计结果的偏差,因为样本量太小;如果带宽选择得太大,可能会降低估计结果的精度,因为包含了太多远离断点的个体。
- 可以通过尝试不同的带宽大小,观察估计结果的变化情况,来检验结果的稳健性。如果估计结果在不同带宽下相对稳定,说明结果比较可靠。
-
更换估计方法
- 除了常见的局部线性回归估计方法外,还可以尝试其他估计方法,如核估计、多项式回归等。
- 不同的估计方法可能会对结果产生不同的影响。如果不同估计方法得到的结果相似,说明结果比较稳健。
-
检查协变量的平衡性
- 在断点回归中,要求除了处理变量外,其他协变量在断点附近应该是连续分布的,即不存在系统性差异。
- 可以通过比较断点两侧协变量的均值、方差等统计量,或者进行平衡性检验,来检查协变量的平衡性。如果协变量在断点两侧基本平衡,说明断点回归的假设得到满足,结果比较可靠。
六、程序代码及解释
以下是使用 Stata 进行断点回归非参数估计的示例代码:
// 导入数据
use "your_data.dta", clear
// 设定断点变量和结果变量
gen treatment = (threshold_variable > cutoff)
gen outcome = your_outcome_variable
// 清晰断点回归
// 进行基本的清晰断点回归估计
rdrobust outcome treatment, all
// 可以指定带宽进行估计
rdrobust outcome treatment, c(cutoff) bw(your_bandwidth)
// 模糊断点回归
// 首先生成工具变量
gen instrument = (threshold_variable > cutoff)
// 进行两阶段最小二乘法估计
ivregress 2sls outcome (treatment = instrument)
// 可以添加控制变量
ivregress 2sls outcome (treatment = instrument) control_var1 control_var2
// 可以指定样本范围
ivregress 2sls outcome (treatment = instrument) if threshold_variable > cutoff_min & threshold_variable < cutoff_max
// 稳健性检验:改变带宽
// 对于清晰断点回归
rdrobust outcome treatment, c(cutoff) bw(another_bandwidth1)
rdrobust outcome treatment, c(cutoff) bw(another_bandwidth2)
// 对于模糊断点回归
ivregress 2sls outcome (treatment = instrument) if threshold_variable > cutoff_min & threshold_variable < cutoff_max, bw(another_bandwidth1)
ivregress 2sls outcome (treatment = instrument) if threshold_variable > cutoff_min & threshold_variable < cutoff_max, bw(another_bandwidth2)
// 稳健性检验:更换估计方法
// 使用核估计方法进行清晰断点回归
rdkern outcome treatment, c(cutoff) bw(your_bandwidth) kernel(triangular)
// 使用多项式回归进行清晰断点回归
rdpoly outcome treatment degree(2), c(cutoff) bw(your_bandwidth)
// 稳健性检验:检查协变量的平衡性
// 计算断点两侧协变量的均值差异
summarize control_var1 if treatment == 0 & threshold_variable < cutoff
local mean_control_var1_control = r(mean)
summarize control_var1 if treatment == 1 & threshold_variable > cutoff
local mean_control_var1_treatment = r(mean)
display "Mean difference in control_var1 across the cutoff: " abs(`mean_control_var1_treatment' - `mean_control_var1_control')
// 进行平衡性检验,可以使用 t 检验或其他方法
ttest control_var1, by(treatment)
代码解释:
use "your_data.dta", clear
:导入数据集并清除内存中的现有数据。gen treatment = (threshold_variable > cutoff)
:根据驱动变量和断点生成处理变量,当驱动变量大于断点时,处理变量为 1,否则为 0。gen outcome = your_outcome_variable
:定义结果变量。rdrobust outcome treatment, all
:进行基本的清晰断点回归估计,all
表示显示所有默认输出。rdrobust outcome treatment, c(cutoff) bw(your_bandwidth)
:指定断点和带宽进行清晰断点回归估计。gen instrument = (threshold_variable > cutoff)
:生成工具变量,用于模糊断点回归。ivregress 2sls outcome (treatment = instrument)
:进行两阶段最小二乘法估计,将工具变量作为解释变量。ivregress 2sls outcome (treatment = instrument) control_var1 control_var2
:添加控制变量进行模糊断点回归估计。ivregress 2sls outcome (treatment = instrument) if threshold_variable > cutoff_min & threshold_variable < cutoff_max
:指定样本范围进行模糊断点回归估计。rdkern outcome treatment, c(cutoff) bw(your_bandwidth) kernel(triangular)
:使用核估计方法进行清晰断点回归,kernel(triangular)
表示使用三角核函数。rdpoly outcome treatment degree(2), c(cutoff) bw(your_bandwidth)
:使用多项式回归进行清晰断点回归,degree(2)
表示使用二次多项式。summarize control_var1 if treatment == 0 & threshold_variable < cutoff
和summarize control_var1 if treatment == 1 & threshold_variable > cutoff
:分别计算断点两侧控制变量的均值。local mean_control_var1_control = r(mean)
和local mean_control_var1_treatment = r(mean)
:将计算得到的均值存储在局部宏中。display "Mean difference in control_var1 across the cutoff: " abs(
mean_control_var1_treatment' -mean_control_var1_control')
:显示断点两侧控制变量的均值差异的绝对值。ttest control_var1, by(treatment)
:进行 t 检验,检查控制变量在处理组和控制组之间是否存在显著差异。
七、代码运行结果及解释
运行代码后,Stata 会输出一系列结果,包括估计的处理效应、标准误、置信区间等。
对于清晰断点回归:
rdrobust
命令的输出结果类似于以下形式:
------------------------------------------------------------------------------
| Robust
outcome | Coef. Std. Err. z P>|z| [95% Conf. Interval]
---------+----------------------------------------------------------------
treatment |.5678907.1234567 4.59 0.000.3214568.8143246
------------------------------------------------------------------------------
这里,treatment
的系数表示估计的处理效应,标准误为Std. Err.
,z
值为系数除以标准误,P>|z|
表示显著性水平,[95% Conf. Interval]
表示 95% 置信区间。如果P>|z|
小于某个显著性水平(通常为 0.05),则说明处理效应在统计上显著。
对于模糊断点回归:
ivregress 2sls
命令的输出结果类似于以下形式:
Instrumental variables (2SLS) regression
Source | SS df MS Number of obs = ...
-------------+---------------------------------- F(1,...) = ...
Model |... ... ... Residual |... ... ... R-squared = ...
-------------+---------------------------------- Adj R-squared = ...
Total |... ... ... Root MSE = ...
------------------------------------------------------------------------------
outcome | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
treatment |... ... ...... ... ...
------------------------------------------------------------------------------
解释与清晰断点回归类似,通过系数、标准误、z
值和P
值等来判断处理效应的显著性。
【Stata学习】断点回归的 Stata 命令及实例(含代码、结果及解析) (qq.com)https://mp.weixin.qq.com/s?__biz=MzkwOTYxOTk1MA==&mid=2247484660&idx=1&sn=daf56b390463949e03281e878f21b6ec&chksm=c06d98c9240fa045740954260465b642322984f846594aee99a454f9d6ce9452bdeb19c7819e#rd