计算Ctree对象后绘制Kaplan Meier曲线

bwitn5fc  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(88)

为了获得博士学位,为了确定COVID-19死亡率的预测因素,我使用Ctree计算了一个分类生存树。下面是使用的代码:

library(survival)
library(survminer)
library(party)
library(partykit)

tmodel<- ctree(Surv(time,status_cov) ~ Age + Sex + Education + Migrant.background + Income + Living.situation, data = up_training_cov,control = ctree_control(maxdepth = 3))

plot(tmodel,
     type = "simple",
     gp = gpar(fontsize = 10),
     drop_terminal = TRUE,
     tnex = 1,
     beside = FALSE,
     ymax = 1,
     ylines = TRUE,
     widths = 1,
     gap = 0.1,
     reverse = FALSE,
     id = TRUE)

下面是输出:

我还计算了一个图,其中包含估计的平均生存时间和每个终端节点中的个体数量:

我想保持图的原样,除了图之外,计算每个终端节点的Kaplan Meier生存曲线,并在同一个图上显示8个终端节点的所有生存曲线,每个终端节点用一种颜色,以便我可以直观地比较每组的生存曲线。

  • 有人能帮我得到KM曲线并绘制它们吗?:)***

多谢了!

yhxst69z

yhxst69z1#

如果从plot调用中删除type = "simple",将得到KM曲线。
显然,您的数据太大而无法共享,因此这里有一个可复制的示例,使用survival包中的cancer数据集:

library(survival)
library(party)

data('cancer')

tmodel <- ctree(Surv(time, status) ~ age + sex + ph.ecog + wt.loss, data = cancer)

现在,如果我们使用您的精确绘图代码,我们得到:

plot(tmodel,
     type = "simple",
     gp = gpar(fontsize = 10),
     drop_terminal = TRUE,
     tnex = 1,
     beside = FALSE,
     ymax = 1,
     ylines = TRUE,
     widths = 1,
     gap = 0.1,
     reverse = FALSE,
     id = TRUE)

但是如果我们移除type = "simple",我们在每个叶子节点处得到KM曲线

plot(tmodel,
     gp = gpar(fontsize = 10),
     drop_terminal = TRUE,
     tnex = 1,
     beside = FALSE,
     ymax = 1,
     ylines = TRUE,
     widths = 1,
     gap = 0.1,
     reverse = FALSE,
     id = TRUE)

如果要在单个面板上显示所有KM曲线,可以执行以下操作:

ggsurvfit(survfit2(Surv(time, status) ~ strata(node), data = cancer))

如果您希望所有图都在不同的页面上,则可以通过根据tmodel@get_where()分割数据来单独创建它们,这将每个观察值分配给一个叶节点。只需生成KM图的列表并使用拼凑绘制它们:

library(ggsurvfit)
library(patchwork)

cancer$node <- tmodel@get_where()

plot_list <- lapply(split(cancer, cancer$node), function(d) {
  ggsurvfit(survfit2(Surv(time, status) ~ 1, d)) +
    ggtitle(paste('Leaf node = ', d$node[1]))
})

wrap_plots(plot_list)

相关问题