1

一段时间以来,我一直试图在rjags中找到一种方法来为具有时变(时间相关)协变量的贝叶斯 Weibull AFT 生存分析模型编写代码。

我正在处理的数据是关于从购买到处置的持续时间。一些记录是右删失的。此外,我对每条记录都有一些解释变量,例如agemarital statuseducation levelincome

我有一个不包含时变协变量的代码。此代码正确运行,其结果是合理的。现在我想增强它以包含随时间变化的协变量,例如age. 这是我的简单代码。

mod_string_wei <- "model{

for(i in 1 : nn) {
  is.censored[i] ~ dinterval(tt[i], ee[i])
  tt[i] ~ dweib(alpha,lamda[i])
  lamda[i] <- exp(beta[1] + beta[2]*cc[i])
}

for (i in 1:2) {
  beta[i] ~ dnorm(0.0, 1.0/1.0e5)
}
alpha ~ dgamma(1,0.0001)

# Median survival time;
median0 <- log(2)/exp(beta[1])
median1 <- log(2)/exp(beta[1]+beta[2])

#mean survival time;
mean0 <- 1/exp(beta[1])
mean1 <- 1/exp(beta[1]+beta[2])
}"


#data preparation for the model
nn <- nrow(data.s)
tt <- data.s$duration
ee <- data.s$event
cc<- data.s$ageatstart
is.censored <- data.s$is.censored


#initialisation
set.seed(72)

#Parameters
params = c("beta", "alpha")

#initial values of the model
beta.mu = -8.0
beta.sigma = 5.0
beta.num = 2

alpha.shape = 3.0
alpha.rate = 4.0

inits1 = function() {
  inits = list(beta = rnorm(beta.num,beta.mu,beta.sigma), alpha = rgamma(1,alpha.shape,alpha.rate))
}


###############################     3-model Run    ###############################

chain.num = 3
adapt.num = 0

#initial model
mod.syd = jags.model(textConnection(mod_string_wei), data=data, inits=inits1, n.chains=chain.num, n.adapt = adapt.num)

#burn in count
burn.count = 800
update(mod.syd, burn.count) 

#sample model
thin.num = 1
iteration.num = 1000

mod.syd.sim = coda.samples(model=mod.syd,
                        variable.names=params, n.iter=iteration.num, thin = thin.num)


###############################     4-results     ###############################
#Binding results
mod.syd.csim = do.call(rbind, mod.syd.sim)

如果有人可以帮助我添加随时间变化的(与时间相关的)协变量或找到关于它的教程/示例代码,我将不胜感激。

4

0 回答 0