笔记

合成控制法

合成控制法

在双重差分法(DID)中,我们假设了平行趋势的成立:

(Yd(t)Yd(t1))D(Y_d(t)-Y_d(t-1)) \perp D

我们也提到,如果平行趋势不成立时,我们可以通过合成控制法,使其趋势与目标地区都吻合。我们现在介绍合成控制法

合成控制法(Synthetic control)

思想:我们不需要在未处理单元中找到一个与处理单元极为相似的单一单位作为对照,而是通过组合多个未处理单元来构建一个虚拟的合成控制单元作为对照。换句话来说,我们将单独受干预影响的单位拿出来,然后将所干预前其他州的变化Pool成一个对照组,使其趋势与我们感兴趣的单位高度相似。

设我们有J+1J+1个单位,令单位11为受干预影响的单位,而剩下的j=2,...,J+1j= 2,...,J+1为一组未经处理的单位,称为控制组(Donor Pool). 设数据涵盖TT个时间段,其中T0T_0个为干预前时期,对于每个单位jj和时间点tt,观测到结果YjtY_{jt}。而定义YjtNY_{jt}^N为无干预时的潜在结果,定义YjtIY_{jt}^I为干预潜在结果,那么在时间t(t>T0)t (t>T_0)对受处理单位j=1j=1的效应为

τ1t=Y1tIY1tN\tau_{1t}=Y_{1t}^I - Y_{1t}^N

在这里,我们注意到t>T0t>T_0,因此单位j=1j=1tt时间已经受到干预,那么Y1tNY_{1t}^N即是反事实的,所以我们会去估计它。

τ1tYYjtIYjtNX

为了估计Y1tNY_{1t}^N,对于控制组中单位的组合可能比任何单独未处理单位更能近似处理单位的特征(拟合思想),通过给予一个权重向量W=(w2,w3,...,wJ+1)\textbf{W}=(w_2,w_3,...,w_{J+1})Y1tNY_{1t}^N的估计值为

Y^1tN=j=2J+1wjYjt\hat{Y}_{1t}^N= \sum_{j=2}^{J+1}w_jY_{jt}

这时候我们就转变了问题:因为t>T0t>T_0时的Y1tNY_{1t}^N不可观测,所以W\textbf{W}不能直接在干预后的反事实结果上训练,而要先在干预前的特征或结果变量上拟合出来。

因此,我们可以先从普通最小二乘法(OLS)的角度理解这个问题。

假设我们用干预前的NN个特征来匹配处理组,这里的“特征”可以是干预前的结果变量序列,也可以是其他协变量。对处理组而言,把这些特征写成一个向量(为了表述方便,这里的X1X_1为处理组, X0X_0为控制组):

X1=[x11x12x1N]RN×1X_1= \begin{bmatrix} x_{11}\\ x_{12}\\ \vdots\\ x_{1N} \end{bmatrix} \in \mathbb{R}^{N\times 1}

我们上面提到,控制组中有JJ个个体,则把这些控制组个体的同样NN个特征并排放在一起:

X0=[x21x31x(J+1)1x22x32x(J+1)2x2Nx3Nx(J+1)N]RN×JX_0= \begin{bmatrix} x_{21} & x_{31} & \cdots & x_{(J+1)1}\\ x_{22} & x_{32} & \cdots & x_{(J+1)2}\\ \vdots & \vdots & \ddots & \vdots\\ x_{2N} & x_{3N} & \cdots & x_{(J+1)N} \end{bmatrix} \in \mathbb{R}^{N\times J}

也就是说,X0X_0的每一列代表一个控制组个体,每一行代表一个特征或一个干预前时期。权重向量为

W=[w2w3wJ+1]RJ×1W= \begin{bmatrix} w_2\\ w_3\\ \vdots\\ w_{J+1} \end{bmatrix} \in \mathbb{R}^{J\times 1}

于是合成控制的拟合目标可以写成

X1X0WX_1 \approx X_0W

