muhaz返回什么?

机器算法验证 r 生存 冒险
2022-04-02 21:49:54

一个很基础的问题。我在某处读到 muhaz 包中的 muhaz 函数将返回 COX 模型的基线危险率。muhaz 文件指出它“使用基于内核的方法从右删失数据估计危险函数”所以在我看来 muhaz 估计的是完整的危险函数,而不是 COX 模型的基线危险率。有人可以澄清吗?

谢谢

1个回答

muhaz()不返回基线危险率,而是返回包括 协变量对最终危险的贡献的危险函数。您可以像我对这段代码所做的那样划分这两个贡献。首先开始模拟具有固定危险率的数据集: h0

library(survival)
set.seed(6)
n    <- 200
age  <- 50 + 12*rnorm(n)
sex  <- factor(sample(c('Male','Female'), n, rep=TRUE, prob=c(.6, .4)))
cens <- 15*runif(n)
h0   <- .02
h    <- h0*exp(.05*age-.12*(sex=='Female'))  # hazard
dt   <- -log(runif(n))/h                     # calculated survival time
e    <- ifelse(dt <= cens,1,0)               # if time is lower than censoring
                                             # time event = 1 else event = 0
dt   <- pmin(dt, cens)                       # the effective observation time
                                             # is the minimum between dt and cens
S    <- Surv(dt, e)                          # create the Survival function

f    <- coxph(S ~ age + sex)                 # define Cox model
cf   <- f$coefficients                       # value of coefficients
pval <- summary(f)$coefficients[,5]          # value of p-values

    # create the data.frame:
dataset     <- data.frame(cbind(age, sex, "time" = dt, "status" = e))   
dataset$sex <- factor(x = dataset$sex, labels = c("Male", "Female"))

之后,您可以使用 计算风险函数muhaz我更喜欢通过设置 arguments 的值来创建一个更详细(即使计算密集型)的函数n.min.grid = 1000, n.est.grid = 2000

fmuhaz              <- muhaz::muhaz(times = dataset$time, 
                                    delta = dataset$status, 
                                    n.min.grid = 1000, n.est.grid = 2000)
hfun                <- approxfun(x = fmuhaz$est.grid, y = fmuhaz$haz.est)  
dataset.order       <- dataset[with(dataset, order(time)),]      
dataset.order$BetaX <- exp( cf[1]*dataset.order$age + 
                            cf[2]*as.numeric(dataset.order$sex=="Male") ) 
dataset.order$h0    <- NA
for (l in 1:(nrow(dataset) - 9)) {
  dataset.order$h0[l] <- hfun(dataset.order$time[l]) /
                              mean(dataset.order$BetaX[l:nrow(dataset.order)])
}

plot(fmuhaz, lwd=2)          
  abline(h=h0, col="red", lty=2, lwd=2)
  lines(x=dataset.order$time[1:(nrow(dataset.order) - 9)], 
    y=dataset.order$h0[  1:(nrow(dataset.order) - 9)], lwd=2, col="blue")

在此处输入图像描述

根据时间协变量对数据集进行排序后,我创建了一个函数,该函数使用approxfun. 然后我计算有序数据集中每次的危险率值,并将该值除以其中是事件的数量,是事件的总数事件,换句话说,我只计算在计算时仍有风险的所有案例。当至少有 10 个以上的案例处于危险之中时,总和就会停止,因此有机会不让危险函数的值跳高。10的数字取自muhaz的帮助iTβXiT作者根据 和 给出了危险函数计算的fmuhaz$est.grid边界fmuhaz$haz.est在您在输出中看到的最终绘图中,可以看到muhaz计算出的风险函数(黑线)、用于模拟数据集的原始风险函数(红色虚线)以及通过我解释的方法计算的基线风险函数(蓝线)。您可能会看到实际上蓝线和红线彼此靠近。