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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:02:33