笔记

面板数据

面板数据

面板数据(Panel data)

定义:对同一单位在多个时间段内进行重复观测

回顾我们在DID中对反事实估计的公式

E[Y0(1)D=1]SM在干预后没有实施医改的反事实结果=E[Y0(0)D=1]SM在干预前的实际结果+(E[Y0(1)D=0]PT在干预后的的实际结果E[Y0(0)D=0]PT在干预前的的实际结果)\underbrace{E[Y_0(1)|D=1]}_{SM在干预后没有实施医改的反事实结果}= \underbrace{E[Y_0(0)|D=1]}_{SM在干预前的实际结果} +(\underbrace{E[Y_0(1)|D=0]}_{PT在干预后的的实际结果}-\underbrace{E[Y_0(0)|D=0]}_{PT在干预前的的实际结果})

若我们接受这一公式进行处理来推断反事实的估计,那么我们可以计算处理的平均处理效应(ATT, average treatment effect on the Treated)

ATT^=E[Y1(1)D=1]SM在干预后实施医改的实际结果E[Y0(1)D=1]\widehat{ATT}=\underbrace{E[Y_1(1)|D=1]}_{SM在干预后实施医改的实际结果}-E[Y_0(1)|D=1]

我们在前面也说了,我们这一公式可以实现的话有个前提:平行趋势

我们理解为一种独立性假设:处理分配和潜在结果是独立的:

YdDY_d \perp D

还有另外一个概念,即条件独立性假设:允许处理分配和潜在结果相关,但我们控制了混淆因素(Confounding)XX,这种相关会消失:

YDDXY_D \perp D|X

那么,对于平行趋势而言,我们也可以通过数学符号进行表示:

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

在实际例子里,这代表着我们可以将医改实施到任何地区,但我们不能因为这个地区的工资增长快慢水平来干预我们政策的实施。

控制混杂

在之前我们知道,在理想情况下,我们获得因果效应最好的方式就是完全随机,但真实世界的情况总非如此,因此我们有了倾向得分(匹配)、线性回归、匹配法、来处理非随机数据中的混杂因素,但明显,这里我们得要求我们所有的混杂因素都是已知且可测量,这我们才能控制他们,使得处理的分配像随机数据一般,即:

(Y0,Y1)TX(Y_0, Y_1) \perp T|X

但显然,我们有些时候没有办法控制所有的混杂,或者说,有些混杂我们根本无法测量。若我们没有办法控制未测量的混杂,我们估计的因果效应就会有偏误。在先前,我们提到了“工具变量”,我们利用IV来控制未测量的混杂,但找到合适的IV并不容易。我们可以使用“面板数据”来进行控制混杂。

回到定义:面板数据为对同一单位在多个时间段内进行重复观测

BeautyMarriage=0Marriage=0Marriage=1Marriage=1Income ↓Income ↓Income ↑Income ↑

使用一个例子(上图):

追踪同一观测对象跨越4个时间段。婚姻(处理)和收入(结果)随时间变化。具体而言,婚姻在第3和第4期启动(从0变为1),而收入在同一时期增加。外貌这一未测量的混杂因素在所有时期保持不变。

由于Beauty这一变量我们无法量化,那么,我们如何知道收入增加是由于婚姻而非仅仅因为外貌混杂因素的增加?因此使用同一个个体,对其重复测量试验,获得纵向数据是一个很好的方式,我们会假设混杂因素在一个纵向数据内他保持不变,这样我们就能够探究我们处理与结果的因果效应。假设一款药物在不同个体上的重复测量,探究其的治疗效果,这种前后的自身对照,可以看成我们控制了其他我们未测量的混杂。

换一种方式理解,我们可以把这些“时间固定的混杂变量”看作是每个单位所特有的属性。相当于在因果图中添加一个中间单位节点(Person)。这时候,控制单位本身就已经阻断了结果与任何未被观测但时间固定的混杂变量之间的后门路径。

DNAIntelligencebeautyPersonMarriage=0Marriage=0Marriage=1Marriage=1Income ↓Income ↓Income ↑Income ↑

在线性模式中,我们对不同的个体添加虚拟变量,将其纳入模型中,即我们有了控制个体本身效应的做法。在回归分析里,我们就能够保持个体变量恒定的情况下,去估计真实的婚姻的效应。即:固定效应模型

注意:这里我们就能知道一个面板数据的一个局限性了,即我们控制的混淆是不随着时间变化的

固定效应模型:

