Dirichlet-Multinomial WinBUGS代码

时间:2014-06-22 08:57:22

标签: bayesian winbugs multinomial dirichlet

我尝试使用BUGS编写dirichlet-multinomial模型。 基本上我每个地区有18个地区和3个类别。在例子中, 区域1:0.50属于低,0.30属于中,0.20属于高。当然,这个列表以不同的比例进入了18区。我得到的唯一代码就是这个

`model  {
 for (i in 1:N) {
 x[1:3] ~ dmulti(p[],n[i])
 p[1:3] ~ ddirch(alpha[])
 }
 for (k in 1:3) {
 alpha[k] <- 1
 }
 }
 DATA list(n=c(38483, 2259, 1900),x=c(29256.42719, 1857.431404, 1548.007808, 29256.42719, 1857.431404, 1548.007808, 29256.42719, 1857.431404, 1548.007808), N=3)`

我首先将它简化为3个区域。它声明了Dirichlet36&#39;点击“gen inits”后再点击。请帮我编写代码。

1 个答案:

答案 0 :(得分:3)

这可能会有所帮助(source):

  

了解Dirichlet分布的参数

     

假设作为模型的一部分,有J个概率数组p [j,1:K],j = 1,...,J,其中K是每个数组的维数和总和(p [j,1:对于所有j,K])= 1。我们先给每个人一个Dirichlet:

      p[j, 1:K] ~ ddirch(alpha[])
     

我们想了解alpha []。然而,Dirichlet分布的参数alpha []不能是随机节点。诀窍是要注意,如果delta [k] ~dgamma(alpha [k],1),那么带有元素delta [k] / sum(delta [1:K]),k = 1,...的向量, K,是Dirichlet,参数为alpha [k],k = 1,...,K。所以下面的结构应该允许学习参数alpha []:

      for (k in 1:K) {
              p[j, k] <- delta[j, k] / sum(delta[j,])
              delta[j, k] ~ dgamma(alpha[k], 1)
      }
     

先验可以直接放在alpha [k]上。