提问人:purpleblade98 提问时间:10/31/2023 最后编辑:purpleblade98 更新时间:11/5/2023 访问量:44
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
问:
为了通过样本中的生存几率可视化连续预测变量的分布,我希望按照标题中的描述转换 K-M 图。
这个想法是这样,就很容易看到连续值的全部范围。我牺牲了生存期总体时间分布的可视化,但使用颜色并在 y 轴上保持 P(生存率),我可以很容易地绘制出 1 年、5 年生存率等。
注意:我不是在寻找 Cox 可视化。我对来自 K-M 函数的数据感兴趣,即:
km <- survfit(Surv(time, censor) ~ continuous.predictor, data = df)
ggsurvplot(km)
但以 x 轴为连续预测变量,并用所选时间点着色的线条。从理论上讲,这应该只是使因式分解时间和新的 x 值的问题。strata
continuous.predictor
但是,我不确定如何在 R 中执行此操作。我已经在生存包中使用过,但不清楚是否支持这种转变。survfit()
ggsurvplot()
survminer
答:
您可以使用模型上的函数来执行此操作,该函数提供连续变量的值以及您希望测量生存概率的时间。predict
让我们使用生存包中的示例,作为感兴趣的连续变量:lung
age
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'))
评论
survfit
我最近发表了一篇关于这个主题的文章,名为“可视化连续变量对事件发生时间结果的(因果)影响”(https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10392888/)。它描述了多种不同的方法来可视化连续变量对生存概率的影响。例如,这是生存区域图:
您可以使用 CRAN 上提供的 R 包创建此图形和其他与此类似的图形: https://robindenz1.github.io/contsurvplot/contsurvplot
如果希望在 x 轴上显示连续变量,在 y 轴上显示生存概率,并在某些特定时间点显示彩色线条,则可以使用该函数。在这种情况下,与 Allan Cameron 给出的答案的唯一区别是,它允许您在 Cox 模型中也包含调整变量。plot_surv_at_t
评论