ggsurvplot绘制KM图时time 0无风险人数显示问题
解决KM图风险表time=0无显示的问题
问题根源
- 事件变量编码错误:survival包的
Surv函数默认把0当作删失、非0值当作事件发生。你用cnsr_os_recode的1代表事件、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
相关产品推荐
相关产品推荐

