Blockers: random effects meta-analysis of clinical trials

Carlin (1992) considers a Bayesian approach to meta-analysis, and includes the following examples of 22 trials of beta-blockers to prevent mortality after myocardial infarction.


[blockers1]

In a random effects meta-analysis we assume the true effect (on a log-odds scale) δi in a trial i is drawn from some population distribution.Let rCi denote number of events in the control group in trial i, and rTi denote events under active treatment in trial i. Our model is:
   
   rCi ~ Binomial(pCi, nCi)
   
   rTi ~ Binomial(pTi, nTi)
   
   logit(pCi) = μi
   
   
logit(pTi) = μi + δi
   
   
δi ~ Normal(d, τ)

``Noninformative'' priors are given for the μi's. τ and d. The graph for this model is shown in below. We want to make inferences about the population effect d, and the predictive distribution for the effect δnew in a new trial. Empirical Bayes methods estimate d and τ by maximum likelihood and use these estimates to form the predictive distribution p(δnew | dhat, τhat ). Full Bayes allows for the uncertainty concerning d and τ.

Graphical model for blocker example:

BUGS language for blocker example:
model
{
for( i in 1 : Num ) {
rc[i] ~ dbin(pc[i], nc[i])
rt[i] ~ dbin(pt[i], nt[i])
logit(pc[i]) <- mu[i]
logit(pt[i]) <- mu[i] + delta[i]
mu[i] ~ dnorm(0.0,1.0E-5)
delta[i] ~ dnorm(d, tau)
}
d ~ dnorm(0.0,1.0E-6)
tau ~ dgamma(0.001,0.001)
delta.new ~ dnorm(d, tau)
sigma <- 1 / sqrt(tau)
}
Data
list(rt = c(3, 7, 5, 102, 28, 4, 98, 60, 25, 138, 64, 45, 9, 57, 25, 33, 28, 8, 6, 32, 27, 22 ),
      nt = c(38, 114, 69, 1533, 355, 59, 945, 632, 278,1916, 873, 263, 291, 858, 154, 207, 251, 151, 174, 209, 391, 680),
      rc = c(3, 14, 11, 127, 27, 6, 152, 48, 37, 188, 52, 47, 16, 45, 31, 38, 12, 6, 3, 40, 43, 39),
      nc = c(39, 116, 93, 1520, 365, 52, 939, 471, 282, 1921, 583, 266, 293, 883, 147, 213, 122, 154, 134, 218, 364, 674),
      Num = 22)
Inits for chain 1
list(d = 0, delta.new = 0, tau=1, mu = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
      delta = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
   
Inits for chain 2
list(d = 2, delta.new = 2, tau=0.1, mu = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
      delta = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2))
Results
[blockers3]Our estimates are lower and with tighter precision - in fact similar to the values obtained by Carlin for the empirical Bayes estimator. The discrepancy appears to be due to Carlin's use of a uniform prior for σ2 in his analysis, which will lead to increased posterior mean and standard deviation for d, as compared to our (approximate) use of p(σ2)  ~ 1 / σ2 (see his Figure 1).

In some circumstances it might be reasonable to assume that the population distribution has heavier tails, for example a t distribution with low degrees of freedom. This is easily accomplished in BUGS by using the dt distribution function instead of dnorm for δ and δnew.