0

我正在尝试对 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)
}

我要约束的两个节点是P1P2

值得注意的是,这两个节点是可互换的,这意味着它们的值可以交换,而不影响模型的结果。但是我在这里尝试应用的约束是:

0 < P1 < P2

我尝试这样做的方法是使用 sort 函数来确保 P2 在每次迭代中始终是较大的值。但是,当我运行我的模型时,我在括号的第 7 行代码中收到错误“无效或意外的令牌扫描”。

是否有其他方法可以应用此限制或进行更改以允许此模型运行?

4

0 回答 0