Cox 基线危险

机器算法验证 r cox模型 冒险
2022-01-27 03:12:23

假设我有一个“肾导管”数据集。我正在尝试使用 Cox 模型对生存曲线进行建模。如果我考虑 Cox 模型:

h(t,Z)=h0exp(bZ),
我需要对基线危害的估计。通过使用内置的survival包 R 函数basehaz(),我可以很容易地做到这一点:

library(survival)

data(kidney)
fit <- coxph(Surv(time, status) ~ age , kidney)
basehaz(fit)

但是,如果我想为给定的参数估计值编写基线危害的逐步函数,b我该如何进行?我试过:

bhaz <- function(beta, time, status, x) {

    data <- data.frame(time,status,x)
    data <- data[order(data$time), ]
    dt   <- data$time
    k    <- length(dt)
    risk <- exp(data.matrix(data[,-c(1:2)]) %*% beta)
    h    <- rep(0,k)

    for(i in 1:k) {
        h[i] <- data$status[data$time==dt[i]] / sum(risk[data$time>=dt[i]])          
    }

    return(data.frame(h, dt))
}

h0 <- bhaz(fit$coef, kidney$time, kidney$status, kidney$age)

但这并没有给出与 相同的结果basehaz(fit)问题是什么?

1个回答

显然,basehaz()实际上计算的是累积风险率,而不是风险率本身。公式如下:

H^0(t)=y(l)th^0(y(l)),
h^0(y(l))=d(l)jR(y(l))exp(xjβ)
在哪里y(1)<y(2)<表示不同的事件时间,d(l)是事件的数量y(l), 和R(y(l))是风险设定在y(l)包含仍然易受该事件影响的所有个人y(l).

让我们试试这个。(以下代码仅用于说明,并不打算写得很好。)

#------package------
library(survival)

#------some data------
data(kidney)

#------preparation------
tab <- data.frame(table(kidney[kidney$status == 1, "time"])) 
y <- as.numeric(levels(tab[, 1]))[tab[, 1]] #ordered distinct event times
d <- tab[, 2]                               #number of events

#------Cox model------
fit<-coxph(Surv(time, status)~age, data=kidney)

#------cumulative hazard obtained from basehaz()------
H0 <- basehaz(fit, centered=FALSE)
H0 <- H0[H0[, 2] %in% y, ] #only keep rows where events occurred

#------my quick implementation------
betaHat <- fit$coef

h0 <- rep(NA, length(y))
for(l in 1:length(y))
{
  h0[l] <- d[l] / sum(exp(kidney[kidney$time >= y[l], "age"] * betaHat))
}

#------comparison------
cbind(H0, cumsum(h0))

部分输出:

       hazard time cumsum(h0)
1  0.01074980    2 0.01074980
5  0.03399089    7 0.03382306
6  0.05790570    8 0.05757756
7  0.07048941    9 0.07016127
8  0.09625105   12 0.09573508
9  0.10941921   13 0.10890324
10 0.13691424   15 0.13616338

我怀疑细微的差异可能是由于coxph()数据中的联系导致的部分可能性的近似......