2016-09-21 17 views
0

저는 두 가지 구성 요소를 포함한 혼합 모델을 사용하고 있습니다 : 벡터에 맞춰 정규 분포와 로그 정규 분포를 포함하고 있습니다. 제가 여기 장애가 있었던 사용하여 시도하는 코드이다정상 + 비정규 혼합물 모델 피팅에 대한 질문

model { 
    for(i in 1:N) { 
    y[i] <- latent[i,index[i]+1] 
    index[i] ~dbern(pi) 
    latent[i,1]~ dlnorm(mu1,tau1) 
    latent[i,2]~ dnorm(mu2,tau2)} 
    pi ~ dbeta(0.5,0.5) 
    mu1 ~ dnorm(0.4,0.000001) 
    tau1~ dgamma(0.001,0.001) 
    mu2 ~ dnorm(4,0.000001) 
    tau2~ dgamma(0.001,0.001) 
} 

그러나, 오류 메시지가 작동하지 않는 "Y [1]은 논리적 노드 관찰 될 수 없다". 또한

y[i] <- pi*z1+(1-pi)*z2 

z1 ~ dnorm(mu1,tau1) 

z2 ~ dlnorm(mu2,tau2) 

...

을 시도했지만 같은 오류 메시지를 주었다. 그것은 y [i]에 분포를 할당해야만하는 것 같습니다. 누구든지이 문제를 극복하는 데 도움이 될 수 있습니까? 또는 그러한 혼합 모델을 해결하기위한 다른 접근법도 역시 인식 될 것이다.

답변

0

그냥이 두 모델을 혼합하고 싶다면이 같은 것을 할 수있는 :

model { 
    for(i in 1:N) { 
    index[i] ~dbern(pi) 
    latent[i]~ (dlnorm(mu1,tau1)*(1-index[i]))+(dnorm(mu2,tau2)*index[i]) 
} 
    pi ~ dbeta(0.5,0.5) 
    mu1 ~ dnorm(0.4,0.000001) 
    tau1~ dgamma(0.001,0.001) 
    mu2 ~ dnorm(4,0.000001) 
    tau2~ dgamma(0.001,0.001) 
} 

그런 식으로,이 중 로그 정규 또는 일반 모델을 사용하도록 선택 모델의 각 단계에있다. index을 추적하면 MCMC 체인의 각 단계에서 어떤 분포가 선택되는지 알려줍니다 (index = 1 = normal, index = 0 = lognormal). 또한, 인덱스의 합계를 취하여 MCMC 체인의 단계 수로 나눠서 1이 선택 된 비율 (보통)을 얻을 수 있습니다.

+0

안녕하세요. 회신 해 주셔서 감사합니다. 나는 당신의 코드를 시도했으나 오류 메시지는 "모델 파일을 파싱하는 중 오류가 발생했습니다 : 4 행의 구문 오류"("" " –

+0

아."latent [i] ~ (dlnorm (mu1, tau1) * (1-index [i (dnorm (mu1, tau1) * (1-index [i])) + (dnorm (mu2, τ2))) + (dnorm (mu2, τ2) * index [i] * index [i])'와 같은지 확인하고, 그렇지 않으면 답을 편집 할 것입니다. –