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

R语言survival包生存概率曲线终点为0%的原因咨询

问题原因与解决方案

核心错误:Surv函数的事件状态识别错误

survival包的Surv()函数默认规则是:status=0代表删失,status=1代表事件(死亡)发生。但你的数据中用1=删失,2=死亡,且未明确指定事件编码,导致函数将所有非0的status值(包括1和2)都判定为事件发生。这意味着你的12个样本被全部标记为死亡,生存曲线自然会降到0%。

次要问题:time=0的删失数据合理性

你的数据中存在time=0的删失记录,这表示个体在研究开始时就退出,这类数据对生存曲线的实际分析价值极低,建议确认数据准确性,或直接过滤掉。

修正步骤

1. 正确指定事件状态

有两种方式让Surv()函数识别正确的事件:

  • 方式一:重新编码status列
    testDF$status_correct <- ifelse(testDF$status == 1, 0, 1)
    fit <- survfit(Surv(time, status_correct) ~ node, data = testDF)
    
  • 方式二:在Surv函数中直接判断事件
    fit <- survfit(Surv(time, status == 2) ~ node, data = testDF)
    

2. 清理time=0的无效数据(可选)

如果确认time=0的记录是无效数据,可过滤后再分析:

testDF_clean <- testDF[testDF$time > 0, ]
fit <- survfit(Surv(time, status == 2) ~ node, data = testDF_clean)

修正后的结果验证

修正后重新生成生存曲线,最终生存概率会对应你的实际死亡率(8/12≈66.67%死亡,剩余33.33%存活),曲线终点会停留在33.33%左右,与预期一致。

内容的提问来源于stack exchange,提问作者Village.Idyot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:25:22