倾向得分与面板数据匹配
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 和其他匹配因子。
我认为有两种方法可以解决这个问题:
删除同一年份和公司的观察结果,但是,删除观察结果可能会导致结果偏差并破坏研究。
Preventing MatchIt
函数与来自同一公司(或具有相同 Frimnames
)的观察结果相匹配
第二种方法会更好,因为它不会导致偏差,但是,我不知道我是否可以在 MatchIt
函数中这样做。希望有人能给我一些建议,或者有更好的解决方案,请与我分享,在此先感谢!
注意:如果有任何进一步的信息或要求我应该提供,请告诉我。这是我第一次在这里提出问题!
目前 MatchIt
无法做到这一点(尽管这是一个有趣的想法并且不难实现,所以我可能会将其添加为一项功能)。
在执行最优对和全匹配的optmatch
包中,有一个可以添加的约束,称为“反精确匹配”,这听起来正是您想要的。具有相同反精确匹配变量值的单元将不会相互匹配。这可以使用 optmatch::antiExactMatch()
.
来实现
在执行最近邻和遗传匹配的Matching
包中,可以将restrict
参数提供给匹配函数以限制某些匹配。您可以通过限制同一公司中的所有观察对来手动创建限制矩阵,然后将该矩阵提供给 Match()
.
我正在尝试使用 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 和其他匹配因子。
我认为有两种方法可以解决这个问题:
删除同一年份和公司的观察结果,但是,删除观察结果可能会导致结果偏差并破坏研究。
Preventing
MatchIt
函数与来自同一公司(或具有相同Frimnames
)的观察结果相匹配
第二种方法会更好,因为它不会导致偏差,但是,我不知道我是否可以在 MatchIt
函数中这样做。希望有人能给我一些建议,或者有更好的解决方案,请与我分享,在此先感谢!
注意:如果有任何进一步的信息或要求我应该提供,请告诉我。这是我第一次在这里提出问题!
目前 MatchIt
无法做到这一点(尽管这是一个有趣的想法并且不难实现,所以我可能会将其添加为一项功能)。
在执行最优对和全匹配的optmatch
包中,有一个可以添加的约束,称为“反精确匹配”,这听起来正是您想要的。具有相同反精确匹配变量值的单元将不会相互匹配。这可以使用 optmatch::antiExactMatch()
.
在执行最近邻和遗传匹配的Matching
包中,可以将restrict
参数提供给匹配函数以限制某些匹配。您可以通过限制同一公司中的所有观察对来手动创建限制矩阵,然后将该矩阵提供给 Match()
.