library(KMsurv)
data("larynx")
larynx
cens <- matrix(c(larynx$time, rep(NA, length(larynx$time))),
nrow = length(larynx$time), ncol = 2)
larynx$time[larynx$delta == 0] <- NA
is.censored <- as.numeric(
is.na(larynx$time))
larynx$age <- as.numeric(scale(larynx$age))
larynx$diagyr <- as.numeric(scale(larynx$diagyr))
larynx$stage <- as.factor(larynx$stage)
X <- model.matrix(~ stage + age + diagyr, data = larynx)
larynx.weibull.model <- nimbleCode({
for(i in 1:n){
# Survival and censoring times
is.censored[i] ~ dinterval(time[i], cens[i, 1])
time[i] ~ dweib(alpha, lambda[i])
lambda[i] <- exp(-mu[i] * alpha)
mu[i] <- inprod(beta[1:Nbetas], X[i,])
}
## priors for betas
for(j in 1:Nbetas){
beta[j] ~ dnorm(0, 0.001)
}
### prior for shape
alpha ~ dunif(0, 10)
})
d.jags <- list(time = larynx$time, cens = cens,
X = X,
is.censored = is.censored)
c.jags <- list(Nbetas = ncol(X), n = nrow(larynx))
i.jags <- list(beta = rnorm(ncol(X)), alpha = runif(1))
p.jags <- c("beta", "alpha", "lambda", "is.censored")
# Model
model <- nimbleModel(code = larynx.weibull.model,
data = d.jags,
inits = i.jags,
constants = c.jags,
calculate = F)
# Configure
confMCMC <- configureMCMC(model,
monitors = p.jags,
thin = 1,
useConjugacy = F,
enableWAIC = F)
# Build the MCMC
nimMCMC <- buildMCMC(confMCMC)
# Compile the model
Cnim <- compileNimble(model)
# Now compile model and MCMC
CnimMCMC <- compileNimble(nimMCMC, project = model)
# Run to check time
mcmcout <- runMCMC(CnimMCMC,
niter = 10000,
nburnin = 1000,
thin = 1,
nchains = 3,
samplesAsCodaMCMC = T,
summary = T,
WAIC = F)
mcmcout$summary$all.chains