2014-06-22 52 views
1

我正在嘗試使用BUGS編寫dirichlet-multinomial模型。 基本上我有18個地區和3個類別每個地區。例如, 區域1:0.50屬於低,0.30屬於中,0.20屬於高。這樣的例子不勝枚舉,以區域18當然也有不同proportions.The只有我的代碼是這樣Dirichlet-Multinomial WinBUGS代碼

`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'。請幫我編碼。

+0

這是不明確的 - 如果x是多項式,它們應該是整數。此外,您提供的代碼不會重現您所述的錯誤。看起來x和p需要是矩陣,例如x [i,1:3],p [i,1:3],如果x應該是一個矩陣,它需要在數據中定義爲類似結構(.Data = ...,.Dim = C()) –

回答

1

這可以是有幫助的(source):

學習有關狄利克雷分佈的參數

假設作爲模型的一部分有J個概率陣列P [],1:K], j = 1,...,J,其中K是每個陣列的維數,並且對於所有j,和(p [j,1:K])= 1。我們給他們每個人一個Dirichlet事先:

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

,我們想了解alpha []。但是,狄利克雷分佈的參數α[]不能是隨機節點。訣竅是要注意,如果delta [k]〜dgamma(alpha [k],1),則元素delta [k]/sum(delta [1:K]),k = 1,..., K,是與狄利克雷參數阿爾法[K],K = 1,...,K。所以下面的結構應該允許學習有關參數的α[]:

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

的現有可直接放置在阿爾法[K]的。