0

我很难在我的 OpenBUGS 模型中减去两个向量。下面代码的最后一行不断给出错误“预期的右括号错误”:

model { 
  for ( i in 1:N) {
    for(j in 1:q) {
      vv[i,j] ~ dnorm(vz[i,j],tau.eta[j])
    }
    vz[i,1:q] ~ dmnorm(media.z[i,], K.delta[,])
    for(j in 1:q) {
      mean.z[i,j] <- inprod(K[i,] , vbeta[j,])
    }
    K[i,1] <- 1.0
    for(j in 1:N) {
      K[i,j+1] <- sum(ve[,i] - ve[,j])
    }
  }

如果我将该行更改为K[i,j+1] <- sum(ve[,i]) - sum(ve[,j]),则模型可以正常工作,但这不是我想要做的。我想按元素减去。

我在 SO 上搜索了 OpenBUGS,但只有几个不相关的主题:

OpenBUGS - 未定义变量

OpenBUGS:伯努利分布中的缺失值

在 Stats Stack Exchange 中有这篇文章很接近,但我仍然无法在我的模型中实现它:

https://stats.stackexchange.com/questions/20653/vector-multiplication-in-bugs-and-jags/20739#20739

我知道我必须编写一个 for 循环,但这肯定让我很头疼。:)

我尝试将该行更改为:

for(k in 1:p) { temp [k] <- ve[k,i] - ve[k,j] }
K[i,j+1] <- sum(temp[])

其中“p”是每个“ve”中的行数。现在我不断收到错误“节点 temp[1] 的多个定义”。

我绝对可以使用一些帮助。将不胜感激。

向所有人致以最诚挚的问候,并在此先感谢!

PS:我想在这个问题中添加标签“OpenBUGS”,但不幸的是我不能,因为这将是一个新标签,而且我没有足够的声誉。我改为添加“winbugs”。

4

1 回答 1

1

“多个定义”错误是因为 temp[k] 在 i 上的循环和 j 上的另一个循环中一遍又一遍地重新定义 - 你只能定义一次。要解决这个问题,请使用 i 和 j 下标,例如

for(k in 1:p) { temp[k,i,j] <- ve[k,i] - ve[k,j] } 
K[i,j+1] <- sum(temp[,i,j])

虽然如果它编译并运行,我会检查结果以确保这正是你想要的数学结果。

于 2013-08-12T10:17:43.040 回答