Appendix A

 

BUGS models for Bayesian analyses implemented in MetaAnalyst

 

This appendix lists the model files generated by Meta-Analyst and passed to BUGS for Bayesian analyses. After any (Bayesian) analysis, you can elect to view these yourself by navigating to the “.brugs_tmp” subdirectory in the Meta-Analyst folder and opening the “model.txt” file.

 

 

Appendix A Contents

 

 

Appendix A......................................................................................................................... 1

Appendix A Contents..................................................................................................... 1

Binary, two group, odds ratio, no control rate, no covariates..................................... 2

Binary, two group, risk ratio, no control rate, no covariates....................................... 3

Binary, two group, no control rate, one covariate....................................................... 4

Binary, two group, linear control rate, no covariates................................................... 5

Binary, two group, linear control rate, one covariate.................................................. 6

Binary, two group, quadratic control rate, no covariates............................................ 7

Binary, two group, quadratic control rate, one covariate............................................ 8

Binary, one group........................................................................................................ 9

Continuous, two group, no control rate, no covariates.............................................. 10

Continuous, two group, no control rate, one covariate............................................. 11

Continuous, two group, linear control rate, no covariates......................................... 12

Continuous, two group, linear control rate, one covariate......................................... 13

Continuous, one group.............................................................................................. 14

Diagnostic.................................................................................................................. 15

References..................................................................................................................... 16


 

Binary, two group, odds ratio, no control rate, no covariates

 

model {

            for (i in 1:N) {

                        rc[i] ~ dbin(pc[i],nc[i])

                        rt[i] ~ dbin(pt[i],nt[i])

                        logit(pc[i]) <- mu[i]

                        logit(pt[i]) <- mu[i] + d[i]

 

                        d[i] ~ dnorm(delta,invtau2)

                        mu[i] ~ dnorm(mu.bar, invtauc2)

 

                        d.exp[i] <- exp(d[i])

            }

 

            delta ~ dnorm(0.0, precnorm)

            delta.exp <- exp(delta)           

           

           

           

           

            mu.bar ~ dnorm(0.0, precnorm)

            invtau2 ~ dgamma(gamma.a, gamma.b)

            invtauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tau2 <- 1/invtau2        

            tauc2 <- 1/invtauc2    

            cr.bar <- exp(mu.bar) / (exp(mu.bar) + 1)

           

 

}

 


Binary, two group, risk ratio, no control rate, no covariates

 

model {

            for (i in 1:N) {

                        rc[i] ~ dbin(pc[i],nc[i])

                        rt[i] ~ dbin(pt[i],nt[i])

                        logit(pc[i]) <- mu[i]

                        log(pt[i]) <- mu[i] - log(1 + exp(mu[i])) + d[i]

 

                        d[i] ~ dnorm(delta,invtau2)

                        mu[i] ~ dnorm(mu.bar, invtauc2)

 

                        d.exp[i] <- exp(d[i])

            }

 

            delta ~ dnorm(0.0, precnorm)

            delta.exp <- exp(delta)           

           

           

           

           

            mu.bar ~ dnorm(0.0, precnorm)

            invtau2 ~ dgamma(gamma.a, gamma.b)

            invtauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tau2 <- 1/invtau2        

            tauc2 <- 1/invtauc2    

            cr.bar <- exp(mu.bar)

           

 

}

 

Here on we show only the odds ratio model files (the risk ratio models are analogous).
Binary, two group, no control rate, one covariate

 

model {

            for (i in 1:N) {

                        rc[i] ~ dbin(pc[i],nc[i])

                        rt[i] ~ dbin(pt[i],nt[i])

                        logit(pc[i]) <- mu[i]

                        logit(pt[i]) <- mu[i] + d[i]

 

                        d.star[i] <- delta  + cov0 * (x0[i] - mean(x0[]))

                        d[i] ~ dnorm(d.star[i],invtau2)

                        mu[i] ~ dnorm(mu.bar, invtauc2)

 

                        d.exp[i] <- exp(d[i])

            }

 

            delta ~ dnorm(0.0, precnorm)

            delta.exp <- exp(delta)           

           

           

           

           

            mu.bar ~ dnorm(0.0, precnorm)

            invtau2 ~ dgamma(gamma.a, gamma.b)

            invtauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tau2 <- 1/invtau2        

            tauc2 <- 1/invtauc2    

            cr.bar <- exp(mu.bar) / (exp(mu.bar) + 1)

           

            cov0 ~ dnorm(0.0, precnorm)

}


