如何使用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
相关产品推荐
相关产品推荐

