Openbugs code for Latent Class Model; { # multinomial models for (k in 1:K){ y[k,1:2,1:2,1:2,1:2] ~ dmulti(p[k,1:2,1:2,1:2,1:2], n[k]) } # cell probabilities expressed in terms of se, sp and pi for (k in 1:K){ p[k,1,1,1,1] <- pi[k]*se[1]*se[2]*(se[3]*se[4]+cov.se[34]) + (1-pi[k])*(1-sp[1])*(1-sp[2])*((1-sp[3])*(1-sp[4])+cov.sp[34]) p[k,1,1,1,2] <- pi[k]*se[1]*se[2]*(se[3]*(1-se[4])-cov.se[34]) + (1-pi[k])*(1-sp[1])*(1-sp[2])*((1-sp[3])*(sp[4])-cov.sp[34]) p[k,1,1,2,1] <- pi[k]*se[1]*se[2]*((1-se[3])*se[4]-cov.se[34]) + (1-pi[k])*(1-sp[1])*(1-sp[2])*((sp[3])*(1-sp[4])-cov.sp[34]) p[k,1,1,2,2] <- pi[k]*se[1]*se[2]*((1-se[3])*(1-se[4])+cov.se[34]) + (1-pi[k])*(1-sp[1])*(1-sp[2])*((sp[3])*(sp[4])+cov.sp[34]) p[k,1,2,1,1] <- pi[k]*se[1]*(1-se[2])*(se[3]*se[4]+cov.se[34]) + (1-pi[k])*(1-sp[1])*sp[2]*((1-sp[3])*(1-sp[4])+cov.sp[34]) p[k,1,2,1,2] <- pi[k]*se[1]*(1-se[2])*(se[3]*(1-se[4])-cov.se[34]) + (1-pi[k])*(1-sp[1])*sp[2]*((1-sp[3])*(sp[4])-cov.sp[34]) p[k,1,2,2,1] <- pi[k]*se[1]*(1-se[2])*((1-se[3])*se[4]-cov.se[34]) + (1-pi[k])*(1-sp[1])*sp[2]*((sp[3])*(1-sp[4])-cov.sp[34]) p[k,1,2,2,2] <- pi[k]*se[1]*(1-se[2])*((1-se[3])*(1-se[4])+cov.se[34]) + (1-pi[k])*(1-sp[1])*sp[2]*((sp[3])*(sp[4])+cov.sp[34]) p[k,2,1,1,1] <- pi[k]*(1-se[1])*se[2]*(se[3]*se[4]+cov.se[34]) + (1-pi[k])*sp[1]*(1-sp[2])*((1-sp[3])*(1-sp[4])+cov.sp[34]) p[k,2,1,1,2] <- pi[k]*(1-se[1])*se[2]*(se[3]*(1-se[4])-cov.se[34]) + (1-pi[k])*sp[1]*(1-sp[2])*((1-sp[3])*(sp[4])-cov.sp[34]) p[k,2,1,2,1] <- pi[k]*(1-se[1])*se[2]*((1-se[3])*se[4]-cov.se[34]) + (1-pi[k])*sp[1]*(1-sp[2])*((sp[3])*(1-sp[4])-cov.sp[34]) p[k,2,1,2,2] <- pi[k]*(1-se[1])*se[2]*((1-se[3])*(1-se[4])+cov.se[34]) + (1-pi[k])*sp[1]*(1-sp[2])*((sp[3])*(sp[4])+cov.sp[34]) p[k,2,2,1,1] <- pi[k]*(1-se[1])*(1-se[2])*(se[3]*se[4]+cov.se[34]) + (1-pi[k])*sp[1]*sp[2]*((1-sp[3])*(1-sp[4])+cov.sp[34]) p[k,2,2,1,2] <- pi[k]*(1-se[1])*(1-se[2])*(se[3]*(1-se[4])-cov.se[34]) + (1-pi[k])*sp[1]*sp[2]*((1-sp[3])*(sp[4])-cov.sp[34]) p[k,2,2,2,1] <- pi[k]*(1-se[1])*(1-se[2])*((1-se[3])*se[4]-cov.se[34]) + (1-pi[k])*sp[1]*sp[2]*((sp[3])*(1-sp[4])-cov.sp[34]) p[k,2,2,2,2] <- pi[k]*(1-se[1])*(1-se[2])*((1-se[3])*(1-se[4])+cov.se[34]) + (1-pi[k])*sp[1]*sp[2]*((sp[3])*(sp[4])+cov.sp[34]) } #likelihood ratio calculations for (i in 1:4){ lr.pos[i]<-se[i]/(1-sp[i]) lr.neg[i]<-(1-se[i])/sp[i] } # prior distributions #se and sp for (i in 1:4){ se[i] ~ dbeta(1,1) sp[i] ~ dbeta(1,1) } #prevalence for (k in 1:K){ pi[k] ~ dbeta(1,1) } # covariance terms cov.se[12] ~ dunif(0,0) cov.sp[12] ~ dunif(0,0) cov.se[13] ~ dunif(0,0) cov.sp[13] ~ dunif(0,0) cov.se[14] ~ dunif(0,0) cov.sp[14] ~ dunif(0,0) cov.se[23] ~ dunif(0,0) cov.sp[23] ~ dunif(0,0) cov.se[24] ~ dunif(0,0) cov.sp[24] ~ dunif(0,0) se.l[34] <- max(-(1-se[3])*(1-se[4]),-se[3]*se[4]) se.u[34] <- min((1-se[3])*se[4],se[3]*(1-se[4])) cov.se[34] ~ dunif(se.l[34],se.u[34]) p.cov.se[34]<-step(cov.se[34]) pr.max.se[34]<-cov.se[34]/se.u[34] pr.min.se[34]<-cov.se[34]/se.l[34] sp.l[34] <- max(-(1-sp[3])*(1-sp[4]),-sp[3]*sp[4]) sp.u[34] <- min((1-sp[3])*sp[4],sp[3]*(1-sp[4])) cov.sp[34] ~ dunif(sp.l[34],sp.u[34]) p.cov.sp[34]<-step(cov.sp[34]) pr.max.sp[34]<-cov.sp[34]/sp.u[34] pr.min.sp[34]<-cov.sp[34]/sp.l[34] # in parallel interpretation #se and sp se.par[1]<- 1-((1-se[1])*(1-se[2]) + cov.se[12]) sp.par[1]<- sp[2]*sp[3]+cov.sp[12] se.par[2]<- 1-((1-se[1])*(1-se[3]) + cov.se[13]) sp.par[2]<- sp[1]*sp[3] + cov.se[13] se.par[3]<- 1-((1-se[1])*(1-se[4]) + cov.se[14]) sp.par[3]<- sp[1]*sp[4] + cov.se[14] se.par[4]<- 1-((1-se[2])*(1-se[3]) + cov.se[23]) sp.par[4]<- sp[2]*sp[3] + cov.se[23] se.par[5]<- 1-((1-se[2])*(1-se[4]) + cov.se[24]) sp.par[5]<- sp[2]*sp[4] + cov.se[24] se.par[6]<- 1-((1-se[3])*(1-se[4])+cov.se[34]) sp.par[6]<- sp[3]*sp[4]+cov.sp[34] #likelihood ratios for (i in 1:6){ lr.pos.par[i]<-se.par[i]/(1-sp.par[i]) lr.neg.par[i]<-(1-se.par[i])/sp.par[i] } # in series interpretation #se and sp se.ser[1]<- se[1]*se[2] + cov.se[12] sp.ser[1]<- 1-((1-sp[1])*(1-sp[2]) + cov.sp[12]) se.ser[2]<- se[1]*se[3] + cov.se[13] sp.ser[2]<- 1-((1-sp[1])*(1-sp[3]) + cov.se[13]) se.ser[3]<- se[1]*se[4] + cov.se[14] sp.ser[3]<- 1-((1-sp[1])*(1-sp[4]) + cov.se[14]) se.ser[4]<- se[2]*se[3] + cov.se[23] sp.ser[4]<- 1-((1-sp[2])*(1-sp[3]) + cov.se[23]) se.ser[5]<- se[2]*se[4] + cov.se[24] sp.ser[5]<- 1-((1-sp[2])*(1-sp[4]) + cov.se[24]) se.ser[6]<- se[3]*se[4] + cov.se[34] sp.ser[6]<- 1-((1-sp[3])*(1-sp[4]) + cov.sp[34]) #likelihood ratios for (i in 1:6){ lr.pos.ser[i]<-se.ser[i]/(1-sp.ser[i]) lr.neg.ser[i]<-(1-se.ser[i])/sp.ser[i] } #bayesian comparisons between Se and LRs p.se[12]<-step(se[1]-se[2]) p.se[13]<-step(se[1]-se[3]) p.se[14]<-step(se[1]-se[4]) p.se[23]<-step(se[2]-se[3]) p.se[24]<-step(se[2]-se[4]) p.se[34]<-step(se[3]-se[4]) p.sp[12]<-step(sp[1]-sp[2]) p.sp[13]<-step(sp[1]-sp[3]) p.sp[14]<-step(sp[1]-sp[4]) p.sp[23]<-step(sp[2]-sp[3]) p.sp[24]<-step(sp[2]-sp[4]) p.sp[34]<-step(sp[3]-sp[4]) p.lr.pos[12]<-step(lr.pos[1]-lr.pos[2]) p.lr.pos[13]<-step(lr.pos[1]-lr.pos[3]) p.lr.pos[14]<-step(lr.pos[1]-lr.pos[4]) p.lr.pos[23]<-step(lr.pos[2]-lr.pos[3]) p.lr.pos[24]<-step(lr.pos[2]-lr.pos[4]) p.lr.pos[34]<-step(lr.pos[3]-lr.pos[4]) p.lr.neg[12]<-step(lr.neg[1]-lr.neg[2]) p.lr.neg[13]<-step(lr.neg[1]-lr.neg[3]) p.lr.neg[14]<-step(lr.neg[1]-lr.neg[4]) p.lr.neg[23]<-step(lr.neg[2]-lr.neg[3]) p.lr.neg[24]<-step(lr.neg[2]-lr.neg[4]) p.lr.neg[34]<-step(lr.neg[3]-lr.neg[4]) p.se.ser[12]<-step(se.ser[1]-se.ser[2]) p.se.ser[13]<-step(se.ser[1]-se.ser[3]) p.se.ser[14]<-step(se.ser[1]-se.ser[4]) p.se.ser[15]<-step(se.ser[1]-se.ser[5]) p.se.ser[16]<-step(se.ser[1]-se.ser[6]) p.se.ser[23]<-step(se.ser[2]-se.ser[3]) p.se.ser[24]<-step(se.ser[2]-se.ser[4]) p.se.ser[25]<-step(se.ser[2]-se.ser[5]) p.se.ser[26]<-step(se.ser[2]-se.ser[6]) p.se.ser[34]<-step(se.ser[3]-se.ser[4]) p.se.ser[35]<-step(se.ser[3]-se.ser[5]) p.se.ser[36]<-step(se.ser[3]-se.ser[6]) p.se.ser[45]<-step(se.ser[4]-se.ser[5]) p.se.ser[46]<-step(se.ser[4]-se.ser[6]) p.se.ser[56]<-step(se.ser[5]-se.ser[6]) p.sp.ser[12]<-step(sp.ser[1]-sp.ser[2]) p.sp.ser[13]<-step(sp.ser[1]-sp.ser[3]) p.sp.ser[14]<-step(sp.ser[1]-sp.ser[4]) p.sp.ser[15]<-step(sp.ser[1]-sp.ser[5]) p.sp.ser[16]<-step(sp.ser[1]-sp.ser[6]) p.sp.ser[23]<-step(sp.ser[2]-sp.ser[3]) p.sp.ser[24]<-step(sp.ser[2]-sp.ser[4]) p.sp.ser[25]<-step(sp.ser[2]-sp.ser[5]) p.sp.ser[26]<-step(sp.ser[2]-sp.ser[6]) p.sp.ser[34]<-step(sp.ser[3]-sp.ser[4]) p.sp.ser[35]<-step(sp.ser[3]-sp.ser[5]) p.sp.ser[36]<-step(sp.ser[3]-sp.ser[6]) p.sp.ser[45]<-step(sp.ser[4]-sp.ser[5]) p.sp.ser[46]<-step(sp.ser[4]-sp.ser[6]) p.sp.ser[56]<-step(sp.ser[5]-sp.ser[6]) p.lr.pos.ser[12]<-step(lr.pos.ser[1]-lr.pos.ser[2]) p.lr.pos.ser[13]<-step(lr.pos.ser[1]-lr.pos.ser[3]) p.lr.pos.ser[14]<-step(lr.pos.ser[1]-lr.pos.ser[4]) p.lr.pos.ser[15]<-step(lr.pos.ser[1]-lr.pos.ser[5]) p.lr.pos.ser[16]<-step(lr.pos.ser[1]-lr.pos.ser[6]) p.lr.pos.ser[23]<-step(lr.pos.ser[2]-lr.pos.ser[3]) p.lr.pos.ser[24]<-step(lr.pos.ser[2]-lr.pos.ser[4]) p.lr.pos.ser[25]<-step(lr.pos.ser[2]-lr.pos.ser[5]) p.lr.pos.ser[26]<-step(lr.pos.ser[2]-lr.pos.ser[6]) p.lr.pos.ser[34]<-step(lr.pos.ser[3]-lr.pos.ser[4]) p.lr.pos.ser[35]<-step(lr.pos.ser[3]-lr.pos.ser[5]) p.lr.pos.ser[36]<-step(lr.pos.ser[3]-lr.pos.ser[6]) p.lr.pos.ser[45]<-step(lr.pos.ser[4]-lr.pos.ser[5]) p.lr.pos.ser[46]<-step(lr.pos.ser[4]-lr.pos.ser[6]) p.lr.pos.ser[56]<-step(lr.pos.ser[5]-lr.pos.ser[6]) p.lr.neg.ser[12]<-step(lr.neg.ser[1]-lr.neg.ser[2]) p.lr.neg.ser[13]<-step(lr.neg.ser[1]-lr.neg.ser[3]) p.lr.neg.ser[14]<-step(lr.neg.ser[1]-lr.neg.ser[4]) p.lr.neg.ser[15]<-step(lr.neg.ser[1]-lr.neg.ser[5]) p.lr.neg.ser[16]<-step(lr.neg.ser[1]-lr.neg.ser[6]) p.lr.neg.ser[23]<-step(lr.neg.ser[2]-lr.neg.ser[3]) p.lr.neg.ser[24]<-step(lr.neg.ser[2]-lr.neg.ser[4]) p.lr.neg.ser[25]<-step(lr.neg.ser[2]-lr.neg.ser[5]) p.lr.neg.ser[26]<-step(lr.neg.ser[2]-lr.neg.ser[6]) p.lr.neg.ser[34]<-step(lr.neg.ser[3]-lr.neg.ser[4]) p.lr.neg.ser[35]<-step(lr.neg.ser[3]-lr.neg.ser[5]) p.lr.neg.ser[36]<-step(lr.neg.ser[3]-lr.neg.ser[6]) p.lr.neg.ser[45]<-step(lr.neg.ser[4]-lr.neg.ser[5]) p.lr.neg.ser[46]<-step(lr.neg.ser[4]-lr.neg.ser[6]) p.lr.neg.ser[56]<-step(lr.neg.ser[5]-lr.neg.ser[6]) p.se.par[12]<-step(se.par[1]-se.par[2]) p.se.par[13]<-step(se.par[1]-se.par[3]) p.se.par[14]<-step(se.par[1]-se.par[4]) p.se.par[15]<-step(se.par[1]-se.par[5]) p.se.par[16]<-step(se.par[1]-se.par[6]) p.se.par[23]<-step(se.par[2]-se.par[3]) p.se.par[24]<-step(se.par[2]-se.par[4]) p.se.par[25]<-step(se.par[2]-se.par[5]) p.se.par[26]<-step(se.par[2]-se.par[6]) p.se.par[34]<-step(se.par[3]-se.par[4]) p.se.par[35]<-step(se.par[3]-se.par[5]) p.se.par[36]<-step(se.par[3]-se.par[6]) p.se.par[45]<-step(se.par[4]-se.par[5]) p.se.par[46]<-step(se.par[4]-se.par[6]) p.se.par[56]<-step(se.par[5]-se.par[6]) p.sp.par[12]<-step(sp.par[1]-sp.par[2]) p.sp.par[13]<-step(sp.par[1]-sp.par[3]) p.sp.par[14]<-step(sp.par[1]-sp.par[4]) p.sp.par[15]<-step(sp.par[1]-sp.par[5]) p.sp.par[16]<-step(sp.par[1]-sp.par[6]) p.sp.par[23]<-step(sp.par[2]-sp.par[3]) p.sp.par[24]<-step(sp.par[2]-sp.par[4]) p.sp.par[25]<-step(sp.par[2]-sp.par[5]) p.sp.par[26]<-step(sp.par[2]-sp.par[6]) p.sp.par[34]<-step(sp.par[3]-sp.par[4]) p.sp.par[35]<-step(sp.par[3]-sp.par[5]) p.sp.par[36]<-step(sp.par[3]-sp.par[6]) p.sp.par[45]<-step(sp.par[4]-sp.par[5]) p.sp.par[46]<-step(sp.par[4]-sp.par[6]) p.sp.par[56]<-step(sp.par[5]-sp.par[6]) p.lr.pos.par[12]<-step(lr.pos.par[1]-lr.pos.par[2]) p.lr.pos.par[13]<-step(lr.pos.par[1]-lr.pos.par[3]) p.lr.pos.par[14]<-step(lr.pos.par[1]-lr.pos.par[4]) p.lr.pos.par[15]<-step(lr.pos.par[1]-lr.pos.par[5]) p.lr.pos.par[16]<-step(lr.pos.par[1]-lr.pos.par[6]) p.lr.pos.par[23]<-step(lr.pos.par[2]-lr.pos.par[3]) p.lr.pos.par[24]<-step(lr.pos.par[2]-lr.pos.par[4]) p.lr.pos.par[25]<-step(lr.pos.par[2]-lr.pos.par[5]) p.lr.pos.par[26]<-step(lr.pos.par[2]-lr.pos.par[6]) p.lr.pos.par[34]<-step(lr.pos.par[3]-lr.pos.par[4]) p.lr.pos.par[35]<-step(lr.pos.par[3]-lr.pos.par[5]) p.lr.pos.par[36]<-step(lr.pos.par[3]-lr.pos.par[6]) p.lr.pos.par[45]<-step(lr.pos.par[4]-lr.pos.par[5]) p.lr.pos.par[46]<-step(lr.pos.par[4]-lr.pos.par[6]) p.lr.pos.par[56]<-step(lr.pos.par[5]-lr.pos.par[6]) p.lr.neg.par[12]<-step(lr.neg.par[1]-lr.neg.par[2]) p.lr.neg.par[13]<-step(lr.neg.par[1]-lr.neg.par[3]) p.lr.neg.par[14]<-step(lr.neg.par[1]-lr.neg.par[4]) p.lr.neg.par[15]<-step(lr.neg.par[1]-lr.neg.par[5]) p.lr.neg.par[16]<-step(lr.neg.par[1]-lr.neg.par[6]) p.lr.neg.par[23]<-step(lr.neg.par[2]-lr.neg.par[3]) p.lr.neg.par[24]<-step(lr.neg.par[2]-lr.neg.par[4]) p.lr.neg.par[25]<-step(lr.neg.par[2]-lr.neg.par[5]) p.lr.neg.par[26]<-step(lr.neg.par[2]-lr.neg.par[6]) p.lr.neg.par[34]<-step(lr.neg.par[3]-lr.neg.par[4]) p.lr.neg.par[35]<-step(lr.neg.par[3]-lr.neg.par[5]) p.lr.neg.par[36]<-step(lr.neg.par[3]-lr.neg.par[6]) p.lr.neg.par[45]<-step(lr.neg.par[4]-lr.neg.par[5]) p.lr.neg.par[46]<-step(lr.neg.par[4]-lr.neg.par[6]) p.lr.neg.par[56]<-step(lr.neg.par[5]-lr.neg.par[6]) } # data list(K=4, n=c(703,440,138,171), y=structure(.Data=c(0,0,0,0,0,0,0,0,11,18,6,16,1,4,3,644,1,0,0,4,0,0,0,0,8,7,0,8,5,15,2,390,0,0,0,0,0,0,0,0,0,0,0,0,7,1,3,127,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,170),.Dim=c(4,2,2,2,2))) # one initial value for each popul, in addition to the se/sp's list(pi=c(0.1, 0.1, 0.1,0.1), se=c(0.7, 0.7, 0.7,0.7), sp=c(0.9, 0.9, 0.9,0.9))