在处理观测数据时,如果未观测变量可能同时影响处理分配和结果,那么像回归调整或匹配这样的传统方法可能会产生有偏的因果效应估计。面对此类挑战,诸如工具变量 (IV) 和回归断点设计 (RDD) 等方法在特定结构假设下提供解决办法。差中差法 (DiD) 在准实验方法体系中提供了另一种有效方法,尤其适合拥有面板数据的情况,即在不同时间对相同单元(个体、公司、区域等)进行重复观测。DiD 的核心思想是运用单元和时间段之间处理时间点和状态的差异,以控制某些类型的未观测混杂因素。具体来说,DiD 擅长处理单元的不随时间变化的未观测特征,这些特征可能同时影响它们接受处理的可能性和结果水平。典型的差中差法设置设想最简单的情况:两组单元,一组被指定为“处理组”,另一组为“对照组”,在两个时间段内进行观测,一个是“处理前”期,另一个是“处理后”期。处理只在处理后期间引入到处理组。令 $Y_{it}$ 表示单元 $i$ 在时间 $t$ 的结果。令 $T_i$ 为指示变量,如果单元 $i$ 属于处理组则为 1,否则为 0。令 $P_t$ 为指示变量,处理后期间为 1,处理前期间为 0。DiD 估计量计算处理组和对照组之间结果随时间变化的平均变化之差。$$ \hat{\delta}{DiD} = (\underbrace{\bar{Y}{T=1, P=1} - \bar{Y}{T=1, P=0}}{\text{处理组的变化}}) - (\underbrace{\bar{Y}{T=0, P=1} - \bar{Y}{T=0, P=0}}_{\text{对照组的变化}}) $$直观来说,我们观察处理引入后,处理组的结果如何变化。为了弄清这种变化有多少是由于处理,而非其他随时间发生的因素,我们观察对照组在同期内的结果变化。假定对照组的变化反映了如果处理组未接受处理,也会影响处理组的趋势或共同冲击。减去对照组的变化,即可得到处理的估计效应。平行趋势假设:DiD 的基础DiD 估计量的有效性在很大程度上取决于平行趋势假设。这个假设表明,在没有处理的情况下,处理组的平均结果将遵循与对照组平均结果相同的趋势。形式上,使用潜在结果表示法,设定 $Y_i(0)$ 为单元 $i$ 未受处理时的结果:$$ E[Y_{i}(0) | T_i=1, P_t=1] - E[Y_{i}(0) | T_i=1, P_t=0] = E[Y_{i}(0) | T_i=0, P_t=1] - E[Y_{i}(0) | T_i=0, P_t=0] $$这是一个关于处理组反事实趋势的假定。它不要求各组在处理前期间有相同的结果水平,只要求在没有干预的情况下,它们的趋势会平行。这个假定使我们能够使用对照组的观测变化作为处理组反事实变化的替代。digraph G { rankdir=LR; node [shape=point, width=0]; splines=line; subgraph cluster_pre { label = "处理前期间"; bgcolor="#e9ecef"; style=filled; node [style=filled]; color="#ced4da"; T0_pre [pos="0,0.5!", label="", color="#1c7ed6"]; T1_pre [pos="1,1!", label="", color="#1c7ed6"]; Tr_pre [pos="0,1.5!", label="", color="#f03e3e"]; Tr_post_cf_pt [pos="1,2!", label="", color="#fa5252"]; T0_pre -> T1_pre [style=solid, color="#1c7ed6", penwidth=1.5]; Tr_pre -> Tr_post_cf_pt [style=dashed, color="#fa5252", penwidth=1.5]; } subgraph cluster_post { label = "处理后期间"; bgcolor="#e9ecef"; style=filled; node [style=filled]; color="#ced4da"; T1_post [pos="2,1.5!", label="", color="#1c7ed6"]; Tr_post_cf [pos="2,2.5!", label="", color="#fa5252"]; Tr_post_obs [pos="2,3.5!", label="", color="#f03e3e"]; T1_pre -> T1_post [style=solid, color="#1c7ed6", penwidth=1.5]; Tr_post_cf_pt -> Tr_post_cf [style=dashed, color="#fa5252", penwidth=1.5]; Tr_post_cf -> Tr_post_obs [style=solid, color="#f03e3e", penwidth=2, arrowhead=none, arrowtail=none, label=" DiD 效应", fontcolor="#495057", fontsize=10]; } # Labels outside clusters lab_ctrl [shape=plaintext, label="对照组", pos="2.5,1.25!", fontcolor="#1c7ed6"]; lab_treat_obs [shape=plaintext, label="处理组 (观测值)", pos="2.8,3.5!", fontcolor="#f03e3e"]; lab_treat_cf [shape=plaintext, label="处理组 (反事实趋势)", pos="3.4,2.5!", fontcolor="#fa5252"]; # Axis labels x_axis [shape=plaintext, label="时间", pos="1,0!"]; y_axis [shape=plaintext, label="结果", pos="-0.5,2!"]; }平行趋势假设的图示。实心蓝线显示对照组随时间变化的结果。实心红线显示处理组的观测结果。虚线红线表示在平行趋势假设成立且处理组未接受处理的情况下,它们会遵循的反事实趋势。DiD 估计值是处理后期间观测结果与反事实趋势之间的垂直差异。由于这个假定涉及反事实,它不能被直接检验。然而,我们可以评估其合理性:预处理趋势的视觉检查: 如果您有多个处理前时间段,在处理前绘制两组随时间变化的平均结果。如果趋势在处理前期间看起来平行,这会增加一个假定的可信度,即在没有处理的情况下,它们之后也会保持平行。发散的预处理趋势是一个重要的警示。安慰剂检验: 仅使用处理前数据。在处理前时间线中更早地指定一个虚假的“处理”期间,并运行 DiD 分析。如果此安慰剂检验中存在非零“效应”,则表明各组可能存在固有的趋势差异,这使实际处理期间的平行趋势假设受到质疑。添加协变量: 如果平行趋势仅在某些可观测协变量条件下成立,则应将它们包含在模型中(见下文)。DiD 的回归框架尽管 2x2 计算很直观,DiD 更常使用回归框架实现,该框架可轻松扩展到多个组、多个时间段以及包含协变量。对于 2x2 的情况,回归模型为:$$ Y_{it} = \beta_0 + \beta_1 T_i + \beta_2 P_t + \delta (T_i \times P_t) + \epsilon_{it} $$这里:$\beta_0$ 是对照组在处理前期间的基线平均结果。$\beta_1$ 是处理组和对照组在处理前期间的平均差异。$\beta_2$ 是对照组从处理前到处理后期间结果的平均变化。$\delta$ 是 DiD 估计值,表示处理组在处理后期间相对于对照组的额外结果变化。它在平行趋势假设下捕捉处理效应。对于具有许多单元 ($i=1,...,N$) 和时间段 ($t=1,...,K$) 的面板数据,更一般的方法使用双向固定效应:$$ Y_{it} = \alpha_i + \lambda_t + \delta T_{it} + X_{it}'\beta + \epsilon_{it} $$$\alpha_i$:单元固定效应。这些是每个单元的虚拟变量(或等效地,数据在每个单元内进行去均值化)。它们吸收单元 $i$ 的所有不随时间变化的特征,无论是否可观测。这是 DiD 控制不随时间变化的混杂因素的方式。$\lambda_t$:时间固定效应。这些是每个时间段的虚拟变量。它们吸收在时间段 $t$ 中影响所有单元的所有共同冲击或趋势。$T_{it}$:单元 $i$ 在时间 $t$ 的处理指示变量。这允许处理时间点的变化。$X_{it}$:可选的时变协变量向量。如果平行趋势假设仅在这些协变量条件下成立,包含它们会有帮助。$\delta$:处理组平均处理效应 (ATT) 的 DiD 估计值。在这种情况下,平行趋势假设意味着,在 $X_{it}$ 的条件下,并考虑了单元和时间固定效应后,在没有处理的情况下,处理单元和对照单元之间的趋势将是平行的。高级考量:错时处理和动态效应尽管双向固定效应模型很强大,但最近的研究强调了潜在的问题,尤其是在处理时间点因单元而异时(错时处理)。错时处理偏差: 当单元在不同时间采用处理时,标准双向固定效应估计量 $\delta$ 可能会有偏差。这种偏差的产生是由于估计量隐式地将已处理单元用作晚处理单元的对照,反之亦然,可能导致误导性估计(有时甚至对某些比较产生负权重)。Goodman-Bacon (2021)、Callaway & Sant'Anna (2021) 和 Sun & Abraham (2021) 的著作详细阐述了这些问题。解决办法: 使用专门为错时处理设计的估计量。示例包括 R/Stata 中的 did 包(实现 Callaway & Sant'Anna)或 fixest R 包中的 sunab 函数(实现 Sun & Abraham)。这些方法通常更仔细地定义比较,通常只将新处理组与从未处理或尚未处理的组进行比较。动态处理效应(事件研究): 处理效应可能不是恒定的;它可能会在处理开始后随时间演变。为了估计这些动态效应,我们用一系列相对于处理时间点的指示变量替换单个 $\delta T_{it}$ 项: $$ Y_{it} = \alpha_i + \lambda_t + \sum_{k=k_{min}}^{k_{max}} \delta_k D_{it}^k + X_{it}'\beta + \epsilon_{it} $$ 这里,$D_{it}^k$ 是一个指示变量,如果单元 $i$ 在时间 $t$ 已经接受处理 $k$ 个周期则为 1($k$ 在处理前期间可以是负数,在处理开始期间为 0,在处理后期间为正数)。将估计的 $\delta_k$ 系数与 $k$(相对于处理的时间)绘制在一起,可以生成一个“事件研究”图。此图对于以下方面很有价值:检查预处理趋势:$k<0$ 的系数 $\delta_k$ 理想情况下应接近于零且统计上不显著。显著的预处理“效应”表明违反了平行趋势假设。理解效应演变:观察 $\delta_k$ 如何在 $k \ge 0$ 时变化,显示了处理的动态影响。注意: 在错时处理设置中,使用标准双向固定效应模型估计动态效应会遭受与静态情况类似的偏差。再次建议使用(如上所述的)估计量。实现细节软件: Python 中的 statsmodels 和 linearmodels 等库,或 R 中的 fixest、lfe 和 did 等库,用于估计固定效应模型和 DiD 变体。标准误: 对于面板数据,同一单元内的观测值通常随时间相关。通常做法是在单元级别(例如,个体、公司、州)聚类标准误,以解决这种序列相关性。双向聚类(例如,按单元和时间)也可以根据情况考虑。数据结构: 确保您的数据采用“长”面板格式,每行代表一个唯一的单元-时间观测值,包含单元和时间的标识符、结果变量、处理状态指示符以及任何协变量。总结与局限性差中差法是一种广泛使用且有效的方法,用于使用面板数据估计因果效应,尤其是在关注不随时间变化的未观测混杂因素时。它的优势在于直观的平行趋势假设。然而,请记住其重要方面和局限性:识别: 根本上依赖于平行趋势假设,这需要仔细的论证和合理性检查(尤其是预处理趋势分析)。混杂因素: 通过单元固定效应控制不随时间变化的未观测混杂因素,通过时间固定效应控制共同的时间趋势。错时处理: 标准的双向固定效应模型在错时处理采用时可能会有问题;在这种情况下请使用现代估计量。动态效应: 事件研究图对于检查预处理趋势和效应演变很有用,但在错时设置中需要强有力的估计量。时变混杂因素: DiD 不 内在地控制时变混杂因素,特别是那些可能受到过去处理影响的(处理后偏差)。如果存在此类混杂因素,DiD 估计可能会有偏差,可能需要替代方法(如合成控制或某些结构模型)。通过理解这些原理和潜在的复杂性,您可以有效运用 DiD 及其现代扩展,从复杂机器学习系统中的面板数据得出更可靠的因果推断。