JAGS - 将函数应用于所有参数节点

时间:2017-03-24 13:24:19

标签: r syntax jags winbugs r2jags

我是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

其中gt是网站和时间索引,GT则是网站数量和年数

我收到错误

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个。

1 个答案:

答案 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?

如果不是这种情况并且您仍然收到错误,那么请在您的问题中添加一个可重复性最小的示例,以显示问题(最好在您编写的 - 编辑---行下面)和我们可以尝试帮助解决这个问题。

马特