加速匹配

Rep*_*mat 8 performance r matching

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

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

为了说清楚我做了什么:

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

小智 1

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

本质上,我发现通过将倾向得分匹配分为 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)
Run Code Online (Sandbox Code Playgroud)

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

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