我是JAGS的新手,我通过R2jags
包在R中运行模型。
型号代码基于取自Kéry& Co.的代码。 Schaub 2012('使用WinBUGS进行贝叶斯人口分析'),第399页。
计算卡方差异度量
model {
....
for(g in 1:G) {
for (t in 1:T) {
...
E[g,t] <- pow((y[g,t] - eval[g,t]),2) / eval[g,t]
...
}#t
}#g
fit <- sum(E[,])
}#model
其中g
和t
是网站和时间索引,G
和T
则是网站数量和年数
我收到错误
Error in jags.model(model.file, data = data, inits = init.values, n.chains = n.chains, :
RUNTIME ERROR:
Compilation error on line 140.
Cannot evaluate subset expression for fit
是否由JAGS相对于WinBUGS使用的语法不同引起?代码与本书中使用的代码相同,除了我有2个维度而不是书籍示例中的3个。
答案 0 :(得分:0)
要回答问题的最后部分,JAGS中的不同语法不会导致该错误(尽管错误消息在BUGS中可能看起来不同)。
事实上,我发现你发布的代码片段没有任何问题,以下可重复的例子表明它至少在数据中给出了y和eval时有效:
m <- 'model {
for(g in 1:G) {
for (t in 1:T) {
E[g,t] <- pow((y[g,t] - eval[g,t]),2) / eval[g,t]
}#t
}#g
fit <- sum(E[,])
#data# G, T, y, eval
#monitor# fit
}#model
'
library('runjags')
G=T <- 10
y <- matrix(rnorm(100), nrow=G, ncol=T)
eval <- matrix(rnorm(100), nrow=G, ncol=T)
results <- run.jags(m)
您是否验证了140行所指的内容?第140行是您未显示的内容,或者您是否在模型中使用不同维数指定了拟合或E?
如果不是这种情况并且您仍然收到错误,那么请在您的问题中添加一个可重复性最小的示例,以显示问题(最好在您编写的 - 编辑---行下面)和我们可以尝试帮助解决这个问题。
马特