查看原文
其他

合成控制法SCM新进展, 直接通过代码演示, 附数据和code!

计量经济圈 计量经济圈 2022-10-02

凡是搞计量经济的,都关注这个号了

邮箱:econometrics666@126.com

所有计量经济圈方法论丛的code程序, 宏微观数据库和各种软件都放在社群里.欢迎到计量经济圈社群交流访问.

1.免费4门课程, 因果推断1和2, IV, 份额移动IV和高级DID, 附数据,代码,讲义和阅读清单,2.哈佛“数据科学导论”课程对所有人免费开放!包括机器学习和回归分析等各种方法!3.加拿大经济学会主席的"机器学习"课程可以学习了! 共计20份Slides直指ML前沿!4.耶鲁开设“应用实证方法”P.hd课程, 强逻辑, 好文献, 重实操, 真前沿, 送slides和笔记!5.诺奖得主Angrist的因果推断课程文献读物单子再次更新了, 还提供了其他三门课程,6.全面且前沿的因果推断课程, 提供视频, 课件, 书籍和经典文献,7.美国博士用4年整理了写论文的各章实用资料, 包括课程, 软件, 研究, 投稿和工作等,8.MIT经济系50门开放课程对中国学者开放, 包括计量经济学等各类经济学课程!9.MIT斯隆商学院研究生课程对国内免费开放, 在家就能学习世界一流商学院的课程!10.从入门到进阶的Python数据分析手册, 课程内容完全免费!11.疫情期计量课程免费开放!面板数据, 因果推断, 时间序列分析与Stata应用

正文

关于合成控制法,参看:1.分享一篇使用合成控制法SCM进行实证研究的文章的代码,2.用合成控制法, 机器学习和面板数据模型开展政策评估的论文!3.中文刊上用断点回归RDD和合成控制法SCM的实证文章有哪些?不看至少需要收藏一下!4.合成控制法创始人如何用SCM做实证呢?这些规定动作一个都不能少!5.最新: 运用机器学习和合成控制法研究武汉封城对空气污染和健康的影响! 6.关于合成控制法SCM的33篇精选Articles专辑!小组惊动了阿里巴巴!7.DID, 合成控制, 匹配, RDD四种方法比较, 适用范围和特征

合成控制法是在比较案例研究中估计政策干预因果效应的一种常见方法。它通常与少数大型单位(例如国家、省、县)一起使用,以估计总体政策干预措施的效果。思路是构建一个相似的未受到政策处理的单元(称为“合成控制组)的凸组合,以创建一个与处理组对象非常相似的合成控制组,并对其进行反事实分析。
下面就是合成控制法的简单原理,可参看:1.合成控制法什么鬼? 因果推断的前沿方法指南,2.再谈合成控制法SCM, 帮你寻找因果推断控制组,3.合成控制法与HCW方法, 谁能够走得更远?4.分享一篇使用合成控制法SCM进行实证研究的文章的代码

找到后,可以将所有时间段t的估计值(合成控制)放在一起。因为我们的合成控制是由未经处理的单元构成,所以当干预发生在时间时,合成控制组和处理组单元之间的差异为我们提供了估计的政策干预效果。
下面是描述该方法结果的图表。合成控制组单元遵循与处理组单元干预前非常相似的路径。干预后两条曲线之间的差异为我们提供了政策的处理效果。


今天的重点:之前估计那种政策处理组只有一个对象时的情形,例如,估计上海市实行了房产税的影响,我们经常使用的是synth。但当政策处理组中有多个对象在不同时间受到政策影响时synth就显得无能为力了,此时,synth_runner上场)  。synth_runner的优点表现在如下三个方面:第一,它可以直接开展安慰剂检验,并通过提供P值来检验安慰剂检验的效果,第二,它允许多个政策处理对象在不同的时间受到政策影响,例如,A市在2008年征收房产税,B市在2010年征收房产税)),第三,它可以提供可视化图形将估计的政策处理效应和安慰剂检验的效应进行比较。

一些值得关注的地方:
与双重差分法DID不同,平行趋势不是合成控制法的必须假定。然而,合成控制组仍必须与处理组单元具有相似的特征,以便构建准确的估计。
面板数据对于合成控制方法是必需的,并且通常需要在多个时间段内进行观察。具体来说,政策干预前的时间范围应该足够大以形成准确的估计。
此方法需要总体数据(aggregate data),例如,包括省级人均 GDP、国家层面的犯罪率和省级酒精消费统计数据。此外,如果不存在总体数据,有时也可以汇总微观数据来估计总体值。
作为对前一个要点的警告,在使用大的干预前期间时要警惕结构性中断。Abadie 和 L'Hour (2020) 还提出了一种惩罚方法,用于对非总体数据执行合成控制法。
还要考虑如前所述,这种技术可以与双重差分法进行比较。如果没有总体数据或没有足够的数据用于政策干预前窗口,并且有一个与处理组单元有平行趋势的对照组,那么双重差分法可能更适合。

