错误:OpenBUGS中的“节点的多个定义”。

时间:2013-08-08 02:00:20

标签: syntax-error probability winbugs

所以我认为以下代码可以在OpenBUGS中使用,但它给了我一个“节点Z的多个定义”错误。

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

list(Z=0)

即使我用Z <- round(X)替换Z <- 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分布的内容类似于带有“墙”的离散高斯(截断),我想从mu上的数据估算Z。我想我可以尝试将Z变成一个分类变量并估计参数,但这似乎在理论上是痛苦的。我可以使用一些BUGS技巧来获得我想要的模型吗?

1 个答案:

答案 0 :(得分:1)

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

虽然您可能更愿意切换到JAGS,它具有处理这种情况的分布式dround() - 在您的情况下n = 0时舍入到n位有效数字的数据。虽然this forum post表明此案例的当前稳定版本存在错误,但您可能需要下载开发版本。