我正在使用MatchIt包在R中运行匹配过程。我使用倾向得分匹配,即:通过logit估计治疗选择,并选择最接近的匹配。
数据集很大(400万行),有没有办法加快速度?
要明确我所做的事情:
require(MatchIt)
m.out <- matchit(treatment ~ age + agesq + male + income + ..., data = data, metod = "nearest")
答案 0 :(得分:0)
我同样感到沮丧,但为我的情况找到了解决方案。
从本质上讲,通过将倾向得分匹配分为 3 个步骤,我发现了显着的运行时间减少:
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,所以上面的代码适用于这种情况。