Rjags错误消息:尺寸不匹配

kma*_*gyo 6 r bayesian jags

我正在尝试研究基于"做贝叶斯数据分析:R,JAGS和斯坦(2015)的教程"一书中的贝叶斯分析.

在本书中,有一些例子.所以,我试图在R中复制这个例子.但是,在这个例子中我收到了一条错误信息.

具体而言,这是示例数据.

data
   y        s
1  1 Reginald
2  0 Reginald
3  1 Reginald
4  1 Reginald
5  1 Reginald
6  1 Reginald
7  1 Reginald
8  0 Reginald
9  0     Tony
10 0     Tony
11 1     Tony
12 0     Tony
13 0     Tony
14 1     Tony
15 0     Tony

y<-data$y
s<-as.numeric(data$s)
Ntotal=length(y)
Nsubj=length(unique(s))

dataList=list(y=y, s=s, Ntotal=Ntotal, Nsubj=Nsubj)
Run Code Online (Sandbox Code Playgroud)

另外,这是我的模特.

modelString=" 
model{
  for(i in 1:Ntotal){
    y[i] ~ dbern(theta[s[i]])
  }
  for(s in 1:Nsubj){
    theta[s] ~ dbeta(2,2)
  }
}
"
writeLines(modelString, con="TEMPmodel.txt")

library(rjags)
library(runjags)
jagsModel=jags.model(file="TEMPmodel.txt",data=dataList)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到一条错误消息.

Error in jags.model(file = "TEMPmodel.txt", data = dataList) : 
  RUNTIME ERROR:
Cannot insert node into theta[1...2]. Dimension mismatch
Run Code Online (Sandbox Code Playgroud)

我不知道我在这段代码中弄错了什么.请给我建议.

提前致谢.

jba*_*ums 6

正如@nicola所建议的那样,问题在于你将s数据作为数据传递给模型,而且还s用作迭代计数器1:Nsubj.正如JAGS所指出的那样,这会引起对theta...... 尺寸的混淆......它的长度是15还是2?

以下作品:

model{
  for(i in 1:Ntotal){
    y[i] ~ dbern(theta[s[i]])
  }
  for(j in 1:Nsubj){
    theta[j] ~ dbeta(2,2)
  }
}
Run Code Online (Sandbox Code Playgroud)