Binary, two group, linear control rate, no covariates

 

model {

            for (i in 1:N) {

                        rc[i] ~ dbin(pc[i],nc[i])

                        rt[i] ~ dbin(pt[i],nt[i])

                        logit(pc[i]) <- mu[i]

                        logit(pt[i]) <- mu[i] + d[i]

 

                        d.star[i] <- delta + beta*(mu[i] - mu.bar)

                        d[i] ~ dnorm(d.star[i],invtau2)

                        mu[i] ~ dnorm(mu.bar, invtauc2)

 

                        d.exp[i] <- exp(d[i])

            }

 

            delta ~ dnorm(0.0, precnorm)

            delta.exp <- exp(delta)           

           

            beta ~ dnorm(0.0, precnorm)

           

           

            mu.bar ~ dnorm(0.0, precnorm)

            invtau2 ~ dgamma(gamma.a, gamma.b)

            invtauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tau2 <- 1/invtau2        

            tauc2 <- 1/invtauc2    

            cr.bar <- exp(mu.bar) / (exp(mu.bar) + 1)

           

 

}

 


Binary, two group, linear control rate, one covariate

 

model {

            for (i in 1:N) {

                        rc[i] ~ dbin(pc[i],nc[i])

                        rt[i] ~ dbin(pt[i],nt[i])

                        logit(pc[i]) <- mu[i]

                        logit(pt[i]) <- mu[i] + d[i]

 

                        d.star[i] <- delta + beta*(mu[i] - mu.bar) + cov0 * (x0[i] - mean(x0[]))

                        d[i] ~ dnorm(d.star[i],invtau2)

                        mu[i] ~ dnorm(mu.bar, invtauc2)

 

                        d.exp[i] <- exp(d[i])

            }

 

            delta ~ dnorm(0.0, precnorm)

            delta.exp <- exp(delta)           

           

            beta ~ dnorm(0.0, precnorm)

           

           

            mu.bar ~ dnorm(0.0, precnorm)

            invtau2 ~ dgamma(gamma.a, gamma.b)

            invtauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tau2 <- 1/invtau2        

            tauc2 <- 1/invtauc2    

            cr.bar <- exp(mu.bar) / (exp(mu.bar) + 1)

           

            cov0 ~ dnorm(0.0, precnorm)

}

 

 

 

 


Binary, two group, quadratic control rate, no covariates

 

model {

            for (i in 1:N) {

                        rc[i] ~ dbin(pc[i],nc[i])

                        rt[i] ~ dbin(pt[i],nt[i])

                        logit(pc[i]) <- mu[i]

                        logit(pt[i]) <- mu[i] + d[i]

 

                        d.star[i] <- delta + beta*(mu[i] - mu.bar) + beta1*((mu[i] - mu.bar) * (mu[i] - mu.bar))

                        d[i] ~ dnorm(d.star[i],invtau2)

                        mu[i] ~ dnorm(mu.bar, invtauc2)

 

                        d.exp[i] <- exp(d[i])

            }

 

            delta ~ dnorm(0.0, precnorm)

            delta.exp <- exp(delta)           

           

            beta ~ dnorm(0.0, precnorm)

            beta1 ~ dnorm(0.0, precnorm)

           

            mu.bar ~ dnorm(0.0, precnorm)

            invtau2 ~ dgamma(gamma.a, gamma.b)

            invtauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tau2 <- 1/invtau2        

            tauc2 <- 1/invtauc2    

            cr.bar <- exp(mu.bar) / (exp(mu.bar) + 1)

           

 

}
Binary, two group, quadratic control rate, one covariate

 

