在计算R中的受限平均生存时间(RMST)时遇到了一些问题,我做了一些尝试。
这是我尝试自己计算RMST的想法。
i)我拟合了cox回归模型以获取h(t)的估计函数,并部署了各个协变量来计算h(t);
ii)我根据上述个体h(t)得出了个体生存曲线S(t);
iii)然后,我通过上述个体S(t)用以下公式计算出个体RMST:RMST = 0到tau的积分(S(t))。 (我不知道如何在此处输入正式公式,我敢肯定您会理解我的意思)。
我已经尝试过使用以下R代码来计算单个RMST的方法:
# load R package
library(survRM2)
library(survival)
# generate example
D <- rmst2.sample.data()
time <- D$time
status <- D$status
x <- D[,c(4,6,7)]
# fit cox regression model with weibull baseline
fit<-survreg(Surv(time,status)~ x[[1]] + x[[2]]+ x[[3]],data = D,dist = "weibull")
# get cox regression coefficients of covariables
beta=fit$coefficients
# get paramaters within baseline hazard
gamma.weibull=fit$scale
# cutomize a function to calculate individual hazard
hazard <- function(u,x1,x2,x3) {
gamma.weibull*u^(gamma.weibull-1)*exp(beta[1]+beta[2]*x1+beta[3]*x2+beta[4]*x3)
}
# cutomize a function to calculate individual survival
surv <-function(t,x1,x2,x3) {
sapply(t,function(z){
exp(-integrate(hazard,lower=0,upper=z,x1=x1,x2=x2,x3=x3)$value)
}
)
}
rmst <- c() # genrate a empty vector
for(i in 1:312) { # 312 is the sample size
rmst[i]=integrate(surv,0,5,x1=x[[1]][i],x2=x[[2]][i],x3=x[[3]][i])$value
}
# Error in integrate(surv, 0, 5, x1 = x[[1]][i], x2 = x[[2]][i], x3 = x[[3]][i]) :
# the integral is probably divergent
我有三个问题:
1)我的想法或计算过程有什么问题吗?
2)在步骤iii)中,某些情况下积分是不可积分的(即,积分不收敛)。有什么解决办法,还是应该使用近似评估?
3)最后一枪,有没有更好的方法来计算此单个RMST?