You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用ggsurvplot合并两组Cox PH模型对应的Kaplan-Meier曲线?

合并两组Kaplan-Meier曲线到同一图中的方法

要把你手中两组(≤19岁和>19岁)的Kaplan-Meier曲线合并展示,最简洁高效的方式是先将两个数据集合并并添加分组标识,再统一拟合生存曲线后绘图,具体操作如下:

1. 合并数据集并添加分组变量

因为两个数据集结构完全一致,我们可以用rbind()合并,同时通过transform()新增一列标记分组:

# 合并数据集并生成分组列
data.all.agefs <- rbind(
  transform(data.all.agefs.under19, age_group = "≤19岁"),
  transform(data.all.agefs.above19, age_group = ">19岁")
)

2. 创建统一的生存对象

基于合并后的数据集创建Surv对象,后续拟合曲线会用到:

surv.all.agefs <- Surv(time = data.all.agefs$follow.up.years, event = data.all.agefs$death.specific)

3. 拟合分组的Kaplan-Meier模型

使用survfit()按新添加的age_group分组拟合生存曲线:

km_fit <- survfit(surv.all.agefs ~ age_group, data = data.all.agefs)

4. 用ggsurvplot绘制合并曲线

调用ggsurvplot()绘制包含两组曲线的图,还可以自定义颜色、图例、风险表等元素:

library(survminer)
ggsurvplot(
  km_fit,
  data = data.all.agefs,
  palette = c("#E7B800", "#2E9FDF"), # 自定义两组曲线的颜色
  legend.title = "年龄分组",
  legend.labs = c("≤19岁", ">19岁"), # 自定义图例标签
  xlab = "随访时间(年)",
  ylab = "生存率",
  risk.table = TRUE, # 可选:添加下方的风险人数表
  pval = TRUE, # 可选:添加log-rank检验的P值
  surv.median.line = "hv" # 可选:添加中位生存时间的水平线
)

备选方案:不合并数据集的绘图方式

如果你不想合并原始数据集,也可以分别拟合两组的KM曲线,再用ggarrange()将两个ggsurvplot对象合并,但这种方式不如合并数据集的方法简洁,示例如下:

# 分别拟合两组KM曲线
km_under19 <- survfit(surv.all.agefs.under19 ~ 1, data = data.all.agefs.under19)
km_above19 <- survfit(surv.all.agefs.above19 ~ 1, data = data.all.agefs.above19)

# 分别生成绘图对象
p1 <- ggsurvplot(km_under19, data = data.all.agefs.under19, legend = "none", ylab = "生存率")
p2 <- ggsurvplot(km_above19, data = data.all.agefs.above19, legend = "none", xlab = "随访时间(年)")

# 合并两个图
ggarrange(p1$plot, p2$plot, ncol = 1, nrow = 1, common.legend = TRUE, legend = "bottom")

不过更推荐第一种合并数据集的方法,它能自动处理分组的图例、统计检验,整体更规范。

内容的提问来源于stack exchange,提问作者aposo.wie

火山引擎 最新活动