【问题标题】:Propensity Score Matching using MatchIt. How to introduce a caliper to an exact additional specification使用 MatchIt 进行倾向得分匹配。如何将卡尺引入精确的附加规格
【发布时间】:2019-08-08 13:04:44
【问题描述】:

我是 R 新手,我使用 matchit 通过倾向得分匹配患者。我的数据集包括两组患者,它们的不同之处在于他们是否接受了药物。除了倾向得分匹配外,我还想精确匹配年龄、性别和家庭实践,因为治疗决定确实因这些特征而异。

我的问题是我想精确匹配年龄 ± 2 岁,因为我想通过增加精确匹配的灵活性(而不是使用任意截止值,例如分类年龄变量)。

下面的代码运行良好

match.1 <-  matchit(exposed ~ imd2010_5 + hyp + mhealth + mm_score + GP_consult + smoke + no_pres3m + lterm_pres + pres_rate, 
data=dataset_pscore2, 
distance=dataset_pscore2$pscores, 
method="nearest", 
exact=c("gender", "pracid", "age_cat"), 
discard="both", 
caliper=0.25, 
ratio=2)

我只是想将确切的代码更改为类似

exact=c("gender", "pracid", "age" *with a caliper*),

这可能吗?

【问题讨论】:

  • 这不能用MatchIt 完成。您应该查看 designmatch 包,它专门针对需要复杂约束的这些问题而编写。

标签: r propensity-score-matching


【解决方案1】:

据我所知,倾向得分匹配 (PSM) 通常使用 LOGIT 回归来找到估计的倾向得分,作为避免维度诅咒的一种方法。因此,进行精确匹配在 PSM 设置中的某些协变量中听起来不太可能。

我建议运行两个匹配程序:第一个对您希望精确匹配的协变量进行精确匹配。然后,在其他协变量的新匹配样本上运行 PSM。

举个例子:

match.1 <-  matchit(exposed ~ gender + pracid + age_cat, 
data=dataset_pscore2, 
method="exact")

matched_sample <- match.data(match.1) # Get Propensity Scores for 'matched_sample'

match.2 <-  matchit(exposed ~ imd2010_5 + hyp + mhealth + mm_score + GP_consult + smoke + no_pres3m + lterm_pres + pres_rate, 
data=matched_sample, 
distance=matched_sample2$pscores, 
method="nearest", 
discard="both", 
caliper=0.25, 
ratio=2)

我还建议阅读MatchIt 软件包文档。还有另一个很棒的包,叫做cem

【讨论】:

【解决方案2】:

您现在可以(从 matchIt 版本 4.0.0 开始)为 caliper` 参数提供特定的协变量,以在另一种匹配方法的上下文中直接请求它们上的卡尺。例如,这应该是这样的:

match.1 <-  matchit(exposed ~ imd2010_5 + hyp + mhealth + mm_score + GP_consult + smoke + no_pres3m + lterm_pres + pres_rate, 
                    data=dataset_pscore2, 
                    distance=dataset_pscore2$pscores, 
                    method="nearest", 
                    exact=c("gender", "pracid"), 
                    discard="both", 
                    caliper=c(0.25, age = 2),
                    std.caliper = c(TRUE, FALSE),
                    ratio=2)

关键行是caliper=c(0.25, age = 2)std.caliper = c(TRUE, FALSE)caliper 行表示我们希望距离度量(即倾向得分)的卡尺为 0.25,age 的卡尺为 2。 std.caliper 行表示我们希望第一个卡尺采用标准偏差单位,第二个卡尺采用原始单位。这样,您的单位必须在倾向得分的 0.25 个标准差范围内并且在 2 岁以内才能相互匹配。有关详细信息和示例,请参阅help("method_nearest", package = "MatchIt") 的文档。

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2021-10-01
    • 2020-04-26
    • 1970-01-01
    • 2015-09-25
    • 2021-10-18
    相关资源
    最近更新 更多