You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加权KM估计差异:svykm与survfit结果不一致的技术问询

病例对照研究中加权与未加权Kaplan-Meier曲线不重叠问题及实现代码

我在病例对照研究中使用权重开展生存分析,所有病例的权重设为1。但绘制加权与未加权Kaplan-Meier(KM)曲线时,发现病例组的KM曲线并未重叠。以下是使用survival包实现的完整流程代码,涵盖权重计算、三种KM估计(朴素survfit、带权重的survfit、svykm)及曲线绘制、结果提取:

library(dplyr)
library(tidyverse)
library(survival)
library(broom)
library(WeightIt)
library(survey)


a <- survival::ovarian

# 计算权重:
weights <- WeightIt::weightit(rx ~ age + ecog.ps + resid.ds, int = T, estimand = "ATT", data = a, method = "glm" , stabilize = F, missing = "saem") 
a$weights <- weights$weights
a$ps <- weights$ps

design <- svydesign(ids = ~ 1, data = a, weights = ~weights)

KM_PFS <- survfit(Surv(futime, fustat > 0)~rx, a) # 朴素KM估计
KM_PFS_w_TT <- survfit(Surv(futime, fustat > 0)~rx, a, weights = weights, robust = T)
KM_PFS_w <- svykm(Surv(futime, fustat > 0)~rx, design = design,se=T)


par(mfrow=c(1,1))
plot(KM_PFS_w[[2]], lwd=2, col=c("red"),xlab="时间(月)",ylab="无进展生存期(PFS)",#svykm处理组
     xaxt="n", ci=F)
#lines(KM_PFS_w[[1]],col=c("blue"),lwd=2)
lines(KM_PFS,col=c("black","black"),lwd=2,lty=c(0,2)) # 朴素KM处理组
lines(KM_PFS_w_TT,col=c("orange","violet"),lwd=2,lty=c(0,1))# 加权TT KM处理组

cas_km_w_TT <- tidy(KM_PFS_w_TT)%>%filter(strata == "rx=1")
cas_km <- tidy(KM_PFS)%>%filter(strata == "rx=1")
cas_km_w <- do.call("rbind", lapply(names(KM_PFS_w), \(x) {
  data.frame(strata = x, do.call("cbind", KM_PFS_w[[x]]))
})) %>% filter(strata ==1)

内容的提问来源于stack exchange,提问作者SofiaB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:47:17