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

如何使用survfit函数获取特定协变量下病因特异性累积发病率的置信区间?

如何使用survfit函数获取特定协变量下病因特异性累积发病率的置信区间?

你好!针对你遇到的竞争风险模型中提取累积发病率置信区间的问题,其实survfit结合summary的输出里已经包含了这些信息,只是需要正确提取对应的结果。我来一步步帮你解决:

首先,先修正一下你代码里的小细节:newdata参数最好用data.frame来传递,而不是直接用c()创建向量,这样能保证变量类型和原数据集一致(比如如果hormon是因子类型,向量形式可能会丢失类型信息)。修正后的代码如下:

library(survival)
library(dplyr)

rott <- rotterdam %>%
  mutate(time = pmin(dtime, rtime)) %>%
  mutate(outcome = ifelse(death == 1 | recur == 1, 1, 0)) %>%
  mutate(status = ifelse(death == 1, 2, ifelse(recur == 1, 1, 0)))

# 构建竞争风险Cox模型
model <- coxph(Surv(time, as.factor(status)) ~ hormon + age, data = rott, id = pid)

# 用data.frame传递新的协变量值
predict_obj <- survfit(model, newdata = data.frame(hormon = 1, age = 50))

# 获取指定时间点(2000)的结果
sum_obj <- summary(predict_obj, time = 2000)

接下来,你要的累积发病率和对应的置信区间都在sum_obj里:

  • sum_obj$pstate:这是你已经用到的,对应每个竞争事件的累积发病率(顺序和你定义的status一致:1=复发,2=死亡)
  • sum_obj$lower:每个事件累积发病率的置信区间下限,是一个矩阵,每一列对应一个事件
  • sum_obj$upper:每个事件累积发病率的置信区间上限,结构和lower一致

比如你要查看复发事件(status=1)的累积发病率及置信区间,可以这样提取:

# 复发的累积发病率及置信区间
recur_ci <- c(
  incidence = sum_obj$pstate[1],
  lower_ci = sum_obj$lower[1],
  upper_ci = sum_obj$upper[1]
)

# 死亡的累积发病率及置信区间
death_ci <- c(
  incidence = sum_obj$pstate[2],
  lower_ci = sum_obj$lower[2],
  upper_ci = sum_obj$upper[2]
)

print(recur_ci)
print(death_ci)

简单解释一下:在竞争风险的survfit结果中,lower和upper矩阵的列对应不同的竞争事件,行对应你指定的时间点(这里只有2000一个时间点,所以只有一行)。和非竞争风险场景下的$upper/$lower逻辑类似,只是这里按事件维度做了拆分。

如果需要查看整个时间序列的累积发病率及置信区间,直接访问predict_obj$pstate、predict_obj$lower、predict_obj$upper即可,它们会包含所有时间点的对应值。

备注:内容来源于stack exchange,提问作者beanie42

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:33:10