4

我正在尝试使用 BUGS 编写狄利克雷多项式模型。基本上我有 18 个地区和每个地区 3 个类别。例如,区域 1:0.50 属于 Low,0.30 属于 Middle,0.20 属于 High。该列表当然以不同的比例继续到第 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 个区域。单击“gen inits”后,它会显示“Dirichlet36”。请帮我编写代码。

4

1 回答 1

5

这可能会有所帮助(来源):

学习狄利克雷分布的参数

假设作为模型的一部分,有 J 个概率数组 p[j, 1:K], j = 1, ..., J,其中 K 是每个数组的维数,而 sum(p[j, 1:K]) = 1 对于所有 j。我们给他们每个人一个狄利克雷先验:

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

我们想了解 alpha[]。但是,Dirichlet 分布的参数 alpha[] 不能是随机节点。诀窍是要注意,如果 delta[k] ~ dgamma(alpha[k], 1),则向量元素为 delta[k] / sum(delta[1:K]), k = 1, ..., K, 是带参数 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] 上。

于 2014-08-16T08:09:15.570 回答