如何在dplyr工作流中计算Kaplan-Meier生存函数的累积概率
解决方案
你需要的纯dplyr实现可以直接用cumprod()(累积乘积函数)配合mutate()完成,完全匹配「前一期累积生存概率 × 当期条件生存概率」的计算逻辑,无需手写循环:
library(dplyr) # 示例数据 df <- tibble( months = c(1, 3, 9, 13, 17, 20), n_at_risk = c(10, 8, 7, 5, 3, 2), cond_prob_event = c(0.100, 0.125, 0.143, 0.200, 0.333, 0.500), cond_prob_surv = c(0.900, 0.875, 0.857, 0.800, 0.667, 0.50) ) # 计算累积生存概率 df <- df %>% mutate(cum_prob_survival = cumprod(cond_prob_surv))
运行后输出结果和你用for循环得到的完全一致:
# A tibble: 6 × 5 months n_at_risk cond_prob_event cond_prob_surv cum_prob_survival <dbl> <dbl> <dbl> <dbl> <dbl> 1 1 10 0.1 0.9 0.9 2 3 8 0.125 0.875 0.7875 3 9 7 0.143 0.857 0.6748875 4 13 5 0.2 0.8 0.53991 5 17 3 0.333 0.667 0.36011997 6 20 2 0.5 0.5 0.180059985
如果需要和示例输出一致保留三位小数,调整mutate写法即可:
df <- df %>% mutate(cum_prob_survival = round(cumprod(cond_prob_surv), 3))
如果你的实际场景需要按不同分组(比如干预组/对照组)分别计算累积生存概率,只需要在mutate()前添加group_by(分组字段)即可。
内容的提问来源于stack exchange,提问作者Brad Cannell
相关产品推荐
相关产品推荐

