cox regression model에 대한 베타를 OpenBUGS code으로 추정하고 싶습니다. 예를 들어 베타 버전이 하나 뿐인 예제에서 수정 된 예제 코드는 다양한 베타 버전이 필요합니다. 모델에 따라 다릅니다.openBUGS 모델을 JAGS로 변환하는 중 오류가 발생했습니다
이것은 내 openBUGS 모델입니다. 이 예상대로 실행 :
bugsmodel <- function(){
# Set up data
for(i in 1:N) {
for(j in 1:T) {
Y[i,j] <- step(obs.t[i] - t[j] + eps)
dN[i, j] <- Y[i, j] * step(t[j + 1] - obs.t[i] - eps) * fail[i]
}
}
# Model
for(i in 1:N){
betax[i,1] <- 0
for(k in 2:p+1){
betax[i,k] <- betax[i,k-1] + beta[k-1]*x[i,k-1]
}
}
for(j in 1:T) {
for(i in 1:N) {
dN[i, j] ~ dpois(Idt[i, j]) # Likelihood
Idt[i, j] <- Y[i, j] * exp(betax[i,p+1]) * dL0[j] # Intensity
}
dL0[j] ~ dgamma(mu[j], c)
mu[j] <- dL0.star[j] * C# prior mean hazard
}
c <- 0.001
r <- 0.1
for (j in 1 : T) {
dL0.star[j] <- r * (t[j + 1] - t[j])
}
for(k in 1:p){
beta[k] ~ dnorm(0.0,0.000001)
}
}
그러나, 나는 장애가 있었던 경우에 실행하는 구문을 수정, 그것은 재정의 나에게 오류를 제공합니다
는model_jags <- "model{
# Set up data
for(i in 1:N) {
for(j in 1:T) {
Y[i,j] <- step(obs.t[i] - t[j] + eps)
dN[i, j] <- Y[i, j] * step(t[j + 1] - obs.t[i] - eps) * fail[i]
}
}
# Model
for(i in 1:N){
betax[i,1] <- 0
for(k in 2:p+1){
betax[i,k] <- betax[i,k-1] + beta[k-1]*x[i,k-1]
}
}
for(j in 1:T) {
for(i in 1:N) {
dN[i, j] ~ dpois(Idt[i, j]) # Likelihood
Idt[i, j] <- Y[i, j] * exp(betax[i,p+1]) * dL0[j] # Intensity
}
dL0[j] ~ dgamma(mu[j], c)
mu[j] <- dL0.star[j] * C# prior mean hazard
}
c <- 0.001
r <- 0.1
for (j in 1 : T) {
dL0.star[j] <- r * (t[j + 1] - t[j])
}
for(k in 1:p){
beta[k] ~ dnorm(0.0,0.000001)
}
}"
테스트 코드 :
n = 100
round=2
x1 = rbinom(n,size=1,prob=0.5)
x2 = rbinom(n,size=1,prob=0.5)
x3 = rbinom(n,size=1,prob=0.5)
x = t(rbind(x1,x2,x3))
censortime = runif(n,0,1)
survtime= rexp(n,rate=exp(x1+2*x2+3*x3))
survtime = round(survtime,digits=round)
event = as.numeric(censortime>survtime)
y = survtime;
y[event==0] = censortime[event==0]
t=sort(unique(y[event==1]))
t=c(t,max(censortime))
bigt=length(t)-1
#####################################
model=c(1,1,1)
x <- x[,model==1]
p <- sum(model) # models have betas with 1
params <- c("beta","dL0")
data <- list(x=x,obs.t=y,t=t,T=bigt,N=n,fail=event,eps=1E-10,p=p)
inits <- function(){list(beta = rep(0,p), dL0 = rep(0.0001,bigt))}
jags <- jags.model(textConnection(model_jags),
data = data,
n.chains = 1,
n.adapt = 100)
베타는 정확히 무엇인가? 그것은 어떤 분포의 비율 스칼라처럼 보입니다, 그것은 무엇입니까? –
cox 모델에 대한 회귀 계수 @ Carl – Leo
좋아, 일부 링크를 넣어서 내가 당신의 질문을 이해할 수있게하고, 가능하다면 다른 사람들도 할 수 있습니다. 바라기를, 그것은 당신에게 대답을 얻는 더 나은 기회를 줄 것입니다. –