1

所以我认为下面的代码可以在 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与带有“墙”(截断)的离散高斯分布,我想muZ. 我想我可以尝试将其Z设为分类变量并估计参数,但这在理论上似乎很痛苦。我可以使用一些 BUGS 技巧来获得我想要的模型吗?

4

1 回答 1

1

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

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

于 2013-08-12T10:37:08.687 回答