0

我是 JAGS 的新手,我正在通过R2jags包在 R 中运行模型。模型代码基于取自 Kéry & 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

wheregt是地点和时间指数,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 个维度。

4

1 回答 1

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 行是您没有显示的内容,或者您​​可能在模型中的其他位置指定了 fit 或 E 具有不同数量的维度?

如果不是这种情况并且您仍然遇到错误,那么请在您的问题中添加一个最小的可重现示例来显示问题(最好在您已经编写的内容下方的 ---EDIT--- 行下方),我们可以尝试帮助解决这个问题。

马特

于 2017-03-26T11:50:07.007 回答