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

使用ggsurvplot绘制单组生存曲线时出现行数不匹配错误求助

解决ggsurvplot绘制单组生存曲线报错的问题

错误原因

这个报错是因为ggsurvplot开启风险表(risk.table=T)时,单组拟合(~1)场景下的内部数据拼接逻辑出现维度不匹配。仅拟合整体人群的生存模型时,风险表的分组统计模块无法正确处理单组的计数维度,导致拼接数据框时出现行数不一致的冲突。

可行解决方案

方案1:提前拟合模型并指定风险表分组标签

先单独完成生存模型拟合,再将拟合对象传入ggsurvplot,同时显式指定单组的风险表标签,避免内部维度计算错误:

# 提前拟合整体人群生存模型
kaplan_fit <- survfit(Surv(censor.time, status) ~ 1, data=survival.dataset) 

# 绘制生存曲线并指定风险表分组名称
ggsurvplot(
  fit = kaplan_fit, 
  xlab = "Days", 
  risk.table = TRUE,
  risk.table.group = "Overall",  # 显式定义单组标签
  ylab = "Overall survival probability"
)

方案2:调整风险表参数强制统一维度

如果方案1无效,可以关闭风险表的分组文本颜色映射,或统一时间断点,避免动态计算导致的维度冲突:

ggsurvplot(
  fit = kaplan_fit, 
  xlab = "Days", 
  risk.table = TRUE,
  risk.table.y.text.col = FALSE,  # 关闭分组文本颜色映射
  break.time.by = 30,  # 统一时间断点,强制对齐数据维度
  ylab = "Overall survival probability"
)

方案3:检查数据合法性

确认你的数据集满足以下要求:

  • censor.time和status无缺失值,可通过complete.cases(survival.dataset[, c("censor.time", "status")])检查
  • status为二元变量(通常0=删失、1=事件),若存在status=2这类异常值,需先转换为合法的删失/事件标记

问题验证

如果以上方案仍有问题,可先关闭风险表,确认基础生存曲线能正常绘制:

ggsurvplot(
  fit = kaplan_fit, 
  xlab = "Days", 
  risk.table = FALSE,
  ylab = "Overall survival probability"
)

若该代码能正常运行,说明问题确实出在风险表的单组处理逻辑上,再针对性调整风险表参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:40:27