【问题标题】:How do I specify sample size with matchit() in R?如何在 R 中使用 matchit() 指定样本大小?
【发布时间】: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 个处理过的样本,但我不想指定哪些。我浏览了文档,但没有看到指定匹配样本大小的方法(仅处理与控制的比率)。

  1. 有没有我忽略的方法?
  2. 如果没有,有没有办法使用 match.data() 返回的“距离”指标?
  3. 如果 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 包有一个确切的论点。其他需要考虑的事情。

标签: r matching


【解决方案1】:

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

matchit() 函数将按行号 [["matched.matrix"]] 返回匹配案例列表,而 match.data() 函数将返回匹配案例与原始数据,加上距离度量每种情况均按最近邻法计算。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2021-08-27
    • 2012-11-30
    • 2022-07-26
    • 2012-07-02
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多