倾向得分与面板数据匹配

机器算法验证 状态 面板数据 倾向评分
2022-02-03 23:27:33

我有个人的纵向数据集,其中一些人接受了治疗,而另一些人则没有。所有个体从出生到 18 岁都在样本中,并且治疗发生在该范围之间的某个年龄。治疗的年龄可能因病例而异。使用倾向得分匹配,我想将治疗和控制单位成对匹配,并在出生年份进行精确匹配,这样我就可以跟踪每一对从出生年份到 18 岁的情况。总而言之,大约有 150 名接受治疗和 4000 名未经治疗的人。匹配后的想法是使用差异中的差异策略来估计治疗效果。

我目前面临的问题是与面板数据进行匹配。我正在使用 Stata 的psmatch2命令,并使用倾向得分匹配来匹配家庭和个人特征。一般来说,对于面板数据,每个年龄都会有不同的最佳匹配。例如:如果 A 被处理,B 和 C 是对照,并且他们都是 1980 年出生的,那么 A 和 B 可能在 1980 年匹配到 0 岁,而 A 和 C 在 1981 年匹配到 1 岁,依此类推. A 也可以与其前几年的预处理值相匹配。

为了解决这个问题,我取了所有随时间变化的变量的平均值,以便匹配可以识别在样本期间平均最相似的个体,并且我对 0 到 18 岁的每个年龄组分别进行匹配。不幸的是,这仍然将不同的控制单元与每个年龄组的每个处理单元匹配。

如果有人可以指导我找到一种与 Stata 中的面板数据进行配对匹配的方法,我将不胜感激。

4个回答

您基本上必须创建一个具有与匹配过程相关的所有特征的宽格式数据集,在此横截面数据集上执行匹配,然后使用 ID 来识别面板数据集中的匹配对。以下是更多细节:

  1. 用于reshape创建宽格式数据集。以您希望在匹配过程中使用它们的方式格式化预处理变量。如果您对一个人有多个观察值,您可以只取变量的平均值,但您也可以提出其他方法(您还可以保留对相同变量的多个观察值,例如 health1、health2 并在匹配中使用所有这些观察值)。目标是拥有一个数据集,每个人都有一次观察

  2. 使用此数据集,使用 执行匹配过程psmatch2

  3. 将匹配案例的信息与原始数据集合并。不匹配的丢弃案例等。我不确定这里的细节,因为我真的不知道 stata,psmatch2但我想你明白了。

使用这些步骤,您可以根据所有预处理信息匹配病例,并且每个治疗单元只有一个匹配。

在 Stata 或我知道的任何其他软件中都没有办法做到这一点。

如果您尝试使用面板数据技术修补有偏差的匹配估计器,这里有一种方法可能有效。如果您可以假设匹配处理了一些(但不是全部)选择偏差,但偏差在很大程度上保持不变,您可以通过在每个时期构建单独的匹配估计并取区别。

为预处理期,为后期。如果未处理状态结果满足ttY0

E[Y0t|X,D=1]E[Y0t|X,D=0]=E[Y0t|X,D=1]E[Y0t|X,D=0]=Bias,
那么如果,可以得到ΔtM=ΔTT+BiasΔtM=BiasΔtMΔtM=ΔTT

Heckman、Ichimura、Smith 和 Todd 1998 Econometrica和 Eichler 和 Lechner 2002劳动经济学论文就是这种方法的例子。另一方面,150 个经过处理的观察结果可能不足以使这种方法发挥作用。

脚步:

  1. 正如 Greg 详细提到的那样,您可以使用横截面数据集,无论是在预处理手段上还是在特定的预处理期上来生成匹配。

  2. 使用整个面板,您可以为
    a 分配指标变量。处理过的个人
    B. 处理期间,一旦对被处理的个人进行处理,后者就等于零。

    由于 TreatPeriod 从 0 变为 1 的时间点因人而异,并且对于未处理的匹配永远不会变为 1,因此您必须将相同的起点从已处理的匹配分配到未处理的匹配。这是直观的,但我仍然希望看到一个很好的参考来证明我到目前为止还没有找到的这种方法。

回归设置将是:

depvar = treatedIndvidual + treatedPeriod  + treatedIndvidual*treatedPeriod + controls

其中交互项为您提供治疗效果。

您是否考虑过使用nnmatch命令?

我使用这个命令,它是一个非常全面的命令。它确实考虑了不同的匹配算法以及某些控制组个体的倾向得分相同的情况。当然,这种情况的处理取决于匹配算法,如果您采用 k-nearest-neighbour 或 kernel 或其他什么。