倾向得分与面板数据匹配

Propensity Score Matching with panel data

我正在尝试使用 MatchIt 为我的面板数据执行倾向得分匹配 (PSM)。数据是面板数据,包含来自同一组公司的多年观察结果。

这些数据基本上是描述了一张债券数据的清单,以及他们发行人的财务数据,以及他们发行的债券的发行日期、票面利率、到期日、债券类型等债券条款。例如:

Firmnames Year ROA Bond_type
AAPL US Equity 2015 0.3 0
AAPL US Equity 2015 0.3 1
AAPL US Equity 2016 0.3 0
AAPL US Equity 2017 0.3 0
C US Equity 2015 0.3 0
C US Equity 2016 0.3 0
C US Equity 2017 0.3 0

......

我已经知道如何根据我想要的标准来匹配观察结果,并且我使用 exact = Year 来确保我与同一年的观察结果相匹配。我现在面临的问题是,来自同一家公司的观察结果会匹配在一起,这不是我想要的。我使用的代码:

matchit(Bond_type ~ Year + Amount_Issued + Cpn + Total_Assets_bf + AssetsEquityRatio_bf + Asset_Turnover_bf, data = rdata, method = "nearest", distance = "glm", exact = "Year")

但是,如您所见,在我样本的第二个原始数据中,由于我研究的性质,同一公司一年内可能有两次观察(公司可以多次发行债券年)。它们之间的唯一区别是 Bond_type。因此,MathcIt 函数当然会将它们视为最佳控制组和治疗组,并将这两个观察值匹配在一起,因为它们在那一年具有相同的 ROA 和其他匹配因子。

我认为有两种方法可以解决这个问题:

  1. 删除同一年份和公司的观察结果,但是,删除观察结果可能会导致结果偏差并破坏研究。

  2. Preventing MatchIt 函数与来自同一公司(或具有相同 Frimnames)的观察结果相匹配

第二种方法会更好,因为它不会导致偏差,但是,我不知道我是否可以在 MatchIt 函数中这样做。希望有人能给我一些建议,或者有更好的解决方案,请与我分享,在此先感谢!

注意:如果有任何进一步的信息或要求我应该提供,请告诉我。这是我第一次在这里提出问题!

目前 MatchIt 无法做到这一点(尽管这是一个有趣的想法并且不难实现,所以我可能会将其添加为一项功能)。

在执行最优对和全匹配的optmatch包中,有一个可以添加的约束,称为“反精确匹配”,这听起来正是您想要的。具有相同反精确匹配变量值的单元将不会相互匹配。这可以使用 optmatch::antiExactMatch().

来实现

在执行最近邻和遗传匹配的Matching包中,可以将restrict参数提供给匹配函数以限制某些匹配。您可以通过限制同一公司中的所有观察对来手动创建限制矩阵,然后将该矩阵提供给 Match().