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

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

The Curve

获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:21:51