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

ggsurvplot绘制KM图时time 0无风险人数显示问题

解决KM图风险表time=0无显示的问题

问题根源

  1. 事件变量编码错误:survival包的Surv函数默认把0当作删失、非0值当作事件发生。你用cnsr_os_recode的1代表事件、2代表删失,直接传入会让2被误判为事件,既干扰生存分析结果,也可能导致风险表显示异常。
  2. data2无最小时间样本:移除两个最小时间的样本后,data2里所有样本的生存时间都大于0,ggsurvplot默认不会主动显示time=0的初始风险人数。

解决步骤

1. 修正事件变量编码

把cnsr_os_recode转成标准的0(删失)、1(事件)格式:

# 给data1添加正确的事件列
data1$event <- ifelse(data1$cnsr_os_recode == 1, 1, 0)
# 给data2添加正确的事件列
data2$event <- ifelse(data2$cnsr_os_recode == 1, 1, 0)

2. 重新拟合并强制显示time=0风险数

用修正后的事件变量拟合生存曲线,同时给ggsurvplot加上risk.table.start.time = 0参数,强制显示初始时间点的风险人数:

library(survival)
library(survminer)

# 处理data1
func1 <- Surv(time_OS, event) ~ copies_gr_median
sf1 <- surv_fit(func1, data = data1)
g1 <- ggsurvplot(
  fit = sf1, 
  risk.table = TRUE, 
  conf.int = TRUE, 
  palette = 'jco',
  ggtheme = theme_bw(),
  risk.table.start.time = 0  # 强制显示time=0的初始人数
)

# 处理data2
func2 <- Surv(time_OS, event) ~ copies_gr_median
sf2 <- surv_fit(func2, data = data2)
g2 <- ggsurvplot(
  fit = sf2, 
  risk.table = TRUE, 
  conf.int = TRUE, 
  palette = 'jco',
  ggtheme = theme_bw(),
  risk.table.start.time = 0  # 强制显示time=0的初始人数
)

# 排列两张图
splots <- list(g1, g2)
arrange_ggsurvplots(splots, print = TRUE,
  ncol = 2, nrow = 1, risk.table.height = 0.3)

补充说明

  • 事件编码修正是核心前提,否则你的生存曲线和风险表都是基于错误的事件定义生成的,结果完全不可靠。
  • risk.table.start.time = 0参数会强制风险表展示起始时刻的初始风险人数,不管数据里有没有time=0的样本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:22:11