定义:

yit=βXit+γUi+eity_{it}=\beta X_{it} + \gamma U_i + e_{it}
  • yity_{it}:表示个体ii在时间tt的结果
  • XitX_{it}:表示与时间tt相关的可观测变量
  • UiU_i:表示个体ii的一组不可观测但在时间上保持不变的特征
  • eite_{it}:表示误差项

但我们实际应用中,显然不会为每个人都添加一个虚拟变量,这在小样本时我们还能运转,在大样本的时候,我们的数据列数会变成几万甚至几十万,这显然是很笨拙的一种做法。

这里可以借助一个在线性回归里非常重要的结论来理解:如果我们只关心其中一组变量的系数,那么并不一定要真的把所有控制变量都直接放进最后一步回归里。我们可以先把这些控制变量能够解释的部分“扣掉”,再用剩下的那部分变化来估计我们真正关心的系数。

假设现在有一个普通的线性回归:

Y=X1β1+X2β2+eY = X_1\beta_1 + X_2\beta_2 + e

这里要注意区分两组特征:

  • X1X_1:我们真正关心的解释变量,比如婚姻状态、是否接受处理、工作经验等。我们想估计的是它对应的系数 β1\beta_1
  • X2X_2:我们不一定关心其系数,但其是必须控制的变量,比如个体虚拟变量、年份虚拟变量、地区虚拟变量等。它们的作用是吸收混杂因素。

如果直接回归,当然可以把 X1X_1X2X_2 一起放进模型里,直接估计 β1\beta_1β2\beta_2。但问题在于,当 X2X_2 是大量个体虚拟变量时,这个模型会变得非常庞大。所以换一种等价的思路:先把 YYX1X_1 中与 X2X_2 有关的部分都拿掉,再看 X1X_1 剩下的变化如何解释 YY 剩下的变化

具体来说,可以分成四步,用到是一种消元法的思想:

  1. X2X_2 去预测结果变量 YY
Y=X2γy+ryY = X_2\gamma_y + r_y

这一步会得到一个预测值 Y^=X2γ^y\hat{Y}=X_2\hat{\gamma}_y。它表示的是:只根据 X2X_2,我们能解释 YY 的哪一部分。

  1. X2X_2 去预测我们关心的变量 X1X_1
X1=X2γx+rxX_1 = X_2\gamma_x + r_x

这一步会得到一个预测值 X^1=X2γ^x\hat{X}_1=X_2\hat{\gamma}_x。它表示的是:只根据 X2X_2,我们能解释 X1X_1 的哪一部分。

  1. 分别计算 YYX1X_1 中不能被 X2X_2 解释的残差:
ry=YY^,rx=X1X^1r_y = Y-\hat{Y},\qquad r_x = X_1-\hat{X}_1

其中 ryr_y 表示排除了 X2X_2 之后,YY 剩下的变化;rxr_x 表示排除了 X2X_2 之后,X1X_1 剩下的变化。

  1. rxr_x 去解释 ryr_y
ry=rxβ1+ur_y = r_x\beta_1 + u

最后这一步得到的 β^1\hat{\beta}_1,和直接回归

Y=X1β1+X2β2+eY = X_1\beta_1 + X_2\beta_2 + e

得到的 β^1\hat{\beta}_1 是完全一样的。这个结论通常叫做 Frisch-Waugh-Lovell theorem,即残差化之后再回归

我们进行详细解释这个结论:

先考虑两个问题:

  • YY 里面有多少变化只是因为 X2X_2 不同而产生的?
  • X1X_1 里面有多少变化只是因为 X2X_2 不同而产生的?

在这一步里,我们相当于把X2X_2给消元了

把这两部分都拿掉之后,剩下的 ryr_yrxr_x 就是不含 X2X_2 影响的变化。此时再用 rxr_x 去解释 ryr_y,得到的就是“在控制 X2X_2 不变的情况下,X1X_1YY 的影响”。

此时我们把这个结论放回固定效应模型里,事情就很清楚了。回忆一下固定效应模型:

yit=βXit+γUi+eity_{it}=\beta X_{it} + \gamma U_i + e_{it}

其中 UiU_i 可以理解为个体虚拟变量。也就是说,UiU_i 就是上面那组我们不关心系数、但必须控制的 X2X_2。而 XitX_{it},比如婚姻状态,就是我们关心的 X1X_1

