目录
一、引言
合成控制法(Synthetic Control Method)是一种在政策评估中被广泛应用的方法,它能够通过构建一个合成的对照组来模拟处理组在没有受到政策干预时的情况,从而更准确地评估政策的效果。在本文中,我们将对合成控制法的理论原理进行阐述,并结合实际数据详细介绍在 Stata 中的具体操作步骤。
二、文献综述
合成控制法自诞生以来,在众多领域的政策评估中发挥了重要作用,并引起了学术界的广泛关注和深入研究。
在经济学领域,Abadie 和 Gardeazabal(2003)首次将合成控制法应用于评估恐怖主义活动对巴斯克地区经济的影响,为该方法的应用奠定了基础。此后,Abadie 等(2010)运用合成控制法评估了加州烟草控制计划对香烟消费的影响,发现该计划显著降低了香烟消费量。
在公共政策领域,Dube 等(2013)研究了最低工资政策对就业的影响,通过合成控制法发现适度提高最低工资对就业的负面影响较小。Kleven 和 Schultz(2014)则利用该方法评估了丹麦的育儿假政策对女性劳动力市场参与的影响,结果表明政策对女性就业产生了积极作用。
在环境政策方面,Greenstone 和 Gallagher(2008)评估了空气质量法规对制造业生产率的影响,发现严格的环境法规在长期内对经济的负面影响有限。
此外,合成控制法还被应用于教育政策、医疗政策、税收政策等多个领域的研究。例如,Jacobson 等(2011)评估了教育券计划对学生学业成绩的影响;Finkelstein 等(2012)研究了医疗保险改革对医疗服务利用和健康结果的影响;Slemrod 和 Bakija(2017)分析了税收政策对企业投资和经济增长的作用。
这些研究不仅展示了合成控制法在政策评估中的有效性和适用性,也为后续的研究提供了宝贵的经验和方法借鉴。然而,合成控制法也并非完美无缺,在实际应用中仍存在一些挑战和局限性,如数据要求较高、对异常值敏感、结果的解释需要谨慎等。因此,未来的研究需要进一步完善和改进该方法,以提高政策评估的准确性和可靠性。
三、理论原理
合成控制法的核心在于为处理组构建一个在政策干预前与处理组具有相似特征的合成控制组。其基本假设是,如果没有政策干预,处理组的发展趋势将与合成控制组相似。
为了更好地理解合成控制法的原理,我们可以通过一个简单的例子来说明。假设我们要评估某地区实施一项新的经济政策对当地 GDP 增长的影响。我们有多个潜在的可比地区作为控制组,这些地区在政策实施前与处理地区在经济结构、人口特征等方面具有一定的相似性。通过合成控制法,我们为处理地区构建一个合成的对照地区,其经济特征是多个控制地区的加权平均。如果在政策实施后,处理地区的 GDP 增长明显高于合成对照地区,那么我们可以初步认为该政策对经济增长产生了积极的影响。
需要注意的是,合成控制法的有效性在很大程度上依赖于数据的质量和可获得性,以及合理选择协变量和控制组。同时,对于一些复杂的情况,可能需要结合其他方法进行综合评估。
四、实证模型
例如,假设我们研究某个城市实施的环保政策对空气质量的影响。我们选取了多个相似的城市作为控制组。在政策实施前,通过优化权重来使合成控制城市的空气质量指标与处理城市尽可能相似。政策实施后,如果处理城市的空气质量明显优于合成控制城市,那么我们可以认为该环保政策是有效的。
需要注意的是,在实际应用中,我们需要合理选择纳入模型的变量,以确保合成控制地区能够准确地模拟处理地区在政策干预前的情况。同时,还需要对模型的假设和局限性有清晰的认识。
五、稳健性检验
为了验证合成控制法结果的稳健性,可以进行以下几种检验:
- 安慰剂检验:随机选择一些控制组作为 “假处理组”,如果这些 “假处理组” 的结果与真实处理组差异显著,说明原结果可能是偶然的。
- 敏感性分析:改变控制组的范围或权重计算方法,观察结果是否有较大变化。
六、程序代码及解释
// 安装所需的包
ssc install synth // 安装合成控制法相关的命令
// 导入数据
import delimited "your_data.csv", clear // 导入包含处理组和控制组数据的文件,需根据实际文件名修改
// 定义变量
gen treated = (region == 1) // 生成一个指示变量,标识处理组,这里假设地区 1 是处理组
// 定义结果变量和预测变量
global outcome_var "gdp_growth" // 例如,将经济增长率定义为结果变量,根据实际变量名修改
global predictor_vars "population education_level" // 定义用于构建合成控制的预测变量,可根据实际情况修改
// 运行合成控制法
synth $outcome_var $predictor_vars, trunit(1) // 执行合成控制法,指定处理组为 1
// 结果输出
estat synth // 输出合成控制法的统计结果
// 绘制结果图
synthgraph // 绘制处理组和合成控制组的结果对比图
// 保存结果
estimates store synth_results // 保存估计结果,方便后续调用和比较
// 进一步分析
// 例如,可以计算处理组和合成控制组的差异,并进行 t 检验
gen difference = outcome_variable - synth_outcome_variable // 根据实际变量名修改
ttest difference // 进行 t 检验,判断差异是否显著
// 进行安慰剂检验
foreach i in 2/10 { // 假设控制组为 2 到 10 地区
gen placebo_treated = (region == `i') // 生成假处理组变量
synth $outcome_var $predictor_vars, trunit(`i') // 对假处理组进行合成控制估计
estat synth // 输出假处理组的统计结果
}
// 敏感性分析
// 改变预测变量
global predictor_vars2 "population2 education_level2" // 定义新的预测变量集
synth $outcome_var $predictor_vars2, trunit(1) // 重新运行合成控制法
// 改变控制组范围
synth $outcome_var $predictor_vars, trunit(1), keep(2/8) // 只保留 2 到 8 地区作为控制组
上述代码中:
import delimited
命令用于按照指定的格式导入数据文件。gen
命令用于生成新的变量,如定义处理组的指示变量。- 通过
global
定义全局变量,方便在后续命令中统一使用和修改。 synth
命令执行合成控制法的估计,指定结果变量、预测变量和处理组。estat synth
输出关于合成控制估计的统计信息。synthgraph
绘制直观的结果对比图。estimates store
用于保存估计结果,便于后续分析和比较。- 后续的代码片段展示了如何进行 t 检验、安慰剂检验和敏感性分析,以进一步评估结果的可靠性和稳定性。