• File: inhaler1.bug
var 
  pattern[Npattern,T], # response pattern e.g. (1,1) or (2,4) etc. 
  Ncum[Npattern,T],    # cumulative total
  response[N,T],       # response for patient i in period t
  p[N,T,(Ncut+1)],     # prob of response j for patient i in period t 
  Q[N,T,Ncut],         # cumulative prob of response worse than j
                       # for patient i in period t
  group[N],            # treatment group (1=AB; 2=BA)
  mu[G,T],             # logistic mean for group g & period t
  treat[2,T], beta,    # treatment effect
  period[2,T], pi,     # period effect
  carry[2,T], kappa,   # carryover effect
  a[Ncut],             # cut points for latent response variable
  b[N],                # subject random effect
  tau,                 # precision of subject effects
  sigma, log.sigma;
data {
   # Construct individual response data from contingency table
   for (i in 1:Ncum[1,1]) { 
      group[i] <- 1; for (t in 1:T) { response[i,t] <- pattern[1,t] }
   }
   for (i in (Ncum[1,1]+1):Ncum[1,2]) { 
      group[i] <- 2; for (t in 1:T) { response[i,t] <- pattern[1,t] }
   }

   for (k in 2:Npattern) {
      for(i in (Ncum[k-1,2]+1):Ncum[k,1]) {
         group[i] <- 1; for (t in 1:T) { response[i,t] <- pattern[k,t] }
      }
      for(i in (Ncum[k,1]+1):Ncum[k,2]) {
         group[i] <- 2; for (t in 1:T) { response[i,t] <- pattern[k,t] }
      }
   }
}
model {
  for (i in 1:N) {
     for (t in 1:T) {
        response[i,t] ~ dordered.logit(-mu[group[i],t] + b[i], a[1:Ncut])
     }
     # Random effects
     b[i] ~ dnorm(0.0, tau);
  }

#
# Fixed effects
#
  for (g in 1:G) {
     for(t in 1:T) { 
        # logistic mean for group i in period t
        mu[g,t] <- beta*treat[g,t]/2 + pi*period[g,t]/2 + kappa*carry[g,t]; 
     }
  }                                                             
  beta ~ dnorm(0, 1.0E-06);
  pi ~ dnorm(0, 1.0E-06);
  kappa ~ dnorm(0, 1.0E-06);

# ordered cut points for underlying continuous latent variable  
  for(i in 1:3) {
     a[i] ~ dnorm(0, 1.0E-6);
  }
 
  tau ~ dgamma(1.0E-3, 1.0E-3);
  sigma <- sqrt(1/tau);
  log.sigma <- log(sigma);

}