model {

            for (i in 1:N) {

                        rc[i] ~ dbin(pc[i],nc[i])

                        rt[i] ~ dbin(pt[i],nt[i])

                        logit(pc[i]) <- mu[i]

                        logit(pt[i]) <- mu[i] + d[i]

 

                        d.star[i] <- delta + beta*(mu[i] - mu.bar) + beta1*((mu[i] - mu.bar) * (mu[i] - mu.bar))  + cov0 * (x0[i] - mean(x0[]))

                        d[i] ~ dnorm(d.star[i],invtau2)

                        mu[i] ~ dnorm(mu.bar, invtauc2)

 

                        d.exp[i] <- exp(d[i])

            }

 

            delta ~ dnorm(0.0, precnorm)

            delta.exp <- exp(delta)           

           

            beta ~ dnorm(0.0, precnorm)

            beta1 ~ dnorm(0.0, precnorm)

           

            mu.bar ~ dnorm(0.0, precnorm)

            invtau2 ~ dgamma(gamma.a, gamma.b)

            invtauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tau2 <- 1/invtau2        

            tauc2 <- 1/invtauc2    

            cr.bar <- exp(mu.bar) / (exp(mu.bar) + 1)

           

            cov0 ~ dnorm(0.0, precnorm)

}

 

 


Binary, one group

 

model{

            for (i in 1:N) {

                        r[i] ~ dbin(p[i],n[i])

                        logit(p[i]) <- mu[i]

                       

                        mu[i] ~ dnorm(mu.bar, invtau2)

                       

            }

 

            mu.bar ~ dnorm(0.0, precnorm)

            invtau2 ~ dgamma(gamma.a, gamma.b)

            tau2 <- 1/invtau2        

            psum <- exp(mu.bar) / (exp(mu.bar) + 1)

           

 

}


Continuous, two group, no control rate, no covariates

 

model {

            for( i in 1 : N ) {

                        # N is number of studies

                        # the precisions for the mean responses

                        # which are stochastic nodes!

           

                        prec.t[i] <- 1/((sd.t[i]*sd.t[i])/n.t[i])               

                        prec.c[i] <- 1/((sd.c[i]*sd.c[i])/n.c[i])

                       

                        y.t[i] ~dnorm(theta.t[i], prec.t[i])

                        y.c[i] ~dnorm(theta.c[i], prec.c[i])

                                                                       

                        theta.t[i] <- delta.star[i] + theta.c[i]

                        theta.c[i] ~ dnorm(muc,  inv.tauc2)                                                                                                                                                   

                                                           

                        delta.star[i] ~ dnorm(delta, inv.tau2 )

                                               

                        mu[i] <- delta             

            }

            muc ~ dnorm(0.0,precnorm)

                                   

            delta ~ dnorm(0.0,precnorm)

           

           

            inv.tau2 ~ dgamma(gamma.a,gamma.b)

            tau2 <- 1/inv.tau2

            tau <- sqrt(tau2)                                 

 

            inv.tauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tauc2 <- 1/inv.tauc2

            tauc <- sqrt(tauc2)                              

 

           

 

}


Continuous, two group, no control rate, one covariate

 

model {

            for( i in 1 : N ) {

                        # N is number of studies

                        # the precisions for the mean responses

                        # which are stochastic nodes!

           

                        prec.t[i] <- 1/((sd.t[i]*sd.t[i])/n.t[i])               

                        prec.c[i] <- 1/((sd.c[i]*sd.c[i])/n.c[i])

                       

                        y.t[i] ~dnorm(theta.t[i], prec.t[i])

                        y.c[i] ~dnorm(theta.c[i], prec.c[i])

                                                                       

                        theta.t[i] <- delta.star[i] + theta.c[i]

                        theta.c[i] ~ dnorm(muc,  inv.tauc2)                                                                                                                                                   

                                                           

                        delta.star[i] ~ dnorm(mu[i], inv.tau2 )

                                               

                        mu[i] <- delta + cov0 * (x0[i] - mean(x0[]))              

            }

            muc ~ dnorm(0.0,precnorm)

                                   

            delta ~ dnorm(0.0,precnorm)

           

           

            inv.tau2 ~ dgamma(gamma.a,gamma.b)

            tau2 <- 1/inv.tau2

            tau <- sqrt(tau2)                                 

 

            inv.tauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tauc2 <- 1/inv.tauc2

            tauc <- sqrt(tauc2)                              

 

           

            cov0 ~ dnorm(0.0, precnorm)

}


