错误:在 OpenBUG 中"Multiple definitions of node"。



所以我以为下面的代码可以在OpenBUGS中工作,但它给了我一个"节点Z的多个定义"错误。

model
{
 Z <- round(X)
 X ~ dnorm(0,1)T(-2,2)
}
list(Z=0)

即使我用Z <- X替换Z <- round(X),我仍然会得到同样的错误。根据这一事实,我们可以推断出错误是由对可观察变量使用逻辑赋值引起的,特别是,错误不是由round()运算引起的。

为什么BUGS不允许这样做?此外,在这种情况下,什么是好的解决方案?这里是我想要实现的一个更通用的版本,它本质上是对有墙的离散高斯进行建模(截断):

model
{
 for(i in 1:N){
   Z[i] <- round(X[i])
   X[i] ~ dnorm(mu,1)T(-2,2)
 }
mu ~ dunif(-2,2)
}

从本质上讲,我希望Z以类似于具有"墙"(截断)的离散高斯分布,并且我希望从Z上的数据估计mu。我想我可以尝试将Z变成一个分类变量并估计参数,但这在理论上似乎很痛苦。有没有一些BUGS技巧可以让我得到我想要的模型?

WinBUGS和OpenBUGS不允许观察到的数据是未观察到的变量的确定函数。正如您所建议的,您可以使用dcat()并用正态分布来表示概率。

尽管您可能更喜欢切换到JAGS,它有一个处理这种情况的分发dround()-数据四舍五入到n个有效数字,在您的情况下为n=0。尽管这篇论坛帖子表明,对于这种情况,当前的稳定版本中存在一个错误,您可能需要下载开发版本。