使用R(贝叶斯分析)在JAGS中编写coxph模型

时间:2019-10-18 09:40:54

标签: r bayesian winbugs rjags cox

我是贝叶斯分析的新手,并且正陷入编程问题中(认为是问题所在)。我正在尝试使用MCMC和JAGS进行贝叶斯生存分析。 我有一个简单的具有生存功能的写模型:

fit0 <- coxph(Surv(time, event) ~ group + var1 + var2 + var3, data=mydata_simple)
summary(fit0)

对于我感兴趣的主变量(组(0,1)),我得到的HR为0.40(p = 0.023)。

我正在尝试使用非信息先验的贝叶斯方法进行此分析。为此,我使用cat函数用JAGS编写。

cat("
model{

for(i in 1:N){

sVL[i] <- (var1[i]) 

sCD4 [i]<- (var2[i])

h0[i]<-lambda*alpha*pow(time[i],alpha-1)

h[i]<-h0[i]*exp(beta[1]*equals(group[i],1) +
beta[2]*var3[i] + beta[3]*sVL[i] + beta[4]*sCD4[i])

#Cumulative Hazard H[t]
cumHaz[i]<-lambda*pow(time[i],alpha)*exp(beta[1]*equals(group[i],1) +
beta[2]*var3[i] + beta[3]*sVL[i]+ beta[4]*sCD4[i])
log.Surv[i] <- -cumHaz[i]
Surv[i]<-exp( -cumHaz[i])



# Definition of the log-likelihood using zeros trick
phi[i] <- C - ((1 - event[i]) * log(h[i]) + log.Surv[i])
zeros[i] ~ dpois(phi[i])
}


for(i in 1:5){

beta[i] ~ dnorm(0,0.001)
#Parameters probabilities
prob[i]<-step(beta[i])

#Hazard Ratio probabilities
HR[i]<-exp(beta[i])
probHR[i] <- step(HR[i]-1)

}
lambda~dgamma(0.1,0.1)
sigma~dunif(0,100)
alpha<-1/sigma


}
", file= "my_weibullph.txt")

然后我可以运行JAGS:

ni <- 5000
na <- 500
nt <- 5
data <- list(N=111, time = mydata_simple$time, event = mydata_simple$event,group = mydata_simple$group, var3 =mydata_simple$var3, var2 = mydata_simplevar2, var1 = mydata_simple$var1, C=50000,zeros=rep(0,111))
inits <- function(){list(beta=rnorm(5,0,0.5), sigma=runif(1,0,1), lambda=runif(1,0.01,1))}
parameters <- c("beta","alpha","lambda","prob" ,"HR", "probHR","h0")

model_ph<- jags.model(data=data, file="my_weibullph.txt",inits=inits,n.adapt=na,n.chains=3)
model_ph_result <- coda.samples(model_ph, variable.names=parameters,
                                  n.iter=ni, thin=nt)#To generate posterior samples in mcmcm.list
formatsave(model_ph_result, file="model_ph_new.RData")

要获得HR的结果:

bss <- do.call(rbind,suppression_ph_result)
sims.list <- vector("list", length(parameters))
names(sims.list) <- parameters
for(p in seq_along(parameters)){
  iik <- grep(paste("^", parameters[p], sep=""), colnames(bss))
  sims.list[[p]] <- bss[,iik]
}

# Hazard ratios
HRB_group<-sims.list[[5]][,2]
HRB_var1<-sims.list[[5]][,3]
HRB_var2<-sims.list[[5]][,4]
HRB_var3<-sims.list[[5]][,5]

#prob HR
pHRB_group<-sims.list[[6]][,1]
pHRB_var1<-sims.list[[6]][,2]
pHRB_var2<-sims.list[[6]][,3]
pHRB_var<-sims.list[[6]][,4]

好吧,当我得到HRB_group的平均值时,我得到的是1.18(而不是生存包中的0.40)。我不知道我在脚本中做错了什么以获得这些如此不同的结果...

先谢谢您。抱歉,如果我无法提供数据,但它们是机密信息,并且我不知道模拟其他数据以将其包括在此处。

0 个答案:

没有答案