Continuous, two group, linear control rate, no covariates

 

 

model {

            for( i in 1 : N ) {

                        # N is number of studies

                        # the precisions for the mean responses

                        # which are stochastic nodes!

           

                        prec.t[i] <- 1/((sd.t[i]*sd.t[i])/n.t[i])               

                        prec.c[i] <- 1/((sd.c[i]*sd.c[i])/n.c[i])

                       

                        y.t[i] ~dnorm(theta.t[i], prec.t[i])

                        y.c[i] ~dnorm(theta.c[i], prec.c[i])

                                                                       

                        theta.t[i] <- delta.star[i] + theta.c[i]

                        theta.c[i] ~ dnorm(muc,  inv.tauc2)                                                                                                                                                   

                                                           

                        delta.star[i] ~ dnorm(mu[i], inv.tau2 )

                                               

                        mu[i] <- delta + beta0 *(theta.c[i] - muc)                  

            }

            muc ~ dnorm(0.0,precnorm)

                                   

            delta ~ dnorm(0.0,precnorm)

            beta0 ~ dnorm(0.0,precnorm)

           

            inv.tau2 ~ dgamma(gamma.a,gamma.b)

            tau2 <- 1/inv.tau2

            tau <- sqrt(tau2)                                 

 

            inv.tauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tauc2 <- 1/inv.tauc2

            tauc <- sqrt(tauc2)                              

 

           

 

}


Continuous, two group, linear control rate, one covariate

 

model {

            for( i in 1 : N ) {

                        # N is number of studies

                        # the precisions for the mean responses

                        # which are stochastic nodes!

           

                        prec.t[i] <- 1/((sd.t[i]*sd.t[i])/n.t[i])               

                        prec.c[i] <- 1/((sd.c[i]*sd.c[i])/n.c[i])

                       

                        y.t[i] ~dnorm(theta.t[i], prec.t[i])

                        y.c[i] ~dnorm(theta.c[i], prec.c[i])

                                                                       

                        theta.t[i] <- delta.star[i] + theta.c[i]

                        theta.c[i] ~ dnorm(muc,  inv.tauc2)                                                                                                                                                   

                                                           

                        delta.star[i] ~ dnorm(mu[i], inv.tau2 )

                                               

                        mu[i] <- delta + beta0 *(theta.c[i] - muc) + cov0 * (x0[i] - mean(x0[]))                    

            }

            muc ~ dnorm(0.0,precnorm)

                                   

            delta ~ dnorm(0.0,precnorm)

            beta0 ~ dnorm(0.0,precnorm)

           

            inv.tau2 ~ dgamma(gamma.a,gamma.b)

            tau2 <- 1/inv.tau2

            tau <- sqrt(tau2)                                 

 

            inv.tauc2 ~ dgamma(gamma.c.a, gamma.c.b)

            tauc2 <- 1/inv.tauc2

            tauc <- sqrt(tauc2)                              

 

           

            cov0 ~ dnorm(0.0, precnorm)

}


Continuous, one group

 

model {

            for( i in 1 : N ) { # N is number of studies

                        # the precisions for the mean responses

                        # which are stochastic nodes!

                        y.t[i] ~ dnorm(theta[i], prec.y[i])

                        prec.y[i] <- 1/var.y[i]

                        var.y[i] <-  (sd.t[i]*sd.t[i])/n.t[i]

                       

                        theta[i] ~ dnorm(mu[i], inv.tau2)

                        mu[i] <- Ysum

                       

            }

            Ysum ~ dnorm(0.0, precnorm)

            inv.tau2 ~ dgamma(gamma.a, gamma.b)

            tau2 <- 1/inv.tau2

            tau <- sqrt(tau2)                     

           

 

 

}


Diagnostic

 

For diagnostic data, we actually fit the binary models fitted to the various outcomes (e.g., specificity). The following metrics use the binary one group model file: Sensitivity, specificity, positive/negative predictive value, accuracy. Meanwhile, diagnostic odds ratio and likelihood ratio (positive and negative) use binary two group (the former uses the odds ratio metric; the latter, the risk ratio).

 


References