如何在OpenBUGS中减去两个向量

时间:2013-08-09 23:13:19

标签: vector subtraction statistics winbugs

我很难在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 - Variable is not defined

OpenBUGS: missing value in Bernoulli distribution

在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”。

1 个答案:

答案 0 :(得分: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])

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