我尝试使用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”后再点击。请帮我编写代码。
答案 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]上。