查看原文
其他

政策评估『绣春刀』:合成控制法(SCM)的Stata操作

江河JH 功夫计量经济学 2022-12-31
合成控制法是一种数据驱动的方法,适用于评估“试点”较少的政策。它的核心思想是虽然难以在其他没有试点的地区找到合适的反事实参照组,但是通常可以对其他没有试点的地区进行适当的线性组合,构造出一个合成的反事实参照组。Abadie et al. (2010)加州控烟一文是合成控制法最为经典的论文(发表在统计学顶刊JASA上),接下来,我就使用这篇论文的数据,给大家分享一下合成控制法的Stata操作。

「原文信息」

Alberto Abadie, Diamond A, Hainmueller J. Synthetic Control Methods for Comparative Case Studies: Estimating the Effect of California's Tobacco Control Program[J]. Journal of the American Statistical Association, 2010.

政策背景

1988年11月美国加州通过了当代美国最大规模的控烟法,并于1989年1月开始生效。该法将加州的香烟消费税提高了每包25美分,将所得收入专项用于控烟的教育与媒体宣传,并引发了一系列关于室内清洁空气的地方立法,比如在餐馆、封闭工作场所等禁烟。Abadie et al. (2010)根据美国1970-2000年的州级面板数据,采用合成控制法研究了美国加州1988年控烟法对人均香烟消费量的政策效果。

数据说明

该面板数据集包含了美国39个州在1970-2000年间的信息,主要包括以下变量:state(州)、year(年)、cigsale(人均香烟消费量,包/年)、lnincome(人均收入对数)、beer(人均啤酒消费量)、age15to24(15-24岁人口所占总人口比重)、retprice(平均香烟零售价格)。
. use smoking,clear
(Tobacco Sales in 39 US States)

. xtset state year

Panel variable: state (strongly balanced)
 Time variable: year, 1970 to 2000
         Delta: 1 unit

. describe

Contains data from smoking.dta
 Observations:         1,209                  Tobacco Sales in 39 US States
    Variables:             7                  11 Nov 2007 23:38
-------------------------------------------------------------------------------------------------
Variable      Storage   Display    Value
    name         type    format    label      Variable label
-------------------------------------------------------------------------------------------------
state           long    %14.0g     state      state no
year            float   %9.0g                 year
cigsale         float   %9.0g                 cigarette sale per capita (in packs)
lnincome        float   %9.0g                 log state per capita gdp
beer            float   %9.0g                 beer consumption per capita
age15to24       float   %9.0g                 percent of state population aged 15-24 years
retprice        float   %9.0g                 retail price of cigarettes
-------------------------------------------------------------------------------------------------
Sorted by: state  year

合成控制法操作