现在直接通过代码演示

*完整版code放在计量社群里的,可以自行下载运行。以下代码经过测试,能够顺利运行。

*安装下面使用的图表方案

ssc install blindschemes

*如果尚未安装,请安装 synth 和 synth_runner

*导入系统数据

sysuse smoking, clear

*需要将数据设置为面板数据序列

tsset state year

*使用synth进行合成控制法估计,synth只能估计那种政策处理组只有一个对象时的情形,例如,估计上海市实行了房产税的影响

synth cigsale beer lnincome retprice age15to24 cigsale(1988) ///  cigsale(1980) cigsale(1975), trunit(3) trperiod(1989) fig ///  nested keep(synth_results_data.dta) replace

*保存synth_results_data.dta,存储加州(观察到的)和合成加州(使用来自其他未受到政策影响州的观察到的数据的加权平均值构建)每年所有cigsale 时间序列值的数据集。

use synth_results_data.dta, clear drop _Co_Number _W_Weight

*画出处理组单元和合成控制组单元随时间变化的图

twoway line (_Y_treated _Y_synthetic _time), scheme(plottig) xline(1989) ///  xtitle(Year) ytitle(Cigarette Sales) legend(pos(6) rows(1))

 *使用synth_runner运行合成控制法的估计。注意,synth_runner之所以出现,在于之前的synth只能估计那种政策处理组只有一个对象时的情形,例如,上海市实行了房产税,但当政策处理组中有多个对象在不同的时间受到政策影响时synth就显得无能为力了,此时,synth_runner上场)  

*synth_runner的优点表现在如下三个方面:第一,它可以直接开展安慰剂检验,并通过提供P值来检验安慰剂检验的效果,第二,它允许多个政策处理对象在不同的时间受到政策影响,例如,A市在2008年征收房产税,B市在2010年征收房产税)),第三,它可以提供可视化图形将估计的政策处理效应和安慰剂检验的效应进行比较。

*依然是导入数据

sysuse smoking.dta, clear

*需要将数据设置为面板数据序列

tsset state year

*使用syn_runner运行合成控制法估计

synth_runner cigsale beer(1984(1)1988) lnincome(1972(1)1988) retprice age15to24 cigsale(1988) cigsale(1980) ///  cigsale(1975), trunit(3) trperiod(1989) gen_vars

*在 synth_runner 估计之后创建两个图。一个绘制处理组单元及其合成控制组的结果,而另一个绘制两者之间的差异。

effect_graphs, trlinediff(-1) effect_gname(cigsale1_effect) tc_gname(cigsale1_tc) /// effect_options(scheme(plottig)) tc_options(scheme(plottig))

*创建受政策影响后各期间的p值图。

pval_graphs

多个被处理对象和处理时间的情形

*我们考虑现在佐治亚州和加利福尼亚州都会受到政策影响,即除了加州,此时佐治亚州也在1988年也实施了烟草法案。现在我们就有两个政策处理期和处理对象,而不是前面的一个处理期和处理对象。我们展示了如何根据政策处理年份动态生成预测变量、xperiod() 和 mspeperiod()。

capture drop Dcapture program drop my_pred my_drop_units my_mspeperiod my_xperiod

program my_pred, rclass  args tyear  return local predictors "beer(=tyear'-4'(1)=tyear'-1') lnincome(=tyear'-4'(1)=tyear'-1')"  return local predictors "beer(=tyear'-4'(1)=tyear'-1') lnincome(=tyear'-4'(1)=tyear'-1')"  end

program my_drop_units  args tunit  if tunit'==39 qui drop if inlist(state,21,38) iftunit'==3 qui drop if state==21  end

program my_xperiod, rclass  args tyear  return local xperiod "=tyear'-12'(1)=tyear'-1'"  end

program my_mspeperiod, rclass  args tyear  return local mspeperiod "=tyear'-12'(1)=tyear'-1'"  end

*除了加州,此时佐治亚州也在1988年也实施了烟草法案,此时若为1989年后的加州或1988年的佐治亚州,D为1,)

generate byte D = (state==3 & year>=1989) | (state==7 & year>=1988)

*执行synth_runner合成控制法估计

