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
相关产品推荐
相关产品推荐

