如何使用rjags运行逻辑模型

时间:2016-09-03 00:37:06

标签: logistic-regression r2jags

我正在运行rjags的逻辑模型,但错误总是发生(见下文),我觉得我的代码包含所需的一切,并且它们是合乎逻辑的,所以到目前为止我无法检测到代码中的错误。这是错误

Error in jags.model(textConnection(modelstring2), data = list(ro = ro$ro,  : 
RUNTIME ERROR:
Compilation error on line 22.
Unknown variable i
Either supply values for this variable with the data
or define it  on the left hand side of a relation.

以下是我的代码:

#loading the data
data("ro")
?ro

str(ro)

Ntotal<-dim(ro)[1]

modelstring2 <- "
model {

#likelihood

for (i in 1:Ntotal) {

ro[i]~ dbern(mu[i])  



logit(mu[i]) <- alpha + beta[1]*rr[i]

}

#prior

alpha~ dnorm(0, 1.0E-6)

for (j in 1:4) {
beta[i]~ dnorm(0, 1.0E-6)
}
}"


#obatin the initial values by glm model
glm_int <- glm(ro ~ x1 + x2 + x3 + x4,
family= binomial,data = ro)
summary(glm_int)


#initiate the model

datalist<-list( 'ro'=ro[[1]], 'x1'=ro[[2]],'x2'= ro[[3]],
'x3'=ro[[4]],'x4'= ro[[5]],'Ntotal'=Ntotal)

model2<-jags.model(textConnection(modelstring2),
data=list( 'ro' = ro$ro,
'x1'=ro$x1,
'x2'=ro$x2,
'x3'= ro$x3,
'x4'= ro$x4, 'Ntotal'=Ntotal),

inits =list('alpha' =glm_int$coef[[1]],'beta[1]'=   glm_int$coef[[2]],
'beta[2]'=  glm_int$coef[[3]],'beta[3]'= glm_int$coef[[4]],
'beta[4]'= glm_int$coef[[5]]),

n.chains=3,
n.adapt=1000)

期待您的帮助。

1 个答案:

答案 0 :(得分:1)

错误告诉您问题出在第22行。代码的第21-23行是:

for (j in 1:4) {
     beta[i]~ dnorm(0, 1.0E-6)
}

即。索引变量i不存在于j循环中。

JAGS为提供信息性错误付出了相当大的努力,因此值得仔细阅读。请注意,如果您的模型位于单独的文本文件中,则行号引用会更有用(或者runjags会根据请求显示您的模型的行号 - r2jags可能会做类似的事情,我不确定)。