synth_runner cigsale retprice age15to24, d(D) pred_prog(my_pred) trends training_propr(`=13/18') drop_units_prog(my_drop_units)) xperiod_prog(my_xperiod) mspeperiod_prog(my_mspeperiod)

effect_graphs

*创建受政策影响后各期间的p值图。

pval_graphs

*完整版code放在计量社群里的,可以自行下载运行。

R软件代码如下:

library(dplyr)library(Synth)data("synth.data")
dataprep_out = dataprep(  foo = synth.data,   predictors = c("X1", "X2", "X3"),   predictors.op = "mean",   time.predictors.prior = c(1984:1989),   dependent = "Y",  unit.variable = "unit.num",   unit.names.variable = "name",   time.variable = "year",  treatment.identifier = 7,  controls.identifier = c(2, 13, 17, 29,                           32, 36, 38)  time.optimize.ssr = c(1984:1990)  time.plot = c(1984:1996) )
synth_out = dataprep_out %>% synth()
synth_out %>% path.plot(dataprep.res = dataprep_out, tr.intake = 1990)
synth_control = dataprep_out$Y0plot %*% synth_out$solution.w
关于DID的最新进展,参看:1.120篇DID双重差分方法的文章合集, 包括代码,程序及解读, 建议收藏!2.诚实双重差分法DID, 面板事件研究法和Bacon分解的经典应用文!3.前沿: 多期或渐进或交叠DID, 如何进行平行趋势检验呢?4.多期DID或渐进DID或交叠DID, 最新Stata执行命令整理如下供大家学习,5.DID前沿: 5种方法估计事件研究的因果效应, 并使用绘制系数和置信区间, 详细代码和数据,6.事件研究法开展政策评估和因果识别, 分享8篇提供数据和代码的文章,7.推荐用渐进(多期)DID和事件研究法开展政策评估的论文及其实现数据和代码!8.机器学习已经与政策评估方法, 例如事件研究法结合起来识别政策因果效应了!9.多期DID前沿方法大讨论, e.g., 进入-退出型DID, 异质性和动态性处理效应DID, 基期选择问题等,10.面板数据政策评估方法(DID等)的最新进展与相关应用, 包括机器学习和因子估计法,11.AEJ上首篇用DID研究晚清电报与粮食价格关系的量化史文章! 通电报, 粮价稳!12.前沿, 合成双重差分法SDID方法介绍和示例, 附code和数据!13.前沿, 模糊双重差分法FDID方法介绍和示例, 附code和数据!
1.“显著不显著的后背是什么, 非(半)参估计里解决内生性”,2.“计量社群里关于使用交互项还是中介效应分析开展机制研究的讨论”,3.“为啥面板数据回归中, 即使X对Y的解释程度很大, 但R-square一般都很小?”,4.多期DID中使用双向固定效应可能有问题! 又如何做平行趋势检验? 多期DID方法的最新进展如何?,5.收入和年龄等变量是将其转化成有序离散变量还是当成连续变量进行回归呢?6.控制变量就能影响结果显著性, 所以存在很大操作空间, 调参数是常用手段吗?7.回归中常数项显著说明模型中有遗漏变量问题?8.审稿人有义务告诉你回归中可能的遗漏变量么?9.针对很多实证问题的讨论, 随手保存的部分内容以飨学者,10.未引入交互项主效应为正, 引入后变为负, 解释出来的故事特别好, 主效应符号确实增强了故事性,11.双向固定效应多期DID最新进展和代码汇总, 关于控制变量和固定效应选取的讨论,12.逐年匹配的PSM-DID操作策略, 多时点panel政策评估利器,13.多期DID前沿方法大讨论, e.g., 进入-退出型DID, 异质性和动态性处理效应DID, 基期选择问题等,14.针对经济学领域中介效应模型问题的回应和理性讨论,15.讨论a(b)对b(a)的新方向论文, 经济学期刊分区问题, 3个机制存在时计量模型设计问题
下面这些短链接文章属于合集,可以收藏起来阅读,不然以后都找不到了。

2.5年,计量经济圈近1000篇不重类计量文章,

可直接在公众号菜单栏搜索任何计量相关问题,

Econometrics Circle




数据系列空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 |  夜间灯光 | 官员方言  | 微观数据 | 内部数据计量系列匹配方法 | 内生性 | 工具变量 | DID | 面板数据 | 常用TOOL | 中介调节 | 时间序列 | RDD断点 | 合成控制 | 200篇合辑 | 因果识别 | 社会网络 | 空间DID数据处理Stata | R | Python | 缺失值 | CHIP/ CHNS/CHARLS/CFPS/CGSS等 |干货系列能源环境 | 效率研究 | 空间计量 | 国际经贸 | 计量软件 | 商科研究 | 机器学习 | SSCI | CSSCI | SSCI查询 | 名家经验计量经济圈组织了一个计量社群,有如下特征:热情互助最多前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存