如何在 R 中使用 matchit() 指定样本大小?

How do I specify sample size with matchit() in R?

我有一个包含 120 个实验对象和 147 个对照的数据框。我想让两组 100 人在年龄、性别和 BMI 上匹配。

使用 MatchIt 包:

match.it <- matchit(group ~ age + sex + bmi , data, method="nearest", ratio=1)
summary(match.it)$nn  #return sample sizes
          Control Treated
All           147     120
Matched       120     120
Unmatched      27       0
Discarded       0       0

您可以看到它自动 returns 样本大小等于原始样本大小中的最小值。我想强制它只保留 100 个控制和 100 个处理过的样本,但我不想指定是哪些。我已经搜索了文档,但没有看到指定匹配样本大小的方法(仅处理与控制的比率)。

  1. 有没有我忽略的方法?
  2. 如果没有,是否有办法使用 'distance' 指标 return 由 match.data() 编辑?
  3. 如果 MatchIt 不是合适的包,您知道更好的包吗?

谢谢


更新:我能够 return 使用 summary(match.it)$match.matrix 匹配的主题并将它们放入新的数据框中。我还包括了它们的距离并计算了每对距离之间的差异。如果我要用它来选择 100 对,我应该选择距离差异最小的那些,还是平均距离最小的那些,或者其他什么。我对数学不够熟悉,不知道如何解释距离。

编辑:修正了代码中的错字

我将简要说明我是如何解决我的问题的,然后在我有更多时间时尝试返回更详细的说明,包括一些代码。

matchit() 函数将 return 按行号排列的匹配案例列表 [["matched.matrix"]] 而 match.data() 函数将 return将个案与原始数据相匹配,加上每个个案的距离度量(由最近邻法计算)。

请记住,我真的不知道如何解释距离度量,所以我尝试了几种不同的方法来挑选最好的 100 对。我用每一对连续制作了一个数据框,并计算了距离的绝对差和距离的平均值。然后,我测试了 100 对不同子集的 t-tests 治疗组和对照组之间的年龄、性别和 BMI。这五个小组是; 1. 随机选择 100 对, 2. 基于平均距离的前 100 对, 3. 基于平均距离的后 100 对, 4. 基于距离差异的前 100 对,以及 5. 基于距离差异的后 100 对。

在我的数据集中,第 5 组产生了最好的结果(年龄、性别和 BMI 组之间的显着差异最小)。我不确定这些结果是否会扩展到其他数据集,但如果更接近的差异意味着更接近匹配的案例,那是有道理的。

抱歉,如果我的冗长解释不是很清楚。我会尝试稍后回来编辑它以添加示例代码并清理它。