2014-06-22 13 views
1

버그를 사용하여 dirichlet-multinomial 모델을 코딩하려고합니다. 기본적으로 지역마다 18 개의 지역과 3 개의 카테고리가 있습니다. 예 : 영역 1 : 0.50은 낮음에 속하고 0.30은 중간에 속하고 0.20은 높음에 속합니다. 목록은 proportions.The에게 내가 가진 유일한 코드를 변화와 함께 물론 지역 (18)에 계속 난 그냥 예를 들어 처음 3 개 지역에 단축이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)` 

입니다. 'gen inits'를 클릭하면 'Dirichlet36'이 표시됩니다. 코드 작성을 도와주세요.

+0

이것은 명확하지 않습니다. x가 다항식이면 정수 여야합니다. 또한 제공 한 코드는 명시한 오류를 재현하지 않습니다. x와 p는 행렬이어야합니다. x [i, 1 : 3], p [i, 1 : 3]이고, x가 행렬이라면, 그 데이터는 구조체 (.Data = ..., .Dim = c()) –

답변

1

이 도움이 될 수있다 (source)

디리클레 분포의 매개 변수에 대해 알아

가정하자 J 확률 어레이 (P)가있는 모델의 일부로서 [J : 1, K], j = 1, ..., J, 여기서 K는 각 배열의 차원이고 모든 j에 대한 sum (p [j, 1 : K]) = 1입니다. 우리는 각자에게 사전 Dirichlet을 제공합니다 :

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

그리고 우리는 alpha []에 대해 배우고 싶습니다. 그러나, Dirichlet 분포의 파라미터 α []는 확률 적 노드가 될 수 없다. 트릭은 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] 's.