我很难在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”。
答案 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])
虽然如果编译并运行,我会检查结果,以确保这是你想要的数学。