Cox比例风险模型与Coxph()输出之间的断开?

时间:2017-01-27 16:31:55

标签: r survival-analysis

我正在进行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")

这产生以下系数:

  • 收入:-3.364925e-06
  • c_months:-1.841606e-01
  • pct_month_change:-1.080881e-02
  • lmr:1.001214e-06
  • c_declines:3.762748e-01

我已经对survexp()进行了以下调用,以获得我的数据集中每个观察的预期存活率:

test_surv <- survexp(event ~ revenue + c_months + pct_month_change + lmr + c_declines, ratetable=mod.timed, data = big_spenders.long, cohort = FALSE) 

除非我尝试为以下示例重新创建survexp()的输出,否则这一切都很好:

  • 收入:22333.55
  • c_months:16
  • pct_month_change:.8999741
  • lmr:11754.66
  • c_declines:0

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()的调用是什么,我不期待它?对此方法/主题的任何评论或反馈都非常感谢。

0 个答案:

没有答案