我正在进行R中的生存分析,但我想更好地理解“生存”库中的coxph函数如何计算单次观察的危险率。我的理解是,Cox比例风险模型的形式有一个回归:
h(t)= h0(t)* e ^(ßX)
其中h0(t)是基线危险率,ß是回归中系数的向量,X是模型中变量的向量。
模型在以下调用中定义:
mod.timed <- coxph(Surv(start, stop, event) ~ revenue + c_months + pct_month_change + lmr + c_declines, data = big_spenders.long, method = "breslow")
这产生以下系数:
我已经对survexp()进行了以下调用,以获得我的数据集中每个观察的预期存活率:
test_surv <- survexp(event ~ revenue + c_months + pct_month_change + lmr + c_declines, ratetable=mod.timed, data = big_spenders.long, cohort = FALSE)
除非我尝试为以下示例重新创建survexp()的输出,否则这一切都很好:
test_surv的输出是生存率,因此我采用1 - test_surv [观察]来获得危险率.0002783463。当我尝试使用下面写的两个函数复制这个结果时,然而:
get_vars <- function(observation, model){
vars <- vector(mode = "numeric", length = length(model$coefficients))
cfs <- names(model$coefficients)
for(i in 1:length(cfs)){
vars[i] <- observation[1, which(names(observation) == cfs[i])]
}
vars
}
hazard_rate <- function(time, observation, model){
baseline <- basehaz(model, centered = TRUE)
cfs <- unname(model$coefficients)
vars <- get_vars(observation, model)
hazard_rate <- baseline[[1]][time] * exp(sum(vars * cfs))
hazard_rate
}
然而,我自己的函数的结果是0.0006081559。虽然我不怀疑来自survexp()的输出是正确的,但我想确切地理解为什么来自survexp()的输出与我的计算(我也已经手工制作)不同。对survexp()的调用是什么,我不期待它?对此方法/主题的任何评论或反馈都非常感谢。