合成控制法SCM新进展, 直接通过代码演示, 附数据和code!
凡是搞计量经济的,都关注这个号了
邮箱:econometrics666@126.com
所有计量经济圈方法论丛的code程序, 宏微观数据库和各种软件都放在社群里.欢迎到计量经济圈社群交流访问.
正文
关于合成控制法,参看:1.分享一篇使用合成控制法SCM进行实证研究的文章的代码,2.用合成控制法, 机器学习和面板数据模型开展政策评估的论文!3.中文刊上用断点回归RDD和合成控制法SCM的实证文章有哪些?不看至少需要收藏一下!4.合成控制法创始人如何用SCM做实证呢?这些规定动作一个都不能少!5.最新: 运用机器学习和合成控制法研究武汉封城对空气污染和健康的影响! 6.关于合成控制法SCM的33篇精选Articles专辑!小组惊动了阿里巴巴!7.DID, 合成控制, 匹配, RDD四种方法比较, 适用范围和特征
今天的重点:之前估计那种政策处理组只有一个对象时的情形,例如,估计上海市实行了房产税的影响,我们经常使用的是synth。但当政策处理组中有多个对象在不同时间受到政策影响时synth就显得无能为力了,此时,synth_runner上场) 。synth_runner的优点表现在如下三个方面:第一,它可以直接开展安慰剂检验,并通过提供P值来检验安慰剂检验的效果,第二,它允许多个政策处理对象在不同的时间受到政策影响,例如,A市在2008年征收房产税,B市在2010年征收房产税)),第三,它可以提供可视化图形将估计的政策处理效应和安慰剂检验的效应进行比较。
现在直接通过代码演示
*完整版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) if
tunit'==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
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
2.5年,计量经济圈近1000篇不重类计量文章,
可直接在公众号菜单栏搜索任何计量相关问题,
Econometrics Circle
数据系列:空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 | 夜间灯光 | 官员方言 | 微观数据 | 内部数据计量系列:匹配方法 | 内生性 | 工具变量 | DID | 面板数据 | 常用TOOL | 中介调节 | 时间序列 | RDD断点 | 合成控制 | 200篇合辑 | 因果识别 | 社会网络 | 空间DID数据处理:Stata | R | Python | 缺失值 | CHIP/ CHNS/CHARLS/CFPS/CGSS等 |干货系列:能源环境 | 效率研究 | 空间计量 | 国际经贸 | 计量软件 | 商科研究 | 机器学习 | SSCI | CSSCI | SSCI查询 | 名家经验计量经济圈组织了一个计量社群,有如下特征:热情互助最多、前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。