如何提取survey::svykm()加权计算后的指定时间点累积生存率
从svykm对象提取指定时间点加权生存率的方法
svykm()返回的结果为命名列表,每个列表元素对应一个分层组(你的示例中对应sex的两个分组),每个组内存储time(事件发生/删失时间点)、surv(对应时间点的加权生存率)、std.err(生存率标准误)等核心字段。你可以通过自定义插值函数匹配KM阶梯曲线的规则,提取指定时间点的数值,示例代码如下:
# 接你已运行的代码,s2为svykm返回的结果 # 定义目标提取时间点,注意单位与原数据集的time字段一致 # 若pbc数据集time单位为天,需要提取1-5年的话可改为c(365,730,1095,1460,1825) target_times <- c(1:5) # 自定义提取函数 get_svykm_surv <- function(km_obj, times) { res <- lapply(names(km_obj), function(g) { t_seq <- km_obj[[g]]$time surv_seq <- km_obj[[g]]$surv se_seq <- km_obj[[g]]$std.err # 按KM阶梯曲线规则做常量插值,匹配survfit summary的输出逻辑 surv_val <- approx(t_seq, surv_seq, xout = times, method = "constant", f = 0)$y se_val <- approx(t_seq, se_seq, xout = times, method = "constant", f = 0)$y data.frame( group = g, time = times, weighted_survival = surv_val, std_error = se_val ) }) do.call(rbind, res) } # 调用函数获取结果 output <- get_svykm_surv(s2, target_times) print(output)
内容的提问来源于stack exchange,提问作者Takanashi
相关产品推荐
相关产品推荐

