首页 > 解决方案 > 在 R 中使用 cardmatch 执行匹配后的结果分析

问题描述

使用下面的这个包执行匹配后:

https://rdrr.io/cran/designmatch/man/cardmatch.html

我如何获得回归风格的输出格式,而不是简单地计算均值的差异?

在上面链接中的卡片匹配代码的最后一步之后:

# The mean difference in outcomes is the same...
mean(re78[t_id_1]-re78[c_id_1])
mean(re78[t_id_2]-re78[c_id_2])

# ... but their standard deviation is reduced
sd(re78[t_id_1]-re78[c_id_1])
sd(re78[t_id_2]-re78[c_id_2])

我对这样的事情感兴趣,而不是简单地获得手段上的差异。

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   2.3483     0.1007  18.681  < 2e-16 ***
treated      -7.4793     0.8387  -6.459 4.87e-10 ***

如何从 cardmatch 包步骤形成数据框,然后使用 glm 或 svyglm 执行结果分析?

标签: rcardinalitypropensity-score-matching

解决方案


如果您不想保留对成员资格,只需使用返回的t_id和输出c_id的组件对您的数据集进行子集化cardmatch。例如,如果调用了输出对象并且调用了cm您的数据集data,则运行以下命令将创建一个仅包含匹配单元的数据集:

data_matched <- data[c(cm$t_id, cm$c_id),]

如果您关心配对成员并希望创建一个表示每个单元的配对 ID 的变量,您可以使用以下代码(假设data不存在 的行名称或只是索引该行的数字):

pair_df <- data.frame(pair = factor(c(seq_along(cm$t_id), 
                                      seq_along(cm$c_id))), 
                      row.names = c(cm$t_id, cm$c_id))
data_matched <- merge(data, pair_df, by = 0, all.x = TRUE, sort = FALSE)[-1]

任何不匹配的单位都将NA用于新pair变量(或者您可以设置all.x = FALSE为仅保留匹配的单位)。您可以pair在混合效应模型中使用变量作为随机效应,glmer()lme4包中使用(相当于配对 t 检验)或在标准回归模型中使用集群稳健标准误差glm()来解释分析中的配对。您可以添加协变量以提高精度并减少剩余偏差。


推荐阅读