一段时间以来,我一直试图在rjags中找到一种方法来为具有时变(时间相关)协变量的贝叶斯 Weibull AFT 生存分析模型编写代码。
我正在处理的数据是关于从购买到处置的持续时间。一些记录是右删失的。此外,我对每条记录都有一些解释变量,例如age
、marital status
、education level
和income
。
我有一个不包含时变协变量的代码。此代码正确运行,其结果是合理的。现在我想增强它以包含随时间变化的协变量,例如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)
如果有人可以帮助我添加随时间变化的(与时间相关的)协变量或找到关于它的教程/示例代码,我将不胜感激。