You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何生存曲线累计达100%(仅49.75%发生事件)?求正确绘图语法

问题解析与解决方案

你碰到的这个问题核心确实是fun = "event"的用法误区——这个参数会把所有删失的样本也当成“事件发生”来计算累积比例,所以哪怕实际只有49.75%的真事件,最后曲线也会爬到100%,因为它把没发生事件的删失个体也算进了“累积事件”的统计里。

为什么会出现这种情况?

survfit()输出的生存率surv,是基于当前仍在观察中的风险人群计算的剩余比例。当你用fun = "event"时,它计算的是1 - surv,这个值表示的是“到该时间点,风险人群中发生事件的比例”,而不是“总样本中发生事件的比例”。随着时间推移,删失个体不断退出风险人群,最后剩下的风险人群要么都发生了事件,要么都被删失,所以这个比例最终会趋近于100%,但这完全不是我们想要的累积发病率。

绘制累积发病率比例(Cumulative Incidence Proportion)的正确方法

累积发病率的定义是:到某个时间点为止,已经发生事件的个体数占总样本数的比例,我们可以通过以下几种方式实现:

  • 方法1:基础绘图手动计算
    直接从survfit对象中提取事件数,计算累计比例后绘图:
library(survival)
set.seed(123)
test <- data.frame(rnorm(10000)+5, sample(0:1, 10000, replace = TRUE))
colnames(test)<- c("time", "event")

survfitted <- survfit(Surv(time = time, event = event) ~ 1, data = test)
# 提取生存分析的汇总数据
surv_summary <- summary(survfitted)
# 计算累积事件数/总样本数,得到累积发病率
cum_incidence <- cumsum(surv_summary$n.event) / nrow(test)

# 绘制阶梯型曲线
plot(surv_summary$time, cum_incidence, type = "s",
     xlab = "Time", ylab = "Cumulative Incidence Proportion",
     main = "Cumulative Incidence of Event")
  • 方法2:用survminer的ggsurvplot绘制
    如果想要更美观的ggplot风格图,可以自定义fun参数来转换生存率:
library(survminer)
ggsurvplot(survfitted,
           # 自定义转换函数:将基于风险人群的生存率转为基于总样本的累积发病率
           fun = function(y) 1 - (y * survfitted$n.risk[1] / survfitted$n.risk),
           xlab = "Time", ylab = "Cumulative Incidence Proportion",
           title = "Cumulative Incidence of Event",
           ylim = c(0, 0.6)) # 可以设置y轴范围匹配实际事件比例
  • 方法3:用ggplot2直接绘制
    先将survfit对象转为数据框,再计算累积发病率:
library(ggplot2)
# 将survfit结果转为数据框
surv_df <- fortify(survfitted)
# 计算累积发病率
surv_df$cum_incidence <- cumsum(surv_df$n.event) / nrow(test)

ggplot(surv_df, aes(x = time, y = cum_incidence)) +
  geom_step(color = "#2E9FDF", size = 1) +
  labs(x = "Time", y = "Cumulative Incidence Proportion",
       title = "Cumulative Incidence of Event") +
  theme_minimal()

关键总结

  • fun = "event"计算的是累积风险的近似值,基于剩余风险人群,不是总样本的累积发病率;
  • 真正的累积发病率必须用累计事件数 ÷ 总样本数计算,最终的最大值就是实际的事件发生率(这里就是~49.75%)。

内容的提问来源于stack exchange,提问作者Jakn09ab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:32:46