【发布时间】:2018-08-06 10:02:10
【问题描述】:
我有一个包含 120 个实验对象和 147 个对照的数据框。我想得到两组年龄、性别和 BMI 匹配的 100 人。
使用 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
您可以看到,它会自动返回与原始样本量中最小的样本量相等的样本量。我想强制它只保留 100 个对照和 100 个处理过的样本,但我不想指定哪些。我浏览了文档,但没有看到指定匹配样本大小的方法(仅处理与控制的比率)。
- 有没有我忽略的方法?
- 如果没有,有没有办法使用 match.data() 返回的“距离”指标?
- 如果 MatchIt 不适合这个,你知道更好的吗?
谢谢
更新:我能够使用 summary(match.it)$match.matrix 返回匹配的主题并将它们放入新的数据框中。我还包括了它们的距离并计算了每对之间的距离差。如果我要使用它来选择 100 对,我应该选择距离差异最小的那些,还是最小平均距离的那些,或者其他什么。我对数学不够熟悉,无法确切地知道如何解释距离。
编辑:修正了代码中的一个错字
【问题讨论】:
-
如果我们能看到
data,这将更容易回答。另外,应该是summary(match.it)而不是summary(match.it.1)吗?一种可能性是从match.it$match.matrix中提取匹配的行名,使用它们对原始数据框进行子集化,然后使用dplyr::sample_n()之类的东西来获得100 个随机采样的匹配行。 -
感谢您指出错字,neilfws。当我进行更新时,我提取了匹配的对,但正在考虑使用距离来选择最匹配的对。你认为随机抽样会更好吗?我想这并不重要,只要年龄、性别和 BMI 的群体差异是可以接受的。
-
我假设随机样本基于您的标准“保留 100 个对照和 100 个处理样本,但我不想指定哪些样本。”如果您想要“按距离排列的 100 个最佳匹配项”,那是一个不同的标准。我想哪个更好取决于下一步。例如,您可能想要抽样并查看结果是否具有可比性。
-
你也可以考虑性别的精确匹配,因为基于距离的匹配对于这个变量来说有点傻。我没有玩过
matchit,但我知道Matching包有一个确切的论点。其他需要考虑的事情。