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

如何从survfit函数提取累积发生率曲线的概率数据?

关于survival包多事件累积发生率曲线数据位置的问题

问题详情

我使用survival::survfit()绘制累积发生率曲线,参考官方vignette执行了以下代码:

library(survival)
mgus2$etime <- with(mgus2, ifelse(pstat==0, futime, ptime))
event <- with(mgus2, ifelse(pstat==0, 2*death, 1))
mgus2$event <- factor(event, 0:2, labels=c("censor", "pcm", "death"))
mfit2 <- survfit(Surv(etime, event) ~ sex, data=mgus2)
plot(mfit2)

数据包含pcm和death两个事件,协变量sex分为male和female两个水平,绘图生成四条概率曲线。但我在mfit2中仅找到x轴数据mfit2$time,mfit2$pstate未包含pcm女性、pcm男性、death女性、death男性这四个概率。我已找到提取数据的变通方法,但想知道这些绘图用的概率数据藏在mfit2的哪个位置?

解答

在竞争风险模型的survfit结果中,绘图所需的四条累积发生率曲线数据,实际存储在mfit2$cumhaz矩阵中,需要结合分组和事件类型对应:

  • mfit2$strata会明确分组的时间点数量划分(比如sex=female和sex=male各自包含多少个时间点)
  • mfit2$cumhaz的每一行对应一个时间点,每一列对应一种事件类型在对应分组下的累积发生率。你可以通过mfit2$states确认列对应的事件顺序(这里就是pcm、death),再结合strata的分组索引拆分,就能精准对应到四条曲线的数据。

举个直观的提取示例:

# 获取分组的时间点索引分界
strata_split <- c(0, cumsum(mfit2$strata))
# 提取女性组的pcm和death累积发生率
female_pcm <- mfit2$cumhaz[(strata_split[1]+1):strata_split[2], 1]
female_death <- mfit2$cumhaz[(strata_split[1]+1):strata_split[2], 2]
# 提取男性组的pcm和death累积发生率
male_pcm <- mfit2$cumhaz[(strata_split[2]+1):strata_split[3], 1]
male_death <- mfit2$cumhaz[(strata_split[2]+1):strata_split[3], 2]

此外,直接运行summary(mfit2)也能查看每个时间点对应的各事件累积发生率,输出结果会按分组和事件类型清晰展示所有数值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:37:32