首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MatchIt -如何指定匹配日期?

MatchIt -如何指定匹配日期?
EN

Stack Overflow用户
提问于 2021-06-10 15:28:36
回答 1查看 69关注 0票数 0

我正在尝试使用MatchIt创建两组匹配的投资公司(处理和控制)。

我需要将治疗公司与对照公司进行匹配,只使用治疗前1-3年的数据。

例如,如果一家公司在2009年接受了治疗,那么我希望使用2009,2008,2007年的数据来匹配它(在这种情况下,我的治疗后效果虚拟将保持2010年以后的值)

我不确定如何将此选择添加到我的匹配代码中,当前代码如下所示:

matchit(签字人~ totalUSD + brownUSD +国家+战略,data = panel6,method = "full")

我应该考虑以某种方式使用“后处理”效果吗?

任何关于我如何添加这个的提示都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2021-06-11 03:05:58

MatchIt中没有简单的方法可以做到这一点。你可以设置一个卡尺,它要求控制公司与接受治疗的公司在一定的年限内,但没有办法要求控制公司在接受治疗的公司之前有严格的一年。您可以使用exact参数在年份上执行精确匹配,以便处理公司和控制公司具有完全相同的年份。

另一种稍微复杂一点的方法是自己构造一个距离矩阵,并将禁止相互匹配的单元之间的任何距离设置为Inf。第一步是估计倾向分数,这可以手动完成,也可以使用matchit()完成。然后构造一个距离矩阵,并为距离矩阵中的每个条目决定是否将距离设置为Inf。FInaly,您可以向matchit()distance参数提供距离矩阵。下面是你该怎么做的:

代码语言:javascript
运行
复制
#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()查看匹配公司的单个组来进行验证

代码语言:javascript
运行
复制
md <- match.data(m, data = panel6)
md <- md[with(md, order(subclass, signatory)),]
View(md) #assuming you're using RStudio

您应该看到,在子类中,控制单元比处理单元低0-2年。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67916605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档