如何在R语言中从ctree提取t=150时刻的生存率?

获取t=150时刻的生存率
你当前代码里用的是ctree()(条件推断生存树),并非Kaplan-Meier模型——这也是你用summary(pred_k)得不到想要的生存率结果的原因。下面分两种情况给出解决方案:
情况1:用Kaplan-Meier模型计算整体生存率
如果你的目标是基于Kaplan-Meier方法计算t=150时刻的生存率,按以下步骤操作:
1. 拟合Kaplan-Meier模型
调用survival包的survfit()函数拟合模型:
library(survival) library(dplyr) # 拟合无分组的KM模型(若需要按变量分组,把~1换成~你的分组变量,比如~sex) km_model <- survfit(Surv(time, DEATH_EVENT) ~ 1, data = K)
2. 提取t=150时刻的生存率
方法一:直接指定时间点输出
用summary()函数指定times=150,结果里的surv字段就是目标生存率:
summary(km_model, times = 150)
输出会包含生存率、标准误和置信区间,示例输出类似:
Call: survfit(formula = Surv(time, DEATH_EVENT) ~ 1, data = K) time n.risk n.event survival std.err lower 95% CI upper 95% CI 150 xxx xx x.xx x.xx x.xx x.xx
方法二:单独提取数值
如果需要把生存率单独提取出来用,可将KM结果转成数据框后筛选:
# 把KM模型的时间和生存率转成数据框 km_df <- data.frame( time = km_model$time, surv = km_model$surv ) # KM是阶梯函数,若150不在观测时间点,取小于等于150的最后一个时间点的生存率 target_surv <- km_df$surv[max(which(km_df$time <= 150))] print(target_surv)
情况2:从ctree模型中提取预测生存率
如果你的需求是基于已拟合的ctree生存树获取t=150的生存率,用predict()函数获取每个样本的生存曲线,再汇总:
# 从ctree模型获取每个样本的生存曲线 ctree_surv_curves <- predict(pred_k, type = "surv") # 提取每个样本在t=150时刻的生存率,再取均值(或根据需求计算分组统计量) t150_surv_values <- sapply(ctree_surv_curves, function(curve) { # 找到小于等于150的最后一个时间点对应的生存率 last_idx <- max(which(curve$time <= 150)) curve$surv[last_idx] }) # 计算整体平均生存率 mean_t150_surv <- mean(t150_surv_values) print(mean_t150_surv)
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

