查看原文
其他

看完此文还不会合成控制法,导师也救不了你

1分钟读懂合成控制法

1、简介

合成控制法可视为DID方法的延伸,即考察某一政策冲击对个体影响的效应分析,此时DID方法便失效了,经济学研究中评估某项政策或事件的效应时,使政策可能实施于某个国家,地区或城市。较为简单的方法是考察政策实施前后的时间序列,看所关心的结果如何变化。但结果还可能受其自身时间趋势的影响和其他事件带来的综合影响,为此,常使用“鲁宾的反事实框架”。即假设该地区如果未受到政策干预将会如何。这一方法的困难之处就在于,这一假设是无法观测的。

鉴于反事实无法观测,通常的解决办法是寻找适当的控制组,即在各方面都与受干预地区相似却未受干预的其他地区,以作为处理组的反事实替身。但现实情况中这种控制组的寻找也是相当困难的。为了解决控制组选择的难题,Abadie和Gardeazabal(2003)出了合成控制法”,基本思想为,假设考察仅在北京实施的政策的效果评估,可能可以选择上海,广州,深圳等地,但是实际上他们与北京也不尽相同。虽然无法找到最佳控制地区,但通常可以对中国的若千大城市进行适当的线性拟合,以构造一个“合成控制地区”,并将真实北京”和合成北京”进行对比。

2、合成控制法的具体方法

假设共有(n+1)个地区,其中第1个地区为受到政策影响的地区,可视为处理组,另外n个地区为未受到政策影响的地区,即为潜在控制组。

这里的潜在假设是,政策效应仅影响处理组而不会波及潜在控制组。将潜在对照组的权重设为

根据不同潜在控制组不同的权重来构成“合成控制地区”。可以看出,权重的选取是为合成控制法中最为重要的一环,只有潜在控制组能够较好的拟合“真实地区"时,该研究方法的结果才具有意义。需要选择权重w使得x0w尽可能接近x1,经过加权后,合成控制地区的经济特征需要尽量接近处理地区。为了度量此距离,可使用二次型(类似欧几里的空间中两点之间的距离)。由于x1中的每个预测变量对于y的预测能力大小不同,应在距离函数中享有不同的权重,故考虑以下有约束最小化问题。



其中,V为(k*k)维对角矩阵,对角线元素均为非负权重,反映相应的预测变量对于y的相对重要性。此最小化问题的目标函数时二次函数,为“二元规划"问题,一般进行数值求解。记此约束最小化问题的最优解为

;显然,它依赖于对角矩阵V。最终拟合效果可通过合成趋势图和真实趋势图的对比来观测。

3、合成控制法的stata操作










4、合成控制法的稳健性检验及其注意事项安慰剂检验∶

在比较案例研究中,由于潜在的控制地区数目通常并不多,故不适合使用大样本理论进行统计推断。为此Abadie(2010)提出使安慰检验"来进行计验,一方法类似于统计学中的“排列检验”,适用于任何的样本容量。

安慰剂”一词来自于医学上的随机实验。比如,要检验某种新药的疗效,此时可将参加实验的人群随机分为两组,其中一组为实验组,服用真药;另一组为对照组,服用安慰剂(无效且无副作用的药),并且不让参与者知道自己服用的究竟是真药还是安慰剂,以避免由于主观心理作用而影响实验效果,成为“安慰剂效应”。我们想了解上述合成控制法所估计的控烟效应,是否完全由偶然因素驱动,或者说,从潜在控制组随机抽取一个州进行合成控制估计,能否得到类似的效应?

安慰剂检验的具体实现方法,是直接将每个州"干预的MSPE"与干预前的MSPE相比计算二者的比值。这一方法的正确性在于,对于处理组而言,如果政策有效,则合成控制将无法很好地预测真实加州千预后的结果变量,导致较大的干预后MSPE。然而,如果在干预之前,合成加州就无法很好地预测真实加州的结果变量(较大的预前MSPE),这也会导致干预后的MSPE增大,故取二者的比值以控制前者的影响。

如果加州控烟法确实有较大的处理效应,而其他州的安慰剂效应都很小,则应该观测加州的“干预后MSPE"与千预前MSPE"之比明显高于其他各州。需注意的是,如果在对某个州进行安慰剂检验时,如果在“干预之前”其合成控制的拟合效果很差(均方预测误差MSPE很大),则有可能出现在“干预之后”的效应”波动也很大,故结果不可信。

基于时间的安慰剂检验:

这一方法要求政策发生之前要有很长的时期,我们需要通过论证政策在实施之前年份中的影响是不显著的,从而证明政策实施之后存在着明显的处理效应。

使用合成控制法是应注意的事项

同样受到此政策影响的地区不能充当潜在控制组;

在样本期间受到很大特殊冲击的地区也不能充当潜在控制组;

为了避免“内插偏差”,应将潜在控制组限定为与处理地区具有相似特征的控制地区。例如:研究杭州市某项政策的效应,则为其寻找的潜在控制组最好为相邻地区具有类似特征的地区;

在应用合成控制法时,要求干预前的期数T0达到一定的规模。这是因为,合成控制法的可信度取决于,合成控制能在干预前的相当一段时期内很好的拟合处理地区的经济特征与结果变量。如果干预前的拟合不好,或干预期数太短,则不建议使用合成控制法如果政策存在滞后效应,则要求千预后的期数也要足够大。

5、安慰剂检验汇总

Abadie等人认为,在比较案例研究中,由于潜在的控制地区数目通常并不多,所以不适合使用大样本理论进行统计推断。为此,Abadie等人提出使用“安慰剂检验”来进行统计检验,这种方法类似于统计学中的“排列检验”,适用于任何样本容量。