所以固定效应模型其实等价于下面这个过程:

  1. 先用个体虚拟变量解释 yity_{it},得到结果变量中不能被“这个人是谁”解释的部分;
  2. 再用个体虚拟变量解释 XitX_{it},得到解释变量中不能被“这个人是谁”解释的部分;
  3. 最后用第二个残差去解释第一个残差,得到 β^\hat{\beta}

关键在于:如果 X2X_2 是个体虚拟变量,那么“用个体虚拟变量去解释一个变量”其实就是在计算每个个体自己的平均值。比如对工资 yity_{it} 来说,用个体虚拟变量回归以后,预测值就是这个人在所有时期里的平均工资:

y^it=yˉi\hat{y}_{it} = \bar{y}_i

因此残差就是:

ry=yityˉir_y=y_{it}-\bar{y}_i

同理,对解释变量 XitX_{it} 来说:

X^it=Xˉi\hat{X}_{it} = \bar{X}_i

即残差是:

rX=XitXˉir_X=X_{it}-\bar{X}_i

于是,原来的固定效应模型就可以改写成:

yityˉi=β(XitXˉi)+(eiteˉi)y_{it}-\bar{y}_i = \beta (X_{it}-\bar{X}_i) + (e_{it}-\bar{e}_i)

这就是固定效应模型的核心:不比较不同个体之间谁工资更高,而是比较同一个个体在不同时期相对于自己平均水平的变化

因此,固定效应并不是神奇地观察到了 UiU_i,而是通过面板数据的重复观测,将这些不随时间变化的个体特征从 YYXX 中同时剔除掉。只要混杂因素确实是不随时间变化的(这也是我们所假设的那样),它会在做差或去均值的过程中被消掉。

我们也可以利用矩阵形式把这个过程写得更紧凑。令

P2=X2(X2TX2)1规范化因子X2TP_2 = X_2(\overbrace{X_2^TX_2)^{-1}}^{规范化因子}X_2^T

其中P2P_2投影矩阵(Projection Matrix),表示把任意变量投影到 X2X_2 所张成空间上的操作,那么

M2=IP2M_2 = I - P_2

其中M2M_2残差生成矩阵(Residual-maker Matrix),表示把 X2X_2 能解释的部分拿掉,即去掉个体固定效应,只保留个体内部随时间变化的部分。于是:

ry=M2Y,rx=M2X1r_y = M_2Y,\qquad r_x = M_2X_1

最后估计:

β^1=(X1M2X1)1X1M2Y\hat{\beta}_1 = (X_1'M_2X_1)^{-1}X_1'M_2Y

这个式子表达的意思就是:β^1\hat{\beta}_1 只来自 YYX1X_1 中那些不能被 X2X_2 解释的剩余变化。在固定效应中,这些剩余变化就是个体内部随时间变化的部分。

但还有一个问题,我们怎么判断哪些变量是随时间变化,哪些变量不随时间变化,这有利于我们构建模型中的X1X_1X2X_2

这个有一简单的方法,对个体进行分组,计算每个变量的标准差之和,若为0,即说明这些变量不随时间变化。

实际应用中,我们使用到Python里的linearmodels库:

from linearmodels.panel import PanelOLS
mod = PanelOLS.from_formula("y ~ x1 + x2 + x3 +EntityEffects", #表示个体效应
                            data=data.set_index(["nr", "year"])) #设置维度,第一维度为个体,第二维度为时间
result = mod.fit(cov_type='clustered', cluster_entity=True) #个体水平固定效应

mod = PanelOLS.from_formula("y ~ x1 + x2 + x3 + EntityEffects + TimeEffects", #表示个体和时间效应
                            data=data.set_index(["nr", "year"])) #设置维度
result = mod.fit(cov_type='clustered', cluster_entity=True, cluster_time=True) #个体和时间水平固定效应

总结: 固定效应模型牺牲了异质性(群之间的),换来了对个体固定特征的有效控制。

用个例子来讲,如果想了解地区之间医改与医生工资的因果效应是否不同,那么这将没办法估计,因为固定效应模型默认效应在地区之间是不变;但如果想了解医改与医生工资整体上的平均影响,那么这正是固定效应可以做的,因为它消除了地区之间的异质性。

它失效了

我们先前已经提及到了,如果混杂因素随着时间变化,固定效应将不能消除偏误。另外一种情况:即存在反向因果关系,即先行关系和后行关系的差异,二者均会随着时间同向变动,这时候固定效应也会失效,这时候需要用到结构方程模型(Structural Equation Modeling, SEM)