synth cigsale retprice lnincome age15to24 beer ///
cigsale(1975) cigsale(1980) cigsale(1988),trunit(3) ///
trperiod(1989) xperiod(1980(1) 1988) figure ///
keep(smoking_synth,replace) 
其中,cigsale为结果变量,retpricelnincomeage15to24beer cigsale(1975)cigsale(1980)cigsale(1988)为预测变量。
各option具体解释如下:
(1)trunit(#) 用于指定处理地区 ,trunit(3)表示第3个州(即California加州)为处理组 。
(2)trperiod(#) 用于指定政策干预开始的时期,trperiod(1989)表示政策开始实施时间为1989年。
(3)选择项xperiod(numlist)用于指定将预测变量进行平均的期间,默认为政策干预开始之前的所有时期。
(4)选择项figure表示将处理地区与合成控制的结果变量画时间趋势图。
(5)选择项keep(smoking_synth)将估计结果(比如,合成控制的权重、结果变量)存为另一Stata数据集(smoking_synth),以便进行后续计算。

权重表

大多数州的权重为0,而只有以下四个州的权重为正(权重和为1),即 Colorado (0.356),Connecticut (0.083),Nevada (0.217) 与 Utah (0.344)。合成控制法会用这四个州的实际香烟消费量的加权平均值作为合成加州的替代指标。
Unit Weights:

----------------------------
         Co_No | Unit_Weight
---------------+------------
       Alabama |           0
      Arkansas |           0
      Colorado |        .356
   Connecticut |        .083
      Delaware |           0
       Georgia |           0
         Idaho |           0
      Illinois |           0
       Indiana |           0
          Iowa |           0
        Kansas |           0
      Kentucky |           0
     Louisiana |           0
         Maine |           0
     Minnesota |           0
   Mississippi |           0
      Missouri |           0
       Montana |           0
      Nebraska |           0
        Nevada |        .217
 New Hampshire |           0
    New Mexico |           0
North Carolina |           0
  North Dakota |           0
          Ohio |           0
      Oklahoma |           0
  Pennsylvania |           0
  Rhode Island |           0
South Carolina |           0
  South Dakota |           0
     Tennessee |           0
         Texas |           0
          Utah |        .344
       Vermont |           0
      Virginia |           0
 West Virginia |           0
     Wisconsin |           0
       Wyoming |           0
----------------------------

平衡性检验

该表主要考察加州与合成加州的预测变量是否接近,可以看出,加州与合成加州的预测变量均值十分接近,故合成加州可以很好地复制加州的经济特征。
Predictor Balance:

------------------------------------------------------
                               |   Treated  Synthetic 
-------------------------------+----------------------
                      retprice |  89.42222   89.00128 
                      lnincome |  10.07656   9.904773 
                     age15to24 |  .1735324    .175389 
                          beer |     24.28   23.26454 
                 cigsale(1975) |     127.1   126.3862 
                 cigsale(1980) |     120.2   120.7221 
                 cigsale(1988) |      90.1    92.0883 
------------------------------------------------------

合成控制图

在1989年控烟法之前,合成加州的人均香烟消费与真实加州几乎如影相随,表明合成加州可以很好地作为加州如未控烟的反事实替身。在控烟法实施之后,加州与合成加州的人均香烟消费量即开始分岔,而且此效应越来越大。

计算控烟法的处理效应

use smoking_synth.dta, clear
gen effect= _Y_treated - _Y_synthetic
label variable _time "year"
label variable effect "处理效应"
line effect _time, xline(1989,lp(dash)) yline(0,lp(dash))
下图显示,加州控烟法对于人均香烟消费量有很大的负效应,而且此效应随着时间推移而变大。具体来说,在 1989-2000 年期间,加州的人均年香烟消费减少了20多包,大约下降了 25% 之多,故其经济效应十分显著。

安慰剂检验

“安慰剂”(placebo)一词来自医学上的随机实验,比如要检验某种新药的疗效。此时,可将参加实验的人群随机分为两组,其中一组为实验组,服用真药;而另一组为控制组,服用安慰剂(比如,无用的糖丸),并且不让参与者知道自己服用的究竟是真药还是安慰剂,以避免由于主观心理作用而影响实验效果,称为“安慰剂效应”(placebo effect)。「具体到加州控烟法的案例,我们想知道,使用上述合成控制法所估计的控烟效应,是否完全由偶然因素所驱动?换言之,如果从控制地区中随机抽取一个州(不是加州)进行合成控制估计,能否得到类似的效应?」
Abadie et al. (2010) 在加州控烟这篇论文中提出了一种类似于统计中秩检验的排序检验方法,用来判断是否还有其他地区出现和加州同样的情况, 概率有多大。这一检验的思想是「假设所有控制组的州在1989年开始实施控烟法, 使用合成控制法构造相应州的合成控制对象, 估计在假设情况下的政策效果,然后比较加州实际产生的政策效果和控制组的州假设情况下产生的政策效果」。如果两者的政策效果差距足够大, 那么我们就有理由相信控烟法的政策效果是显著的。
这一方法要求在政策实施前各州的合成控制对象具有良好的拟合效果, 如果一个州1989年前的拟合效果不理想, 即MSPE(均方预测误差)或者RMSPE(均方预测误差的平方根)值比较大, 即使政策后期得到的较大的预测变量差值也不能反映该政策的实施效果。因此, 当一个州的合成控制对象在政策实施前的拟合效果不好时, 我们就需要对其进行剔除。这么做的理由是, 如果合成控制对象没能拟合好实施控烟法前的预测变量值, 最后得到的预测变量差值很可能是拟合效果不好所导致的, 与控烟法无关。
**对每一个州进行合成控制估计
tempname resmat //设定一个临时矩阵叫做resmat
forval i=1/39{
 qui synth cigsale retprice lnincome age15to24 beer cigsale(1975) cigsale(1980) cigsale(1988),trunit(`i') trperiod(1989) xperiod(1980(1) 1988) keep(smoking_synth_`i',replace) 
 matrix `resmat' = nullmat(`resmat') \ e(RMSPE) //矩阵用来存放每个州进行合成控制的rmspe值
 local names `"`names' `"`i'"'"'
}
mat colnames `resmat' = "
RMSPE" //矩阵的列名定义为RMSPE
mat rownames `resmat' = `names' //矩阵的行名为names
matlist `resmat' , row("
Treated Unit") 


Treated Unit |     RMSPE 
-------------+-----------
           1 |  2.710146 
           2 |  2.512085 
           3 |   2.03785 
           4 |  6.041637 
           5 |  5.216902 
           6 |  10.04986 
           7 |   1.38767 
           8 |  2.711447 
           9 |  3.307603 
          10 |  6.374926 
          11 |  3.994193 
          12 |  4.027571 
          13 |  26.14307 
          14 |   2.24033 
          15 |  4.162081 
          16 |  4.473659 
          17 |  2.520064 
          18 |  2.108559 
          19 |  2.356012 
          20 |  2.435734 
          21 |   7.71803 
          22 |  59.03776 
          23 |   2.42456 
          24 |  10.73793 
          25 |  4.562296 
          26 |  3.594593 
          27 |    3.2714 
          28 |  2.960468 
          29 |  12.75254 
          30 |  1.784269 
          31 |  3.154255 
          32 |  2.658026 
          33 |  2.678193 
          34 |  24.36728 
          35 |  9.442087 
          36 |  5.924654 
          37 |  3.208769 
          38 |  2.957548 
          39 |  10.68497 
Abadie et al. (2010)在文中分别剔除了1989年之前MSPE值超过加州MSPE值20倍、5倍和2倍的州。在这里,我就以剔除20倍为例,给大家介绍一下这一部分的操作,因为STATA提供的是RMSPE值(MSPE的平方根),所以「在计算时我们需要将上表中各州对应的RMSPE值平方,与加州MSPE值(2.03785^2)的20倍进行比较」,这一部分大家可以在Excel中自行计算。通过计算比较,我们可以发现1989年之前MSPE值超过加州MSPE值20倍的有Delaware(6号)、Kentucky(13号)、New Hampshire(22号)、North Carolina(24号)、Rhode Island(29号)、Utah(34号)、Vermont(35号)和Wyoming(39号)这8个州,因而接下来我们需要剔除掉这8个州的数据,再进行绘图相关操作。
forval i=1/39{
 use smoking_synth_`i', clear
 rename _time years
 gen tr_effect_`i'
 = _Y_treated - _Y_synthetic
 keep years tr_effect_`i'
 drop if missing(years)
 save smoking_synth_`i'
, replace
}

**匹配到一张表
use smoking_synth_1, clear
forval i=2/39{
qui merge 1:1 years using smoking_synth_`i', nogenerate
}


**删除拟合不好的州
drop tr_effect_6  //删除Delaware
drop tr_effect_13 //删除Kentucky
drop tr_effect_22 //删除New Hampshire
drop tr_effect_24 //删除North Carolina
drop tr_effect_29 //删除Rhode Island
drop tr_effect_34 //删除Utah
drop tr_effect_35 //删除Vermont
drop tr_effect_39 //删除Wyoming


**处理效应图
local lp1
forval i=1/2 {
   local lp1 `lp1'
 line tr_effect_`i' years, lpattern(dash) lcolor(gs8) ||
}
local lp2
forval i=4/5 {
   local lp2 `lp2'
 line tr_effect_`i' years, lpattern(dash) lcolor(gs8) ||
}
local lp3
forval i=7/12 {
   local lp3 `lp3'
 line tr_effect_`i' years, lpattern(dash) lcolor(gs8) ||
}
local lp4
forval i=23/23 {
   local lp4 `lp4'
 line tr_effect_`i' years, lpattern(dash) lcolor(gs8) ||
}
local lp5
forval i=25/28 {
   local lp5 `lp5'
 line tr_effect_`i' years, lpattern(dash) lcolor(gs8) ||
}
local lp6
forval i=30/33 {
   local lp6 `lp6'
 line tr_effect_`i' years, lpattern(dash) lcolor(gs8) ||
}
local lp7
forval i=36/38 {
   local lp7 `lp7'
 line tr_effect_`i' years, lpattern(dash) lcolor(gs8) ||
}
twoway `lp1'
 `lp2' `lp3' `lp4' `lp5' `lp6' `lp7'|| line tr_effect_3 years, ///
lcolor(black) legend(off) xline(1989, lpattern(dash)) yline(0,lp(dash)) ylabel(-30(15)45)
在上图中,实线表示加州的处理效应(即加州与合成加州的人均香烟消费之差),而虚线表示MSPE值低于加州MSPE值20倍的30个控制州的安慰剂效应(即这些州与其相应合成州的人均香烟消费之差)。显然,与其他州的安慰剂效应相比,1989年后加州的(负)处理效应显得特别大。但是在这个图中,仍然有几条线与1989年控烟法案前的零差距线有很大的偏离。所以,接下来还需要使用更加严格的标准剔除MSPE值偏大的州,就请大家自己探索吧!需要本篇推文使用的数据和Stata代码的朋友,请在公众号后台对话框回复关键词SCM!。


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

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