R语言中如何获取单、多变量生存分析的不同风险表?
解决多变量生存分析风险表与单变量一致的问题
问题根源
你直接把coxph()拟合的多变量模型传给ggsurvplot()时,函数默认用原始数据的分组信息生成风险表,而非多变量模型调整后的分组风险数据,所以才会和单变量分析的风险表完全一致。
正确操作步骤
要拿到多变量分析对应的专属风险表,得先基于多变量Cox模型生成调整协变量后的生存曲线对象,再传入ggsurvplot()。具体分三步:
1. 拟合多变量Cox模型
library(survival) library(survminer) # 模拟你的数据集结构(替换成你自己的真实数据) set.seed(123) data <- data.frame( time = sample(1:100, 100, replace = TRUE), status = sample(0:1, 100, replace = TRUE), age = rnorm(100, 60, 10), sex = factor(sample(c("Male", "Female"), 100, replace = TRUE)), treat = factor(sample(c("A", "B"), 100, replace = TRUE)) # 你关注的分组变量 ) # 拟合包含age、sex的多变量Cox模型 cox_model <- coxph(Surv(time, status) ~ treat + age + sex, data = data)
2. 生成调整后的生存曲线对象
用survfit()基于Cox模型生成控制协变量后的生存曲线,需要通过newdata固定age、sex等协变量的取值(比如取中位数、参考水平):
# 构造新数据集:固定其他协变量,只保留目标分组变量的不同水平 new_data <- expand.grid( treat = levels(data$treat), age = median(data$age), # 固定年龄为中位数 sex = levels(data$sex)[1] # 固定性别为参考水平(可按需修改) ) # 生成调整后的生存曲线对象 surv_adjusted <- survfit(cox_model, newdata = new_data)
3. 绘制带正确风险表的多变量生存曲线
把调整后的surv_adjusted传入ggsurvplot(),此时风险表会基于调整后的分组人群生成,和单变量的风险表就不一样了:
# 多变量调整后的生存曲线+风险表 ggsurvplot( surv_adjusted, data = new_data, risk.table = TRUE, pval = TRUE, conf.int = TRUE, legend.title = "Treatment", risk.table.title = "Number at Risk (Adjusted for Age & Sex)" ) # 单变量生存曲线(作为对比) surv_univariate <- survfit(Surv(time, status) ~ treat, data = data) ggsurvplot( surv_univariate, data = data, risk.table = TRUE, pval = TRUE, conf.int = TRUE, legend.title = "Treatment", risk.table.title = "Number at Risk (Unadjusted)" )
关键提示
new_data的作用是锁定其他协变量的取值,保证生存曲线只反映目标分组变量的效应,风险表也对应这个调整后的人群。- 如果想展示不同协变量组合下的风险表,直接修改
new_data的构造即可(比如同时包含不同性别水平)。
内容的提问来源于stack exchange,提问作者Max_1234
相关产品推荐
相关产品推荐

