没有直接的方法可以做到这一点MatchIt
。您可以设置一个卡尺,要求控制公司与经过处理的公司相差一定年限,但没有办法要求控制公司在经过处理的公司之前有一年的时间。您可以使用参数对年份执行精确匹配,以便处理公司和控制公司具有完全相同的年份exact
。
另一种稍微复杂的方法是自己构建一个距离矩阵,并将其设置为Inf
禁止相互匹配的单元之间的任何距离。第一步是估计倾向得分,您可以手动或使用matchit()
. 然后你构造一个距离矩阵,并且对于距离矩阵中的每个条目,决定是否将距离设置为Inf
。最后,您可以将距离矩阵提供给 的distance
参数matchit()
。以下是你将如何做到这一点:
#Estimate the propensity score
ps <- matchit(signatory ~ totalUSD + brownUSD + country + strategy,
data = panel6, method = NULL)$distance
#Create the distance matrix
dist <- optmatch::match_on(signatory ~ ps, data = panel6)
#Loop through the matrix and set set disallowed matches to Inf
t <- which(panel6$signatory == 1)
u <- which(panel6$signatory != 1)
for (i in seq_along(t)) {
for (j in seq_along(u)) {
if (panel6$year[u[j]] > panel6$year[t[i]] || panel6$year[u[j]] < panel6$year[t[i]] - 2)
dist[i,j] <- Inf
}
}
#Note: can be vectorized for speed but shouldn't take long regardless
#Supply the distance matrix to matchit() and match
m <- matchit(signatory ~ totalUSD + brownUSD + country + strategy,
data = panel6, method = "full", distance = dist)
那应该行得通。您可以通过查看匹配公司的各个组来验证match.data()
:
md <- match.data(m, data = panel6)
md <- md[with(md, order(subclass, signatory)),]
View(md) #assuming you're using RStudio
您应该看到,在子类中,控制单位比处理单位低 0-2 年。