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

R语言如何基于survival包KM对象计算特定时间点KM估计值

报错原因

KM是survfit()函数返回的Kaplan-Meier模型结果对象,不是可执行函数,你写KM(1)时R会尝试寻找名为KM的函数来调用,自然会报找不到函数的错误。

计算指定时间点KM估计值的方法

方法1:直接调用survival包内置方法(优先推荐)

survival包自带的summary方法对survfit对象支持直接传入目标时间点参数,不需要额外写函数,兼容性最好,支持分层模型、置信区间、标准误等所有KM结果的输出:

library(survival)
KM <- survfit(Surv(time, status) ~ 1, data = lung)

# 查看指定时间点(比如1、100、365)的完整KM结果
summary(KM, times = c(1, 100, 365))

# 单独提取时间点1对应的KM生存估计值
summary(KM, times = 1)$surv

方法2:自定义函数实现

如果需要封装成更顺手的调用形式,可以基于KM估计是右连续阶梯函数的逻辑写函数:指定时间点的生存概率,等于所有小于等于该时间点的事件时间点中,最后一个时间点对应的生存概率。注意时间小于最小随访时间时生存概率为1,超过最大随访时间时返回缺失值。

# 自定义函数:输入survfit生成的KM对象、目标时间向量,返回对应时间点的KM估计值
get_km_value <- function(km_fit, target_t) {
  # 补充时间0点的生存概率为1
  km_t <- c(0, km_fit$time)
  km_s <- c(1, km_fit$surv)
  
  est <- sapply(target_t, function(t) {
    # 超过最大随访时间返回NA
    if (t > max(km_t)) return(NA)
    # 找到最后一个小于等于目标时间的位置
    match_pos <- max(which(km_t <= t))
    return(km_s[match_pos])
  })
  
  return(data.frame(time = target_t, km_est = est))
}

# 调用示例
get_km_value(KM, target_t = c(1, 100, 365))

注意:如果你的KM对象是分层模型(即公式右侧不是~1,存在分组协变量),优先用内置summary方法,自定义函数需要额外处理分层逻辑,没必要重复开发。

内容的提问来源于stack exchange,提问作者Snoop Dogg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:36:21