我一直在尝试使用贝叶斯方法解决问题,但我无法弄清楚如何编写模型。
我试图找到值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),但这不是a。约束x是&gt; mu,而b。不能帮我估算mu。
如果你能提供帮助,我们将非常感激。
谢谢!
答案 0 :(得分:1)
如果我理解正确,我认为你应该在BUGS之外得到x的最小值(μ)并将其作为数据的一部分传递或直接给出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。