我正在尝试对 OpenBUGS 中的两个节点应用约束。
这是我的模型:
model {
for (i in 1:n) {
y [i] ~ dnorm(mu [i], tau)
mu [i] <- Z/(P1 * x[i])*(P2 * x[i])
ranked.Limits <- sort(Limit)
P1 <- ranked.Limits[1]
P2 <- ranked.Limits[2]
}
## Priors
Z ~ dnorm (400, 0.005)
tau ~ dgamma(0.001, 0.001)
sigma2 <- 1/tau
Limit[1] ~ dnorm(0, 0.0001)
Limit[2] ~ dnorm(0, 0.0001)
}
我要约束的两个节点是P1和P2。
值得注意的是,这两个节点是可互换的,这意味着它们的值可以交换,而不影响模型的结果。但是我在这里尝试应用的约束是:
0 < P1 < P2
我尝试这样做的方法是使用 sort 函数来确保 P2 在每次迭代中始终是较大的值。但是,当我运行我的模型时,我在括号的第 7 行代码中收到错误“无效或意外的令牌扫描”。
是否有其他方法可以应用此限制或进行更改以允许此模型运行?