我试图研究基于“做贝叶斯数据分析: R,JAGS和Stan (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)这也是我的模型。
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)在这种情况下,我得到了一条错误消息。
Error in jags.model(file = "TEMPmodel.txt", data = dataList) :
RUNTIME ERROR:
Cannot insert node into theta[1...2]. Dimension mismatch我不知道我在这段代码中犯了什么错误。请给我一些建议。
提前谢谢。
发布于 2015-10-25 02:40:56
正如@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)
}
}https://stackoverflow.com/questions/33316206
复制相似问题