Stata:基于Lasso的合成控制法-scul
2023-03-05
郭盼亭
4218

连享会   主页 || 推文 || 知乎 || B 站 || 在线课堂

New! 搜推文,找资料,用 lianxh 命令:
安装: ssc install lianxh, replace
使用: lianxh 合成控制
       lianxh DID + 多期, w


⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:郭盼亭 (厦门大学)
邮箱gpting2020@163.com


目录
[[TOC]]


1. 什么是合成控制法?

合成控制法 (Synthetic Control Method) 是一种用来估计因果处理效应的方法。在 Abadie、Diamond 和 Hainmueller (2010) (ADH,2010) 开发的典型应用中,研究人员观察了一个接受处理单元和许多未接受处理单元的时间序列结果。具体来看,

  • 首先,通过尽量减少合成对照组和处理组在未接受处理时的差距,来选择合适的权重。未受处理序列的加权平均值被用作受处理序列的反事实估计,被称为合成对照组。
  • 其次,通过计算处理发生之后,处理组和合成对照组之间的差异得到处理效应的估计值。
  • 最后,通过安慰剂分析来进行统计推断。

1.1 识别假设

合成对照组可以进行外推的假设前提是:如果不接受处理,处理组和对照组之间的横截面相关性在处理发生后将保持相同,即合成控制法假设。具体分析如下图所示:

合成控制方法识别因果效应所需的两个关键假设:

  • 条件独立性假设;
  • 没有异质的时间趋势。

1.2 构建合成对照组

假设 xt=(y1t,,ySt)x_t=\left(y_{1 t}, \ldots, y_{S t}\right)tt 时期的对照组的结果向量,ω=(π1,,πS)T\omega=\left(\pi_1, \ldots, \pi_S\right)^T 是一个 S×1S \times 1 的权重向量,有:

yt=s=1Systπsy_t^*=\sum_{s=1}^S y_{s t} \pi_s

yt=xtωy_t^*=x_t \omega

1.3 求解权重向量

ω^Synth =ω(V)=argminω(t=1T0(y0txtω)2)\widehat{\omega}_{\text {Synth }}=\omega\left(V^*\right)=\arg \min _\omega\left(\sum_{t=1}^{T_0}\left(y_{0 t}-x_t \omega\right)^2\right)

