加速匹配

时间:2015-04-16 10:31:42

标签: r performance matching

我正在使用MatchIt包在R中运行匹配过程。我使用倾向得分匹配,即:通过logit估计治疗选择,并选择最接近的匹配。

数据集很大(400万行),有没有办法加快速度?

要明确我所做的事情:

require(MatchIt)
m.out <- matchit(treatment ~ age + agesq + male + income + ..., data = data, metod = "nearest")

1 个答案:

答案 0 :(得分:0)

我同样感到沮丧,但为我的情况找到了解决方案。

从本质上讲,通过将倾向得分匹配分为 3 个步骤,我发现了显着的运行时间减少:

  1. 运行回归模型并将拟合值(即您的倾向得分)附加到您的数据中。
  2. 将数据列缩减为仅需要的内容:即唯一记录标识符和附加的倾向得分。我将修剪后的数据保存到磁盘(未显示),但如果所有内容都保存在内存中,您的实现可能仍会加快速度。
  3. 在修剪后的数据上运行 matchit,并将您的倾向得分作为用户提供的距离,然后连接完整原始数据中的所有列。
library(MatchIt)
library(tidyverse)
library(dplyr)

#step 1
data$myfit <- fitted(glm(treatment ~ age + agesq + male + income + ..., data = data, family = "binomial"))

#step 2
trimmed_data <- select(data, unique_id, myfit, treatment)

#step 3
m.out <- matchit(treatment ~ unique_id, data = trimmed_data, method = "nearest", distance = trimmed_data$myfit)
matched_unique_ids_etc <- match.data(m.out, data = trimmed_data)
matched_unique_ids <- select(matched_unique_ids_etc, unique_id)
matched_data <- matched_unique_ids %>% inner_join(data)

公式不影响最近邻匹配过程。

当我写这篇文章时,matchit 的默认距离/链接是 glm/logit,所以上面的代码适用于这种情况。