“安慰剂”(placebo)一词来自医学上的随机试验。比如,要检验某种新药的疗效,此时可将参加实验的人群随机分为两组,其中一组为实验组,服用真药;而另一组为控制组,服用安慰剂(比如,无用的糖丸),并且不让参与者知道自己服用的究竟是真药还是安慰剂,以避免由于主观心理作用而影响实验效果,称为“安慰剂效应”(placebo effect)。

5.1  加入预测变量

为了评估我们的结果的稳健性,我们在用于构建综合控制的变量中加入了额外的吸烟率预测因子。我们的结果几乎不受影响,不管我们包含了多少预测变量。用于稳健性检查的预测因素列表包括各州的失业率、收入不平等、贫困、福利转移、犯罪率、与毒品相关的逮捕率、烟草税、人口密度,以及捕捉各州人口、种族和社会结构的众多变量。

结果还是稳健的

5.2 Permutation inference 排列置换

为了评估我们的评估的重要性,我们进行了一系列的安慰剂研究,反复使用合成控制方法来评估加州99号提案对其他州的影响。在每一次迭代中,我们将烟草控制干预的数据重新分配到38个控制州中的一个,将加利福尼亚转移到捐赠池。换句话说,我们的行动就好像捐献库中的一个州会在1988年通过一项大规模的烟草控制计划,而不是加州。然后,我们计算与每次安慰剂试验相关的估计效应。这个迭代的过程为我们提供了一个没有干预的状态的估计缺口的列表。

图4显示了安慰剂测试的结果。灰色的线表示与38次测试运行中的每一次相关的间隙。也就是说,灰色的线显示了每个州在捐赠池中的人均香烟销售额和其各自的合成版本之间的差异。叠加的黑线表示加州估计的差距。

5.3 时间安慰剂检验

所谓时间安慰剂检验,就是假设例如加州香烟消费税实施的年份不在原来的时候,我们把这个法案实施时间点给提前或者是延后,然后再进行合成控制法检验,操作代码如下,


使用数据
 sysuse smoking
 
 ***面板数据
 tsset state year
 
***example 1
 synth cigsale beer(1984(1)1988) lnincome retprice age15to24 cigsale(1988) cigsale(1980) cigsale(1975), trunit(3) trperiod(1989)
 
****example 2
  synth cigsale beer lnincome(1980&1985) retprice cigsale(1988) cigsale(1980) cigsale(1975), trunit(3) trperiod(1989) fig
  
***example 3
 synth cigsale retprice cigsale(1970) cigsale(1979) , trunit(33) counit(1(1)20) trperiod(1980) fig resultsperiod(1970(1)1990)
 
***example 4
 synth cigsale retprice cigsale(1970) cigsale(1979) , trunit(33) counit(1(1)20) trperiod(1980) resultsperiod(1970(1)1990) keep(resout)

***example5
 synth cigsale beer lnincome retprice age15to24 cigsale(1988) cigsale(1980) cigsale(1975) , trunit(3) trperiod(1989) xperiod(1980(1)1988) nested




最后我们会发现没有明显的这样的一个处理效应,所以说明原始的这样的一个结果是显著的。注意事项:example1-5 分别将trperiod(#) 修改为不同的年份或者是trunit(#)修改为加州或者是其他地区,这样都满足了时间安慰剂检验

5.4 synth_runner

一文读懂合成控制法synth_runner操作及应用

 The following examples use data from the synth package.  Ensure that synth was installed with ancillary files (for example, ssc install synth, all).  This panel dataset contains
    information for 39 U.S. States for the years 1970-2000 (see Abadie, Diamond, and Hainmueller [2010] for details).
        . sysuse smoking
        . tsset state year

    Example 1 -- Reconstruct the initial synth example plus graphs:

        . 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
        . single_treatment_graphs, trlinediff(-1) effects_ylabels(-30(10)30) effects_ymax(35) effects_ymin(-35)
        . effect_graphs, trlinediff(-1)
        . pval_graphs

    In this example, synth_runner conducts all the estimations and inference.  Because there was only a single treatment period, we can save the output into the dataset.  Then we can
    create the various graphs.  Note the option trlinediff() allows the offset of a vertical treatment line.  Likely options include values in the range from (first treatment period -
    last posttreatment period) to 0, and the default value is -1 (to match Abadie, Diamond, and Hainmueller [2010]).

    Example 2 -- Same treatment, but a bit more complicated setup:

        . capture drop pre_rmspe post_rmspe lead effect cigsale_synth
        . generate byte D = (state==3 & year>=1989)
        . synth_runner cigsale beer(1984(1)1988) lnincome(1972(1)1988) retprice age15to24, trunit(3) trperiod(1989) trends training_propr(`=13/18') gen_vars pre_limit_mult(10)
        . single_treatment_graphs, scaled
        . effect_graphs, scaled
        . pval_graphs

    Again, there is a single treatment period, so output can be saved and merged back into the dataset.  In this setting, we i) specify the treated units or periods with a binary
    variable; ii) generate the outcome predictors automatically using the initial 13 periods of the pretreatment era (the rest is the "validation" period); and iii) match on trends.

    Example 3 -- Multiple treatments at different time periods:

        . capture drop D
        . program my_pred, rclass
            args tyear
            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
        . generate byte D = (state==3 & year>=1989) | (state==7 & year>=1988)
        . 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
        . pval_graphs

        We extend example 2 by considering a control state now to be treated (Georgia in addition to California).  No treatment actually happened in Georgia in 1987.  Now that we have
        several treatment periods, we cannot merge in a simple file.  Some graphs (of single_treatment_graphs) can no longer be made.  We also show how predictors, unit dropping,
        xperiod(), and mspeperiod() can be dynamically generated depending on the treatment year.

javascript




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

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