1

我一直在尝试使用贝叶斯方法解决问题,但我不知道如何编写模型。

我试图找到值 mu 使得 x = mu + Error, Error ~ Gamma(a, b) (或其他分布)。

基本上我希望能够说类似的话:

for(i in 1:N) {
  x[i] <- mu + tau[i]
  tau[i] ~ dgamma(0.001, 0.001)
}
mu ~ dunif(0.0, 1000)

但是,这不起作用,因为 x[i] 需要有一个分布,我想不出如何做到这一点(我试过让 x[i] ~ dgamma(0.001, 0.001),但这没有't a. 将 x 限制为 > mu,并且 b. 不能帮助我估计 mu。

如果您能提供帮助,将不胜感激。

谢谢!

4

1 回答 1

1

如果我理解正确,我认为您应该导出 BUGS 之外的 x 值的最小值(mu)并将其作为数据的一部分传递,或者直接给出 tau。这是必要的,因为 BUGS 中的 min 函数不适用于整个向量。也许这样的模型(和数据)是合适的:

#BUGS model
model{
    #data manipulations
    for(i in 1:N){
        tau[i] <- x[i]-mu
    }

    #model
    for(i  in 1:N){
        y[i] ~ dlnorm(tau[i], y.tol)
        log.y[i] <- log(y[i])
    }

    #prior
    y.tol ~ dunif(0,1000)
}

#data
list(x=c(5,3,8,9,3,6,8,2,4,11), N=10, mu=2)

我的另一个想法是,也许您想将最小值建模为极值建模练习的类型?在这种情况下,您应该检查 OpenBUGS 中的 dgev。

于 2012-12-03T17:04:05.430 回答