• File: eyes.bug
/* A version of the EYES problem using the dnormix function defined in the
 * mix module.  With the mix module loaded, the  NormMix sampling method will
 * be used to sample l0, P0, and tau.  The NormMix method uses tempered
 * transitions to jump between distinct modes of the posteriod distribution,
 * resulting in switching of the group labels.
 * 
 * A fairly strong Dirichlet prior on P0 is required to avoid one of P0[1]
 * or P[0] going to near zero. This results in a wide excursion of the
 * lambda parameters as the prior dominates the density calculations.
 */
var
    y[N],        # observations
    T[N],        # true groups (labelled 1,2)
    lambda[2],   # means of two groups
    theta,       # scaled positive shift between groups
    tau,         # sampling precision
    sigma,       # sampling standard deviation
    P[2],        # proportion in first group
    alpha[2];    # prior parameters for proportions
model {
   for (i in 1:N){
       y[i]  ~ dnormmix(l0, tau1, P0);       
   }
   sigma     <- 1/sqrt(tau);
   tau       ~ dgamma(0.01,0.01);
   P0        ~ ddirch(alpha[]);    # prior for mixing proportion
   for (i in 1:2) {
      l0[i]  ~ dnorm(0, 1.0E-6); 
      alpha[i]  <- 4              
      tau1[i] <- tau
   }
   
   ##Post processing to restore identifiable groups
   P[1] <- P0[1] * (l0[1] < l0[2]) + P0[2] * (l0[2] < l0[1])
   P[2] <- P0[1] * (l0[1] > l0[2]) + P0[2] * (l0[2] > l0[1])
   lambda[1] <- l0[1] * (l0[1] < l0[2]) + l0[2] * (l0[2] < l0[1])
   lambda[2] <- l0[1] * (l0[1] > l0[2]) + l0[2] * (l0[2] > l0[1])
}