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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:06