r-带有频率权重的Survdiff(包生存率)(在粗略精确匹配-包匹配后获得)



我正在对生存数据进行反事实影响评估。更准确地说,我试图评估职业培训对失业时间的影响。我使用生存曲线的Kaplan-Meier估计量(包装生存率(。

在进行Kaplan-Meier之前,我使用粗化精确匹配(目标是ATT(来使对照组和治疗组在预处理协变量方面接近(package MatchIt(。

对于Kaplan-Meier估计器,我必须使用匹配中的权重,这在使用权重选项和生存拟合的鲁棒标准误差时效果良好:

library(survival)
library(survminer)
kp_cem <- survfit(Surv(time=time_cem,event=status_cem)~treatment_cem, data=data_impact_cem,robust =TRUE,weights =weights)

尽管如此,当我试图使用对数秩测试来测试治疗组和对照组之间生存曲线的差异时,我无法考虑匹配的频率权重,因此测试统计数据是不正确的。

log_rank <- survdiff(Surv(time=time_cem,event=status_cem)~treatment_cem, data=data_impact_cem,rho=0)

我尝试了";pval=TRUE";但是问题是一样的,没有考虑频率权重。

如何在surfdiff中包含频率权重?是否有其他包可以计算考虑频率权重的对数秩测试(匹配后获得(?

至少有两种方法可以做到这一点:

首先,您可以使用survey::svylogrank函数,正如@IRTFM所建议的那样。这将把权重视为采样权重,但我认为svylogrank使用的稳健标准误差也可以。

其次,您可以使用survival::coxph。logrank检验是Cox模型中的分数检验,coxph采用频率权重。如果您想要一个稳健的分数测试,请使用robust=TRUE:它将位于summary(your_cox_model)输出的底部,您可以将其提取为summary(your_cox_model)$robscore

非常感谢@Thomas Lumley和@IRTFM的回答。以下是我如何应用你的2条建议(我添加了一些评论+参考资料(。

1.使用调查::svylogrank

我觉得使用采样权重不太舒服,因为它实际上是我的频率权重。

我应该如何指定调查设计?权重来自粗集精确匹配(matchit with method="cem"(,它是一类地层匹配。我应该在勘测设计中指定地层和重量吗?在这种小插曲形式的Matchit估计匹配后的效果中,建议在生存分析中只使用权重和稳健的标准误差(而不是地层((第27页(。

以下是我如何指定设计,以及我如何使用考虑匹配权重的包调查获得对数秩测试:

library(survey)
design_weights <- svydesign(id=~ibis, strata=~subclass, weights=~weights, data=data_impact_cem)
log_rank <- svylogrank(Surv(time=time_cem,event=status_cem)~treatment_cem, design=design_weights, rho=0)

2.使用生存率::舵手

感谢您提供的这条信息,作为生存分析的新手,我忽略了cox模型和log-rank测试中得分测试等效性的这个好特性。对于希望了解更多这方面信息的人来说,我觉得这本书很有启发性:Moore,D.(2016(。使用R.纽约:纽约:施普林格(第58页(进行应用生存分析。

我发现这个2d选项比第一个涉及调查的选项更有吸引力。以下是我如何应用它:

library(survival)
cox_cem <-coxph(Surv(time=time_cem,event=status_cem)~treatment_cem, data=data_impact_cem,robust =TRUE,weights =weights)
sum_cox_cem <-summary(cox_cem)
score_test <-sum_cox_month[[13]][[1]]
score_test <- round(score_test,3) 
pvalue <- sum_cox_month[[13]][[3]]
pvalue <-if(pvalue<0.001){"<0.001"} else{round(pvalue,3)}

以下是两个测试统计数据之间的差异(最后非常接近(。在此处输入图像描述

尽管如此,我仍然想知道为什么surfdiff中不存在权重选项。

最新更新