ggsurvplot 和 ggplot 格子?!绘制具有累积关联函数的 kaplan-meier 曲线

问题描述

我想在一个图中将卡普兰迈耶曲线 (KM) 和累积事件或累积关联函数 (CIF) 绘制为格子。

我最近从 SAS 切换到 R,在 SAS 中,您可以使用宏一步完成所有操作(请参阅 this image),但我在 R 中还没有找到类似的东西。

enter image description here

目前,我为两个单独的图形运行了一个代码。第一个使用 survfit 绘制 ggsurvplot 对象,导致 KM 曲线,而第二个使用 cuminc 在多次转换后绘制 ggplot 对象。 ggcompetingrisks 不是很优化,所以我不使用它。此外,我有兴趣绘制一种特定的竞争风险,例如癌症死亡,而不是所有竞争风险。

这是我当前使用 survminer 包中的 BMT 数据帧的代码示例。

library(survminer)
library(cmprsk)
data(BMT)

# I'll add the variable Death to plot overall survival.
BMT <- mutate(BMT,death = ifelse (status == 1,1,0))

# KM plot:
figKM <- ggsurvplot(survfit(Surv(ftime,death) ~ dis,BMT))
figKM

# CIF plot:
cif <- cuminc(ftime = BMT$ftime,fstatus = BMT$status,group = BMT$dis,cencode = 0)
cifDT <- cif %>% 
  list_modify("Tests" = NULL) %>% 
  map_df(`[`,c("time","est"),.id = "id")  %>% 
  filter(id %in% c("0 1","1 1")) # to keep the incident I want

figCIF <- ggplot (cifDT,aes(x = time,y = est,color = id)) + geom_step(lwd = 1.2)
figCIF

有没有办法把 figKM 和 figCIF 放在一个格子图中?可以通过不同的方式绘制它们吗?

解决方法

如果您使用 classstr 查看 figKM 对象的内容,您会看到该列表中的第一项是“情节”,因此这似乎符合您的要求您的评论:

 library(cowplot)
 plot_grid(figKM[[1]],figKM[[1]],nrow = 2)

enter image description here

我不是 tidyverse 用户,所以 map_df 可能是基本函数 ReduceMap 的一些克隆,但我没有足够的经验 a) 知道哪个要加载的包,或 b) 有能力弄清楚您的管道表达式正在做什么。注释代码可能更容易理解。我对 survival 软件包很有经验。