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

icenReg中getSCurves输出缺失区间,ggplot2绘制生存曲线异常

问题排查与解决:icenReg生存曲线ggplot2绘图线段缺失

场景背景

  • 数据集包含区间删失与右删失数据,用于对比PIT/LET两种标签的保留率(个体丢失标签定义为「死亡」,保留标签定义为「存活」)
  • 已通过icenReg包完成NPMLE计算与组间检验,现拟拟合Cox PH模型(ic_sp对象)评估标签类型、性别及物种对生存的影响,需基于参数估计绘制调整后生存曲线
  • 使用getSCurves()从ic_sp提取曲线后,ggplot2绘图出现线段缺失,但icenReg内置plot(ic_sp)可正常显示曲线

核心原因

getSCurves()返回的生存曲线为分段常数的阶梯型结构,icenReg内置plot()会自动识别区间删失对应的阶梯跳变逻辑;而ggplot2默认用geom_line()连接离散点,忽略了生存曲线「在时间点前保持恒定、时间点后突变下降」的阶梯特性,导致部分线段未被正确绘制。


解决步骤

1. 检查提取的曲线数据结构

先确认getSCurves()返回的数据格式,确保包含时间点、生存概率、分组变量,且无异常缺失值:

scurves <- getSCurves(ic_sp)
# 查看数据结构
str(scurves)
# 查看前几行数据
head(scurves)

2. 用阶梯几何对象替代折线

ggplot2绘制生存曲线需使用geom_step()而非geom_line(),并指定direction = "hv"(先水平后垂直),匹配区间删失生存曲线的阶梯逻辑:

library(ggplot2)

ggplot(scurves, aes(x = time, y = surv, color = group)) +
  geom_step(direction = "hv") +  # 关键参数,还原阶梯型生存曲线
  labs(x = "观测时间", y = "标签保留概率", color = "分组") +
  theme_bw()

3. 处理异常数据(若存在)

如果数据中存在NA值或重复时间点,先过滤清洗:

# 过滤缺失值
scurves_clean <- scurves[!is.na(scurves$time) & !is.na(scurves$surv), ]
# 去重重复时间点(按分组保留唯一时间点)
scurves_clean <- scurves_clean[!duplicated(scurves_clean[, c("group", "time")]), ]

4. 添加置信区间(可选)

若getSCurves()返回了置信区间上下限(lower/upper列),可同步绘制,匹配内置plot()的展示效果:

ggplot(scurves_clean, aes(x = time, y = surv, color = group)) +
  geom_step(direction = "hv") +
  geom_ribbon(aes(ymin = lower, ymax = upper, fill = group), 
              alpha = 0.2, color = NA) +  # 置信区间半透明填充
  labs(x = "观测时间", y = "标签保留概率", color = "分组", fill = "分组") +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:22:35