其中,VVMM X MM 的变量重要性权重矩阵。计算方法如下:

  • X1=(Z1X_1= (Z_1, YˉiK1\bar{Y}_i^{K_1},...,, ..., YˉiKM\bar{Y}_i^{K_M} )' 为处理组干预前特征的一个 (k×1k \times 1) 向量,X0X_0 是控制组的 (k×Jk \times J) 阶矩阵;
  • 向量 WW^* 的选择目标就是在权重约束下最小化 X1X0W||X_1— X_0{W}||

1.4 理论推导

Yit=τitDit+θtZi+ξt+λift+εitY_{i t}=\tau_{i t} D_{i t}+\theta_t^{\prime} Z_i+\xi_t+\lambda_i^{\prime} f_t+\varepsilon_{i t}

或者

{Yit(0)=θtZi+ξt+λift+εitYit(1)=Yit0+τit\left\{\begin{array}{l} Y_{i t}(0)=\theta_t^{\prime} Z_i+\xi_t+\lambda_i^{\prime} f_t+\varepsilon_{i t} \\ Y_{i t}(1)=Y_{i t}^0+\tau_{i t} \end{array}\right.

假设存在 R 个随时间变化的因子 ftf_t;每个单位 (如国家、参与者) 依据因子载荷 λi\lambda_i 选取这些因子的某个固定线性组合;对于处理组和控制组,这些 “混杂变量” 在干预前的特征都得到呈现,因而我们可以使用这种信息来 “平衡” 混淆因素;令 W=(w2,...,wJ+1)W = (w_2,...,w_{J+1})' 对于 wj>=0w_j >= 0,并且 w2+...+wJ+1=1w_2+...+w_{J+1}=1;令 YˉiK1\bar{Y}_i^{K_1},...,, ..., YˉiKM\bar{Y}_i^{K_M} 代表干预前结果变量的 M 个线性组合 (M>R)(M>R)

假设我们可以选择 WW^* 满足:

Z1=j=2J+1wjZj,Yˉ1k=j=2J+1wjYˉjk,k{K1,,KM}Z_1=\sum_{j=2}^{J+1} w_j^* Z_j, \bar{Y}_1^k=\sum_{j=2}^{J+1} w_j^* \bar{Y}_j^k, k \in\left\{K_1, \ldots, K_M\right\}

T0T_0 足够大时,τ1t\tau_{1t} 的一个近似无偏估计量可以表示为:

τ^1t=Y1tj=2J+1wjYjt,t{T0+1,,T}\hat{\tau}_{1 t}=Y_{1t}-\sum_{j=2}^{J+1} w_j^* Y_{j t}, t \in\left\{T_0+1, \ldots, T\right\}

其中,Y1tY_{1t} 代表控制组,j=2J+1wjYjt\sum_{j=2}^{J+1} w_j^* Y_{j t} 代表加权之后的控制组。

2. 什么是 SCUL?

SCUL (Synthetic Control Using Lasso) 顾名思义就是应用 Lasso 的合成控制法,是在 ADH (2010) 提出的经典合成控制法的基础上,创新性地使用 Lasso 回归,来求解构建合成对照组的权重的一种特殊的合成控制法。

ω^lasso =argminω(t=1T0(y0txtω)2+λω1)\widehat{\omega}_{\text {lasso }}=\arg \min _\omega\left(\sum_{t=1}^{T_0}\left(y_{0 t}-x_t \omega\right)^2+\lambda|\omega|_1\right)

可以看出,ω^lasso \widehat{\omega}_{\text {lasso }}ω^Synth \widehat{\omega}_{\text {Synth }} 的区别就在于加入了一个 λω1\lambda|\omega|_1。其中,Lasso 回归是一种在机器学习中广泛使用的方法,应用了 Lasso 回归的 SCUL 可以更好地进行样本外预测。除此之外,SCUL 还在以下几个方面进行了创新性贡献:

  • 阐明合成控制方法的识别假设;
  • 为通常的临时选择提供建议;
  • 使用机器学习方法,允许高维的对照组备选池和自动选择模型;
  • 允许各种各样的对照组变量类型;
  • 允许外推和负权重。

由上所述可知,SCUL 的估计流程和经典合成控制法的区别在于权重 ww 的估计,其余的步骤大致一样。

利用机器学习相关文献中经常提到的滚动原点交叉验证 (rolling-origin cross-validation) 方法,求出最优的 λ\lambda。这一方法可以更好地进行样本外预测,以及最小化自相关带来的麻烦。

3. 命令介绍

命令安装:

* 安装命令到 stata
net describe http://repec.org/bocode/s/scul
net install scul, replace
net get scul, replace

* 使用 scul 命令之前,还需要安装以下几个命令:
ssc inst tabstatmat, replace
ssc install distinct, replace
lxhget lassopack.pkg, install replace
cnssc install gtools, replace
ssc install coefplot, replace
*基本语法介绍
scul depvar, treated(variable)
   [ahead(number)] [placebos] [plat]
   [times(numlist)] [lambda(string)]
   [covs(varlist)] [cv(string)]
   [scheme(string)]  [rellab(numlist)]
   [obscol(string)] [cfcol(string)]
   [conf(string)] [legpos(integer)]
   [transform(string)] [q(real)]
   [donoradj(string)]
   [before(integer)] [after(integer)]

其中,depvar 是被解释变量,指定为结果变量,该变量不允许存在缺失值。treated 指定处理变量,该变量不允许有缺失值,必须为 0 或 1,并且在处理开始之后必须始终为 1。如果多于一个单元被处理,scul 将采用交错方法分析 (staggered adoption)。options 主要包含以下内容:

  • ahead:指定用户希望在训练数据集中预测的提前周期数。有关此过程的详细信息。
  • lambda:可选项。根据 Hastie 等 (2019) 第二章的讨论,用户可以指定 lopt(optimal lambda)lse(standard error rule)
  • placebos:可选项。安慰剂检验。
  • plat:可选项。需要设定时间,时间代表着用户希望用来做安慰剂的相对发生时间区间。例如,如果干预发生在 2000 年,并且用户指定 5 和 10,则干预将在 1995 年和 1990 年进行评估。
  • covs:可选项。指定用来帮助估计反事实的协变量。
  • scheme:可选项。指定想要的图形方案。
  • legpos:可选项。指定在 Stata 的点钟表示法中,图例出现的位置。
  • squerr:如果指定了安慰剂,则需要 Squerr。这一选项删除干预前 RMSPE 比同期处理组的 RMSPE 大一个数量级的安慰剂组的数据。
  • obscolcfcol:可选项。指定接受处理的和未接受处理单位线的颜色。
  • q:可选项。当 q=0 时,采用 Ridge penalty;当 q=1 时,采用 LASSO。默认情况下,指定为 LASSO。
  • conf:可选项。指定从 t 检验绘制置信区间图。
  • transform:可选项。将结果变量归一化在干预发生前的时间。

staggered options:主要包含以下内容:

  • donoradj:必选项。通过输入 etnt 作为选项来指定如何调整对照组备选池。指定 et 意味着用户希望使用曾经接受过处理的单元,而 nt 意味着只使用从未接受过处理的单元。
  • before and after:必选项。用户指定处理效应的平均相对事件时间周期。注意,这只保留了在周期前后有这么多周期的处理单元。假设一个用户有三个处理组的一年月度数据,一个在 1 月处理 (阶段 1),一个在 3 月处理 (阶段 3),另一个在 8 月处理 (阶段 8)。如果用户指定 before after(2),那么第一个处理单元将被删除,因为它没有 2 个阶段的干预前数据。
  • rellab:可选项。指定事件时间轴标记的周期。例如,如果指定 (-5(5)5),则该图将显示干预前 5 个周期到干预后 5 个周期的平均处理效应。注意,该选项不会改变计算处理效应的周期,只会改变处理效应图的显示方式。

4. 具体示例

4.1 示例 1

. use "http://fmwww.bc.edu/repec/bocode/s/scul_basque.dta", clear
. qui xtset
. local lbl: value label `r(panelvar)'
. loc unit ="Basque Country (Pais Vasco)":`lbl'
. loc int_time = 1975
. qui xtset
. cls
. g treat = cond(`r(panelvar)'==`unit' & `r(timevar)' >= `int_time',1,0)
. scul gdpcap, ahead(3) treat(treat) obscol(black) cfcol("170 19 15") legpos(11)

-----------------------------------------------------------------------------------------
Algorithm: Synthetic LASSO, Single Unit Treated
-----------------------------------------------------------------------------------------
First Step: Data Setup
-----------------------------------------------------------------------------------------
Checking that setup variables make sense.
Setup successful!! All variables id (ID), year (Time) and gdpcap (Outcome) pass.
All are numeric, not missing and non-constant.
-----------------------------------------------------------------------------------------
Inspecting our treatment variable...
-----------------------------------------------------------------------------------------
Treatment is measured from 1975 to 1997 (20 pre-periods)
-----------------------------------------------------------------------------------------
               Treated Unit: Basque Country (Pais Vasco)
-----------------------------------------------------------------------------------------
               Control Units: 16 total donor pool units
-----------------------------------------------------------------------------------------
               Specifically: Andalucia, Aragon, Asturias, Baleares (Islas), Canarias, 
               Cantabria, Castilla Y Leon, Castilla-La Mancha, Cataluna, Comunidad Valenciana,
               Extremadura, Galicia, Madrid (Comunidad De), Murcia (Region de), Navarra
               (Comunidad Foral De), Rioja (La),
-----------------------------------------------------------------------------------------
Second Step: Data Reorganizing
-----------------------------------------------------------------------------------------
Reshaping...
Done!
-----------------------------------------------------------------------------------------
Third Step: Estimation
-----------------------------------------------------------------------------------------
Optimizing (optimal lambda)... This could take quite a while...
Warning: lopt is at the limit of the lambda range.
Optimization took 2.98 minutes
------------------------------------------------------
Relative  |
Time to   |
Event     |              gdpcap5        Counterfactual
----------+-------------------------------------------
      -20 |             3.853185             3.8409667
      -19 |             3.945658              3.943313
      -18 |             4.033562             4.0399026
      省略...
       20 |             9.440874             10.183964
       21 |             9.686518             10.439515
       22 |             10.17067             10.802309
------------------------------------------------------

Collection: default
      Rows: rowname
   Columns: colname
   Table 1: 9 x 1
--------------------------------------
                             | Weights
-----------------------------+--------
Asturias                     |   0.279
Canarias                     |  -0.188
Castilla Y Leon              |   1.127
Cataluna                     |   0.129
Comunidad Valenciana         |  -0.858
Extremadura                  |  -0.774
Madrid (Comunidad De)        |   0.302
Navarra (Comunidad Foral De) |   0.489
Rioja(La)                    |   0.272
--------------------------------------

4.2 示例 2

. loc int_time = 1989
. use "http://fmwww.bc.edu/repec/bocode/s/scul_p99_region", clear
. qui xtset
. local lbl: value label `r(panelvar)'
. loc unit ="California":`lbl'
. qui xtset
. g treat = cond(`r(panelvar)'==`unit' & `r(timevar)' >= `int_time',1,0)
. cls
. scul cigsale, ahead(1) treated(treat) obscol(black) cfcol(blue) legpos(7) cv(adaptive)

-----------------------------------------------------------------
Algorithm: Synthetic LASSO, Single Unit Treated
-----------------------------------------------------------------
First Step: Data Setup
-----------------------------------------------------------------
Checking that setup variables make sense.
Setup successful!! All variables region (ID), year (Time) and cigsale (Outcome) pass.
All are numeric, not missing and non-constant.
-----------------------------------------------------------------
Inspecting our treatment variable...
-----------------------------------------------------------------
Treatment is measured from 1989 to 2000 (19 pre-periods)
-----------------------------------------------------------------
               Treated Unit: California
-----------------------------------------------------------------
               Control Units: 8 total donor pool units
-----------------------------------------------------------------
               Specifically: East South Central, West South Central, 
               Mountain, New England, South Atlantic, East North
               Central, West North Central, Middle Atlantic,
-----------------------------------------------------------------
Second Step: Data Reorganizing
-----------------------------------------------------------------
Reshaping...
Done!
-----------------------------------------------------------------
Third Step: Estimation
-----------------------------------------------------------------
Optimizing (optimal lambda)... This could take quite a while...

Optimization took 0.20 minutes
------------------------------------------
Relative  |
Time to   |
Event     |     California  Counterfactual
----------+-------------------------------
      -19 |            123       119.44122
      -18 |            121       119.94731
      -17 |          123.5       126.71828
       省略...
        9 |           52.3       77.715147
       10 |           47.2       77.391106
       11 |           41.6       70.796067
------------------------------------------

Collection: default
      Rows: rowname
   Columns: colname
   Table 1: 2 x 1
----------------------------
                   | Weights
-------------------+--------
East South Central |  -0.242
Mountain           |   1.032
----------------------------

5. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 合成控制法 lasso, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

资源共享


尊敬的老师 / 亲爱的同学们:
连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。
请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。
我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。more……
  • 扫码加入连享会微信群,提问交流更方便

Stata:基于Lasso的合成控制法-scul

最新课程推荐:

课程一:结构模型 · 2025 · 现场班

课程二:连享会 · 面板数据因果推断

FAQ往期课程板书和答疑文档

选题征集,点击 此处 或者扫码填写问卷留下您的宝贵意见,感谢!


NEW!视频课堂lianxh-class.cn

⚡ 新版 lianxh 命令:使用说明
. ssc install lianxh, replace
. lianxh 多期DID

ihelp:帮助文件 PDF 版
. ssc install ihelp, replace
. ihelp xtreg


lianxh_cn_saoma

连玉君 · Stata 33 讲 - 免费
  o 点击观看dofile 下载, --Book--