R 中的生存分析 - 将 Kaplan Meier 图转换为 X = 连续变量,Y = P(生存),彩色线 = 所选时间点

Survival Analysis in R - Transform Kaplan Meier Plot to X = continous variable, Y = P(survival), colored lines = Chosen Timepoints

提问人:purpleblade98 提问时间:10/31/2023 最后编辑:purpleblade98 更新时间:11/5/2023 访问量:44

问:

为了通过样本中的生存几率可视化连续预测变量的分布,我希望按照标题中的描述转换 K-M 图。

这个想法是这样,就很容易看到连续值的全部范围。我牺牲了生存期总体时间分布的可视化,但使用颜色并在 y 轴上保持 P(生存率),我可以很容易地绘制出 1 年、5 年生存率等。

注意:我不是在寻找 Cox 可视化。我对来自 K-M 函数的数据感兴趣,即:

km <- survfit(Surv(time, censor) ~ continuous.predictor, data = df)
ggsurvplot(km)

但以 x 轴为连续预测变量,并用所选时间点着色的线条。从理论上讲,这应该只是使因式分解时间和新的 x 值的问题。stratacontinuous.predictor

但是,我不确定如何在 R 中执行此操作。我已经在生存包中使用过,但不清楚是否支持这种转变。survfit()ggsurvplot()survminer

R ggplot2 分析生存 Survminer

评论

1赞 jpsmith 10/31/2023
嗨,@purpleblade98 - 正如您的问题一样,我们的帮助能力有限。你能编辑你的问题,使其可重现并展示你想要的输出吗?这里有一些提示: 如何用可重现的例子写一个好的 R 问题 - 祝你好运!

答:

1赞 Allan Cameron 10/31/2023 #1

您可以使用模型上的函数来执行此操作,该函数提供连续变量的值以及您希望测量生存概率的时间。predict

让我们使用生存包中的示例,作为感兴趣的连续变量:lungage

library(survival)

model <- coxph(Surv(time, status) ~ age, data = lung)

现在,我们在 6 个月、1 年和 5 年的随访时间创建一个 30 - 80 岁所有年龄段的数据框:

newdata <- expand.grid(age = 30:80, time = c(182, 365, 5*365), status = 1)

我们可以将其提供给并得到生存概率,具有 95% 的置信区间:predict

preds <- predict(model, newdata = newdata, type = 'expected', se.fit = TRUE)

newdata$pred <- exp(-preds$fit)
newdata$upper <- exp(-(preds$fit + 1.96 * preds$se.fit))
newdata$lower <- exp(-(preds$fit - 1.96 * preds$se.fit))

现在我们可以用 vanilla ggplot 绘图了:

library(ggplot2)

ggplot(newdata, aes(age, pred, color = factor(time))) +
  geom_ribbon(aes(ymax = upper, ymin = lower, fill = factor(time)),
              alpha = 0.2, color = NA) +
  geom_line() +
  scale_fill_discrete('Time', labels = c('6 months', '1 year', '5 years')) +
  scale_color_discrete('Time', labels = c('6 months', '1 year', '5 years')) +
  scale_y_continuous('Survival probability', labels = scales::percent) +
  theme_minimal() +
  ggtitle(paste('Survival Probability according to age',
                'at 6 months, 1 year, 5 years'))

enter image description here

评论

0赞 purpleblade98 11/1/2023
谢谢,但是是否有可能用 K-M 描述性的生存概率而不是从 Cox 模型预测的概率来做到这一点?
1赞 Allan Cameron 11/1/2023
@purpleblade98我真的不明白你的意思。如果直接使用包含连续预测变量的公式创建对象,则只会为连续预测变量的每个唯一值创建一个层。对于真正连续的变量,这意味着每个值只有一个观测值,因此不会有任何 KM 统计数据。我想你可以把连续的数据装箱,但这样它就不是连续的了。据我所知,连续变量的生存估计需要 CoxPH。除非您可以分享类似内容的链接。survfit
0赞 Denzo 11/5/2023 #2

我最近发表了一篇关于这个主题的文章,名为“可视化连续变量对事件发生时间结果的(因果)影响”(https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10392888/)。它描述了多种不同的方法来可视化连续变量对生存概率的影响。例如,这是生存区域图:

survival_area_plot

您可以使用 CRAN 上提供的 R 包创建此图形和其他与此类似的图形: https://robindenz1.github.io/contsurvplot/contsurvplot

如果希望在 x 轴上显示连续变量,在 y 轴上显示生存概率,并在某些特定时间点显示彩色线条,则可以使用该函数。在这种情况下,与 Allan Cameron 给出的答案的唯一区别是,它允许您在 Cox 模型中也包含调整变量。plot_surv_at_t