R:使用 MatchIT 进行最近邻匹配

R: Nearest neighbour matching with MatchIT

我想在 R 中使用 MatchIt 进行最近邻匹配。 到目前为止,我使用了以下代码:

Matching<- matchit(Treatment ~ Size+ Age + Expenses, data=data, method = "nearest", distance="glm", replace=TRUE)

我有两个问题:

问题 1.)

当我再次 运行 这段代码和 运行 Matching 时,我得到了一个总结。 然后一行说

A matchit object
 - method: 1:1 nearest neighbor matching with replacement

如果需要,我希望多次匹配相同的控制观察。 上面的代码是这样做的吗? 我很困惑,因为它说 1:1 最近邻匹配与替换,我不知道它现在是否只使用控制组中的观察不超过一次,因为句子中的 1:1 部分。但是,由于我在代码中使用了 replace=true,我认为这正是这样做的,因此可以多次匹配对照组中的一个观察结果。

有人能解释一下我的理解是否正确吗?

问题2.)

拥有后运行

Matching<- matchit(Treatment ~ Size+ Age + Expenses, data=data, method = "nearest", distance="glm", replace=TRUE)

我想估计平均治疗效果。 我使用以下文档作为如何估算它的参考: https://cran.r-project.org/web/packages/MatchIt/vignettes/estimating-effects.html#after-pair-matching-with-replacement 但是,我想按子类和 id 使用集群标准错误。 因此,我需要先写代码:

Matching_gm <- get_matches(Matching)

当我查看 Matching_gm 的权重时,它们总是 1。但是,当我 运行 summary(Matching$weigths) 时,有很多权重与 1 不同。 为什么当我使用 get_matches 时权重会改变?据我所知,应该不是这样的。

  1. 之所以称为1:1匹配,是因为每个被处理的单元得到一个匹配,但是控制单元有可能被重复用作多个被处理单元的匹配。如果您将 ratio 设置为 1 以外的其他值,您将进行 k:1 匹配,其中每个处理过的单元得到 k 个匹配项,由可用于其他处理过的单元的控件组成。

  2. get_matches() 每次匹配时都会为每个单元生成一行。如果一个控制单元匹配两次(即匹配到两个不同的处理单元),它将在 get_matches() 输出中有两行,每行的权重为 1,但在 [=13] 中的权重为 2 =] 输出(尽管这个权重可能被缩放为不同于 2)。如果您使用 match.data() 而不是 get_matches(),您将看到每个单元只接收一行并且每个控制单元的权重与 matchit() 输出中的相同。