也就是希望控制组的加权组合X0WX_0W尽可能接近处理组的干预前特征X1X_1。因此,如果不加任何约束,OLS要求解的是

W^OLS=argminW(X1X0W)(X1X0W)=argminWX1X0W22\hat{W}_{OLS} =\mathop{\arg\min}\limits_W (X_1-X_0W)'(X_1-X_0W) =\mathop{\arg\min}\limits_W ||X_1-X_0W||_2^2

那么在X0X0X_0'X_0可逆时,OLS的闭式解为

W^OLS=(X0X0)1X0X1\hat{W}_{OLS}=(X_0'X_0)^{-1}X_0'X_1

不过,标准合成控制法通常不直接使用完全无约束的OLS,而是会对权重加上两个限制:

wj0,j=2J+1wj=1w_j\geq 0,\quad \sum_{j=2}^{J+1}w_j=1

第一个限制表示权重不能是负的,第二个限制表示合成控制组是控制组个体的加权平均。加上这两个限制后,问题就从普通OLS变成了一个带约束的二次优化问题:

W^=argminWX1X0W22s.t.wj0,j=2J+1wj=1\hat{W} =\mathop{\arg\min}\limits_W ||X_1-X_0W||_2^2 \quad s.t.\quad w_j\geq 0,\quad \sum_{j=2}^{J+1}w_j=1

得到W^\hat{W}之后,我们就可以用同一组权重去合成干预后的反事实结果:

Y^1tN=j=2J+1w^jYjt,t>T0\hat{Y}_{1t}^N=\sum_{j=2}^{J+1}\hat{w}_jY_{jt},\quad t>T_0

最后将真实观测到的处理组结果Y1tY_{1t}与合成出来的Y^1tN\hat{Y}_{1t}^N相减,就得到干预效应的估计:

τ^1t=Y1tY^1tN\hat{\tau}_{1t}=Y_{1t}-\hat{Y}_{1t}^N

这个问题也容易让人联想到正则化的思想,例如L1L1正则化的Lasso回归,和L2L2正则化的岭回归:

  • L1正则化:产生稀疏解从而实现特征选择。筛选变量,提高泛化能力。
  • L2正则化:让所有参数都往零收缩,但不会将任何参数完全收缩到零,从而保留了所有的特征,减少共线性带来的影响。

约束

上面提到的两个限制:

wj0,j=2J+1wj=1w_j\geq 0,\quad \sum_{j=2}^{J+1}w_j=1

是合成控制法里非常关键的一步。它不是简单地为了让模型更好看,而是为了把合成控制限制为对控制组个体的插值

假设我们把每个控制组个体的特征向量记为XjX_j,那么合成控制组为

X0W=j=2J+1wjXjX_0W=\sum_{j=2}^{J+1}w_jX_j

当所有wj0w_j\geq 0wj=1\sum w_j=1时,X0WX_0W就是这些控制组个体的凸组合

凸组合:合成出来的点只能落在控制组样本点形成的凸包(convex hull)里面。换句话说,合成控制组只能在已有控制组之间“混合”,不能跑到控制组样本点之外。

插值(interpolation):我们不是用控制组的线性组合去创造一个超出已有样本范围的新点,而是在已有控制组构成的范围内部寻找一个最接近处理组的点。

用一个一维例子理解会更直观。假设两个控制组的某个特征分别是2288

2w2+8w3,w20,w30,w2+w3=12w_2+8w_3,\quad w_2\geq 0,\quad w_3\geq 0,\quad w_2+w_3=1

那么合成出来的值一定在[2,8][2,8]之间。例如w2=0.25,w3=0.75w_2=0.25,w_3=0.75时,合成值为6.56.5。这就是插值。

若没有这些限制,OLS可能给出负权重或大于11的权重。例如:

w2=0.5,w3=1.5w_2=-0.5,\quad w_3=1.5

这时合成值为

2×(0.5)+8×1.5=112\times(-0.5)+8\times1.5=11

这个1111已经超出了控制组原本的范围[2,8][2,8],这就是外推(extrapolation)。外推有时能让干预前拟合得更好,但它也更依赖模型的线性假设,解释上需要更加谨慎,因为它相当于在说可以用“负的控制组个体”或“超过100%的某个控制组个体”来构造反事实。

对于合成控制法,我们想让反事实估计建立在控制组中真实存在的单位之间,而不是依赖样本范围之外的线性预测。

如果处理组的X1X_1本身就在控制组凸包内部,那么理论上存在一组非负且和为11的权重,可以把X1X_1精确表示出来。但如果X1X_1落在凸包外部,插值法就没有办法完全匹配。此时优化问题做的事情,是在凸包内找一个距离X1X_1最近的合成点。这个最近点通常位于凸包的某条边或某个面上,所以只有定义这条边或这个面的少数控制组单位会得到正权重,其他单位的权重会变成00

更一般地,合成控制法求的是一个带约束的优化问题:

W^=argminW(X1X0W)V(X1X0W)\hat{W} =\mathop{\arg\min}\limits_W (X_1-X_0W)'V(X_1-X_0W)

受限于

wj0,j=2J+1wj=1w_j\geq 0,\quad \sum_{j=2}^{J+1}w_j=1

其中VV是一个变量权重矩阵,用来表示不同特征在匹配时的重要性。若VV是对角矩阵,那么:

X1X0WV=(h=1Nvh(x1hj=2J+1wjxjh)2)12||X_1-X_0W||_V = \left( \sum_{h=1}^{N}v_h \left( x_{1h}-\sum_{j=2}^{J+1}w_jx_{jh} \right)^2 \right)^{\frac{1}{2}}

这里的vhv_h越大,表示第hh个特征的差异在损失函数里越重要。若某个干预前结果变量对预测干预后结果特别重要,那它会有更大的权重。在实际应用中,常见做法是先对变量标准化(确保量纲),然后选择VV使干预前预测误差尽可能小,也可以先令各变量权重相同。

在理解这一部分时,我一开始和Lasso混淆了

Lasso通常形式为:

β^Lasso=argminβyXβ22+λkβk\hat{\beta}_{Lasso} = \mathop{\arg\min}\limits_{\beta} ||y-X\beta||_2^2+\lambda\sum_k|\beta_k|

它是在损失函数后面加入一个L1L1惩罚项,通过λ\lambda控制惩罚强度。Lasso的核心是让一些系数被压缩为00,从而实现变量选择。

而合成控制法这里的限制是:

wj0,wj=1w_j\geq 0,\quad \sum w_j=1

它不是在损失函数中加入一个L1L1惩罚项,而是在限制可行的权重集合。并且在这两个约束同时成立时:

jwj=jwj=1\sum_j |w_j|=\sum_j w_j=1

所以L1L1范数本身是一个固定值,并不会像Lasso那样随着λ\lambda变化而产生收缩效果。但合成控制的解经常也会出现稀疏性,这种稀疏性来自凸包和约束优化的几何性质:最接近处理组的点往往落在凸包的某个边、面或顶点上,而不是所有控制组个体的平均上。

因此,合成控制中的“插值”是在最小化匹配误差的同时,把WW限制在一个单纯形(simplex)里:

ΔJ={W:wj0,j=2J+1wj=1}\Delta_J=\{W:w_j\geq 0,\sum_{j=2}^{J+1}w_j=1\}

在这个单纯形里找到的X0WX_0W,就是控制组个体之间的一个插值点。

统计显著性

合成控制法中比较麻烦的一点是:通常只有一个处理组单位,因此很难像传统回归那样直接依赖大样本标准误去做tt检验。一个常见做法是使用安慰剂检验(placebo test),也可以理解为一种Fisher式的随机化检验(randomization inference)。

为了和前面的符号保持一致,下面仍然令单位11是处理组。

我们先定义处理组在每个干预后时期的估计效应:

τ^1t=Y1tY^1tN,t>T0\hat{\tau}_{1t}=Y_{1t}-\hat{Y}_{1t}^N,\quad t>T_0

如果我们关心整个干预后时期的平均效应,那么可以定义:

ATET^1=1TT0t=T0+1Tτ^1t\widehat{ATET}_1 = \frac{1}{T-T_0} \sum_{t=T_0+1}^{T} \hat{\tau}_{1t}

这个值为正,说明处理组的实际结果高于合成控制组;这个值为负,说明处理组的实际结果低于合成控制组。

问题在于:ATET^1\widehat{ATET}_1是正还是负,并不自动说明它显著。因为即使没有政策,合成控制也可能因为拟合误差、随机波动或某些特殊冲击,产生一个正的或负的差值。因此,我们需要问:

如果没有真实政策效应,像ATET^1\widehat{ATET}_1这么大的差距常不常见?

In-space placebo test

这个做法是把每一个控制组单位轮流“假装”为处理组,然后对它做同样的合成控制。

假设一共有J+1J+1个单位,其中单位11是真正的处理组,单位2,,J+12,\ldots,J+1是真正的控制组。对每个控制组单位ii,我们做如下操作:

  1. 暂时把单位ii当作“处理组”;
  2. 用其他没有被处理的单位为它构造合成控制组;
  3. 用同样的干预时间T0T_0计算干预后的差距;
  4. 得到一个伪平均处理效应:
ATET^i=1TT0t=T0+1T(YitY^itN)\widehat{ATET}_i = \frac{1}{T-T_0} \sum_{t=T_0+1}^{T} \left( Y_{it}-\hat{Y}_{it}^N \right)

在实际操作中,当我们把某个控制组单位ii当作placebo处理组时,通常来讲,我们不会再把真实处理组单位放进它的控制组。因为真实处理组在T0T_0之后已经受到政策影响,它的干预后结果不再是干净的未处理结果。

这样我们就得到一组placebo效应:

ATET^2,ATET^3,,ATET^J+1\widehat{ATET}_2,\widehat{ATET}_3,\ldots,\widehat{ATET}_{J+1}

然后把真正处理组的ATET^1\widehat{ATET}_1放进这组分布中比较。如果ATET^1\widehat{ATET}_1比绝大多数placebo效应都更极端,那么说明这个结果不太像普通随机波动。

如果理论上预期政策会产生正效应,可以做右尾检验:

p+=1+i=2J+1I(ATET^iATET^1)J+1p_+ = \frac{ 1+\sum_{i=2}^{J+1}I(\widehat{ATET}_i\geq \widehat{ATET}_1) }{ J+1 }

如果理论上预期政策会产生负效应,可以做左尾检验:

p=1+i=2J+1I(ATET^iATET^1)J+1p_- = \frac{ 1+\sum_{i=2}^{J+1}I(\widehat{ATET}_i\leq \widehat{ATET}_1) }{ J+1 }

如果事先没有明确方向,则可以做双尾检验:

ptwoside=1+i=2J+1I(ATET^iATET^1)J+1p_{two-side} = \frac{ 1+\sum_{i=2}^{J+1}I(|\widehat{ATET}_i|\geq |\widehat{ATET}_1|) }{ J+1 }

这里分子里的11表示把真正处理组自己的统计量也算进去,因此最小的pp值是1J+1\frac{1}{J+1}。这也说明,donor pool太小时,合成控制的显著性检验本身会比较粗糙。

Fisher确切检验

Fisher确切检验的核心思想是:在零假设下,处理标签分配给哪个单位并不重要。如果零假设成立,即政策对任何单位都没有效果,那么“真正处理组”的差距不应该系统性地比那些假处理组更大或更小。

因此,我们可以把处理标签在所有单位之间重新排列:先让单位11当处理组,得到ATET^1\widehat{ATET}_1;再让单位22当处理组,得到ATET^2\widehat{ATET}_2;一直做到单位J+1J+1。这些统计量构成了在零假设下可以观察到的经验分布。而真正处理组的统计量在这个分布中越极端,越不支持“没有政策效应”的零假设。

这里需要注意:在合成控制的经验研究里,这种方法经常被称为placebo test或permutation test。它和严格实验设计中的Fisher exact test思想相同,但“确切性”依赖于一个很强的前提:处理分配在这些单位之间可以被看作是可交换的,且控制组没有受到政策污染。如果政策分配不是随机的,那么这个检验更像是一种基于安慰剂分布的显著性诊断。

可交换性是个很有意思的思想,在贝叶斯统计中,我们每个问题基本都会遇到它。

缺陷

这种显著性检验,真的就很有效果吗?答案显然不是,在这检验里,同样存在着一些假设。

如果政策存在溢出效应(spillover),或者控制组单位也在同一时间受到类似政策影响(尤其可能地理位置特别接近又或者是相同的领导人的接班),那么placebo检验就会变得不可靠。因为此时控制组不再是干净的未处理,placebo分布中混入了真实政策效应。结果可能是:真正处理组看起来不再极端,检验的pp值变大,但这并不代表政策无效,而是说明donor pool被污染了。

因此,使用Fisher检验时,关键前提是:

  • 控制组单位在干预后没有受到同一政策影响;
  • 不存在明显的跨地区溢出效应;
  • 各单位在没有政策时的冲击结构具有一定可比性;
  • 每个placebo单位在干预前也能被较好地拟合。

使用均方根百分比误差比值

均方根百分比误差:RMSPE(Root Mean Square Percentage Error)

RMSPE=1ni=1n(yiyi^yi)2RMSPE = \sqrt{\frac{1}{n}\sum^n_{i=1}(\frac{y_i-\hat{y_i}}{y_i})^2}

直接比较ATET^\widehat{ATET}有一个问题:有些placebo单位在干预前本来就拟合得很差。如果一个单位干预前拟合很差,那么它干预后出现大的差值并不奇怪,因为这个合成控制组从一开始就不是一个好的反事实。

因此,合成控制法的研究通常会比较干预后RMSPE与干预前RMSPE的比值:

Ri=1TT0t=T0+1T(YitY^itN)21T0t=1T0(YitY^itN)2R_i = \frac{ \sqrt{ \frac{1}{T-T_0} \sum_{t=T_0+1}^{T} \left(Y_{it}-\hat{Y}_{it}^N\right)^2 } }{ \sqrt{ \frac{1}{T_0} \sum_{t=1}^{T_0} \left(Y_{it}-\hat{Y}_{it}^N\right)^2 } }

其中分子表示干预后的拟合误差,分母表示干预前的拟合误差。如果单位11(即处理组)的R1R_1远大于大多数placebo单位的RiR_i,说明它不是单纯因为整体拟合不好才产生差距,而是在干预后出现了相对异常的偏离(倒过来说,这或许是好事)。

对应的placebo pp值可以写成:

pR=1+i=2J+1I(RiR1)J+1p_R = \frac{ 1+\sum_{i=2}^{J+1}I(R_i\geq R_1) }{ J+1 }

实际分析中,也常常会剔除那些干预前RMSPE远高于处理组的placebo单位。例如,若某个placebo单位的干预前RMSPE超过处理组的55倍或1010倍,那么它的处理后差距没有太强的比较意义。

如果剔除了部分placebo单位,那么pp值分母也要相应改成“真正处理组 + 保留下来的placebo单位”的数量。另外,RMSPE比值本身不区分正效应和负效应,RMSPE比值检验的是干预后偏离是否异常变大

总结

合成控制法中检验显著性的步骤:

  1. 计算处理组的ATET^1\widehat{ATET}_1
  2. 将每个控制组单位轮流当作假处理组,得到placebo ATET^i\widehat{ATET}_i
  3. 将真正处理组的统计量放进placebo分布中,看其极端程度;
  4. 检查干预前拟合质量,避免把拟合很差的placebo单位拿来直接比较(因为任何凸组合都无法与之匹配);
  5. (Option)可以加做post/pre RMSPE比值保证显著性检验的质量