R2WinBUGS: Linear hierarchical model

 

Revisiting Example 5.6 (pages 169-60) on simple linear hierarchical regression on time

 

Souza (1997) entertain several hierarchical and dynamic models to describe the nutritional pattern of pregnant women. 

She entertains the following linear hierarchical model

 

yij  ~  N(αi+βixij,1/τ2)

αi  ~  N(αc,1/τα)

βi   ~  N(βc,1/τβ)

αc   ~  N(0,1000)

βc   ~  N(0,1000)

τα  ~  G(0.001,0.001)

τβ  ~  G(0.001,0.001)

τ2 ~  G(0.001,0.001)

 

for i = 1,...,I=68, j=1,...,ni and n = n1 +...+ nI = 427.

 

WINBUGS CODE FOR THE LINEAR HIERARCHICAL MODEL

 

# This model is stored in file “hierarchicalmodel.bug

model{

  for (i in 1:I){

    for (j in 1:J){

      mu[i,j] <- alpha[i]+beta[i]*x[i,j]

      y[i,j] ~  dnorm(mu[i,j],tau2)

    }

  }

  for (i in 1:I){

    alpha[i] ~ dnorm(alphac,taua)

    beta[i]  ~ dnorm(betac,taub)

  }

  alphac ~ dnorm(0.0,0.001)

  betac  ~ dnorm(0.0,0.001)

  taua   ~ dgamma(0.001,0.001)

  taub   ~ dgamma(0.001,0.001)

  tau2   ~ dgamma(0.001,0.001)

}

 

Evoking WinBUGS from R

 

y<-matrix(c(3.3,  6.1,  8.5,  7.9, 11.8, 14.8,  NA,

            2.0,  4.3,  8.0, 11.0, 12.2, 15.6,  NA,

            4.5,  6.8,  8.1, 13.5, 15.0,  NA,   NA,

            5.5,  5.5,  8.0, 13.2, 13.9, 15.1,  NA,

            2.0,  9.5, 12.2, 18.2, 19.3, 22.0,  NA,

            1.8,  2.0,  4.5,  7.1,  9.5, 12.6, 13.5,

            0.2,  1.4,  3.6,  5.8,  8.3,  9.0,  NA,

            3.8,  3.4,  5.4,  8.8, 10.4, 12.3, 15.3,

            1.9,  5.9,  6.0, 10.6, 14.0, 21.1,  NA,

            0.0,  1.3,  3.0,  6.4,  8.3, 10.8, 11.2,

            1.6,  1.9,  3.4,  7.5,  8.6, 10.0, 11.3,

            1.2,  3.0,  4.0,  8.0,  9.0, 12.0, 14.5,

            5.4,  6.3, 10.8, 11.2, 13.3, 15.0,  NA,

            9.5, 10.3, 14.1, 15.4, 17.3, 17.6,  NA,

           -1.7,  1.7,  5.4,  7.2,  8.9,  NA,   NA,

            2.0,  2.4,  4.0,  4.8,  9.8, 12.1,  NA,

           -2.8, -2.0,  1.5,  4.2,  5.7,  6.7,  NA,

           -3.0, -0.5,  1.7,  6.0,  8.5, 11.0, 11.0,

            0.9,  1.2,  2.3,  5.0,  8.0,  9.3, 10.9,

            2.0,  3.2,  4.4,  6.5,  7.5, 11.5, 14.6,

            3.6,  5.8,  7.3,  9.0, 12.5, 13.4,  NA,

            1.1,  1.1,  6.7,  9.6, 13.1, 17.9, 18.2,

            9.0, 11.3, 12.9, 16.2, 17.5, 19.0, 21.3,

            0.6,  0.8,  3.0,  3.5,  4.5,  6.5,  8.0,

            3.2,  5.6,  8.1, 11.5, 14.4, 17.0, 20.0,

            3.0,  3.1,  3.5,  6.0,  7.2, 10.0, 16.5,

           -0.2, -0.6,  0.0,  2.0,  8.7, 11.0, 13.5,

            0.5, -1.2,  1.6,  3.2,  3.8,  6.0,  8.4,

            0.9,  3.5,  7.2,  9.5, 11.6, 14.4,  NA,

            3.2,  4.0,  5.5,  8.0,  9.8, 10.7, 14.5,

            1.6,  4.0,  6.5,  7.7, 10.5, 12.0,  NA,

            5.2,  7.0,  9.7, 13.8, 15.4,  NA,   NA,

            2.8,  6.6, 11.0, 11.5, 18.0, 20.5, 26.3,

            3.7,  3.9,  6.8, 12.3, 15.0,  NA,   NA,

           -2.6, -3.5, -1.5,  1.2,  4.0,  6.0,  NA,

            7.0,  8.1, 10.5, 14.5, 17.4,  NA,   NA,

           -1.5,  0.3,  4.0,  8.4, 10.3, 14.5,  NA,

           -0.2,  0.0,  4.2,  5.8,  7.5,  9.2,  NA,

            2.8,  2.5,  5.2,  8.5, 10.5, 13.2,  NA,

           -1.4, -0.2,  0.5,  2.5,  4.5,  6.7, 11.0,

            1.0,  1.0,  0.0,  4.9,  9.2, 11.5,  NA,

            0.7,  0.1,  4.5,  5.7,  8.0, 12.5,  NA,

            4.0,  3.9,  6.0,  8.7, 10.0, 13.0,  NA,

            4.0,  4.5,  6.8, 12.0, 14.0, 15.9,  NA,

            2.5,  5.4, 10.3, 13.2, 17.4, 19.2, 24.0,

            1.7,  2.0,  1.5,  3.0,  4.7,  6.0, 11.4,

            1.6,  2.0,  4.0,  6.5,  6.5,  8.5,  9.5,

            0.3,  6.0, 10.0, 13.0, 18.7, 20.9,  NA,

            1.9, -0.5,  1.5,  3.8,  3.8,  7.5,  NA,

            3.5,  2.5,  3.5,  5.0,  8.1, 12.0, 15.0,

            4.6,  5.1,  6.4,  9.5, 10.6, 14.5,  NA,

           -4.6, -4.7, -0.9,  3.7,  3.0, 10.0, 10.5,

            2.0,  2.2,  3.7,  6.5,  9.0,  8.5,  NA,

           -1.5, -1.4, -1.5,  2.8,  5.7,  6.2,  NA,

            0.2,  1.2,  3.0,  4.5,  7.0,  5.7,  NA,

           -1.0, -0.7,  0.0,  4.0,  7.5,  8.0, 10.5,

            2.0,  5.4, 11.5, 14.2, 20.5,   NA,  NA,

            3.0,  3.8,  6.5,  8.8, 11.0,   NA,  NA,

            7.0, 10.4, 13.0, 15.0, 16.0, 18.0,  NA,

            3.1,  4.5,  7.5,  8.2,  9.5, 11.7,  NA,

           -1.0,  0.6,  2.8,  5.5,  7.9,  9.2,  NA,

           -2.0, -0.7,  2.4,  5.7,  9.8, 11.1, 11.5,

            0.5,  0.5, -2.9, -1.0,  1.5,  3.4,  4.8,

            3.5,  6.9,  9.0, 16.0, 15.7,   NA,  NA,

            0.3,  1.7,  3.4,  3.1,  4.3,  3.4,  NA,

           -5.5, -5.0, -4.8, -1.0,  2.5,  5.0, 14.5,

           -3.0,  2.0,  2.5,  8.0,  9.8, 12.2,  NA,

           -2.6, -3.2, -2.0,  1.0,  3.0,  4.4,  NA),7,68)

 

x<-matrix(c(

        8.571, 13.000, 17.571, 20.857, 24.571, 35.429, 40.143,

       14.429, 18.714, 23.000, 27.000, 31.000, 37.429, 37.857,

       13.429, 18.857, 23.143, 34.143, 37.000, 38.000, 39.286,

       12.571, 17.000, 21.429, 32.429, 34.286, 38.571, 40.571,

       13.714, 23.571, 27.714, 32.429, 35.286, 39.571, 41.857,

       11.286, 14.857, 21.286, 25.000, 30.000, 34.429, 39.000,

       13.143, 17.143, 23.000, 28.000, 31.429, 36.000, 38.000,

       10.429, 14.429, 17.857, 21.857, 25.714, 30.429, 36.000,

        8.857, 14.429, 17.714, 23.429, 28.000, 37.714, 38.429,

       12.000, 15.000, 19.857, 24.286, 26.714, 31.000, 37.286,

       11.429, 15.143, 19.429, 23.571, 27.857, 32.143, 34.571,

        9.143, 14.857, 19.143, 26.000, 28.571, 34.000, 39.000,

       10.143, 15.571, 26.286, 29.286, 33.286, 37.286, 37.571,

        9.143, 15.000, 21.000, 23.857, 28.000, 31.000, 35.857,

       12.000, 22.429, 26.429, 32.286, 35.571, 38.000, 41.429,

        6.857, 11.000, 15.571, 19.857, 24.000, 28.714, 36.000,

       11.429, 15.857, 20.857, 25.857, 30.429, 34.571, 39.286,

        8.571, 14.143, 18.571, 23.286, 29.143, 33.286, 37.286,

       11.857, 16.857, 20.714, 24.857, 28.857, 33.286, 37.000,

       13.143, 17.429, 21.857, 26.286, 30.286, 35.429, 39.143,

       14.000, 18.286, 22.857, 27.000, 31.286, 36.714, 41.200,

       13.286, 17.143, 21.571, 26.143, 30.429, 35.714, 39.857,

       11.857, 16.000, 23.000, 27.000, 29.000, 33.000, 40.000,

       13.429, 18.571, 22.286, 26.143, 33.286, 35.143, 39.714,

       15.143, 20.143, 25.286, 29.429, 33.857, 37.286, 39.286,

        8.571, 13.286, 16.429, 20.286, 24.286, 29.286, 42.429,

        9.571, 14.000, 18.429, 22.429, 34.571, 37.000, 39.000,

       11.571, 16.857, 20.143, 24.143, 28.857, 33.714, 38.000,

       14.714, 19.000, 23.286, 29.000, 33.286, 39.286, 39.571,

       14.714, 19.000, 23.714, 28.571, 31.143, 35.143, 37.571,

       10.143, 17.286, 20.000, 24.500, 30.714, 35.000, 39.857,

       11.857, 19.714, 23.714, 28.000, 33.000, 35.000, 40.286,

       10.857, 15.286, 21.857, 24.857, 31.143, 34.000, 40.000,

       11.429, 15.429, 20.429, 31.000, 36.429, 38.000, 40.000,

       11.429, 16.000, 19.286, 24.857, 29.429, 34.000, 40.571,

       14.857, 19.571, 24.286, 31.571, 42.143, 43.000, 44.000,

       14.429, 20.286, 25.000, 30.143, 33.143, 37.286, 40.000,

        8.000, 15.000, 22.714, 24.571, 30.429, 34.857, 39.000,

       13.000, 17.286, 21.857, 25.571, 32.571, 35.714, 39.000,

        8.429, 13.429, 17.286, 23.429, 27.429, 31.429, 39.429,

        6.714, 12.571, 16.571, 21.286, 26.571, 34.571, 38.571,

       11.286, 16.143, 22.429, 27.286, 30.714, 37.571, 39.571,

       11.714, 15.857, 20.286, 25.143, 28.857, 37.714, 39.143,

        8.857, 11.571, 16.000, 23.857, 28.286, 35.714, 39.714,

       13.500, 19.857, 25.000, 29.143, 33.857, 36.143, 42.000,

        8.429, 11.571, 16.571, 20.857, 25.429, 29.714, 39.714,

        8.286, 13.143, 18.286, 22.571, 27.143, 31.571, 41.429,

       15.000, 20.714, 25.000, 29.143, 36.857, 41.000, 42.000,

        9.429, 15.857, 20.429, 25.286, 29.857, 35.714, 41.286,

        7.429, 11.429, 16.571, 20.471, 27.429, 35.857, 39.571,

       12.286, 16.857, 22.000, 27.571, 32.000, 37.286, 41.429,

       12.286, 16.571, 21.286, 25.571, 30.429, 34.571, 36.143,

       11.429, 17.571, 22.143, 27.143, 32.429, 37.143, 41.571,

       12.143, 16.429, 20.857, 25.143, 29.286, 33.429, 39.143, 

       14.714, 19.143, 23.571, 27.714, 32.143, 38.143, 40.714,

        8.143, 12.857, 16.286, 21.857, 25.143, 30.857, 40.714,

        8.286, 15.714, 26.286, 30.571, 37.714, 39.000, 40.143,

       13.571, 18.571, 23.143, 31.429, 34.429, 37.000, 39.143,

       14.857, 18.857, 23.571, 30.571, 32.286, 37.714, 38.286,

       12.857, 17.143, 21.857, 26.571, 31.000, 35.571, 38.714,

        6.857, 13.714, 19.714, 23.857, 30.000, 34.286, 41.286,

       10.143, 15.143, 19.429, 24.143, 29.571, 33.000, 39.143,

        8.571, 13.000, 18.143, 23.000, 28.143, 35.286, 40.857,

       12.286, 16.571, 21.571, 30.857, 33.429, 35.000, 37.714,

        7.000,  9.000, 13.857, 16.857, 25.857, 30.000, 37.000,

        8.857, 11.000, 15.857, 20.000, 26.857, 32.571, 41.286,

       10.000, 12.000, 14.714, 21.714, 26.571, 29.714, 40.714,

        9.429, 13.714, 17.714, 22.000, 26.286, 30.571, 36.714),7,68)

 

y     = t(y)

x     = t(x)

I     = 68

J     = 7

data  = list("x","y","I","J")

 

# First set of initial values (See caption of Figure 5.6, page 162)

alpha1  = rep(0.0,I)

beta1   = rep(0.0,I)

alphac1 = 0.0

betac1  = 0.0

taua1   = 1.0

taub1   = 1.0

tau21   = 1.0

 

# Second set of initial values (See caption of Figure 5.6, page 162)

alpha2  = rep(-4.0,I)

beta2   = rep(0.5,I)

alphac2 = -4.0

betac2  = 0.5

taua2   = 1.0

taub2   = 1.0

tau22   = 1.0

 

inits1 =  function(){

  list(alpha=alpha1,beta=beta1,alphac=alphac1,betac=betac1,taua=taua1,taub=taub1,tau2=tau21)

}

inits2 =  function(){

  list(alpha=alpha2,beta=beta2,alphac=alphac2,betac=betac2,taua=taua2,taub=taub2,tau2=tau22)

}

 

# Running WinBUGS

library(R2WinBUGS)

output1 = bugs(data,inits=inits1,model.file="hierarchicalmodel.bug",

     parameters=c("alphac","betac","taua","taub","tau2"),

     n.chains=2,n.iter=4000,n.burnin=0,n.thin=1,

     bugs.directory="c:/Program Files/WinBUGS14/",

     codaPkg=FALSE)

 

output2 = bugs(data,inits=inits2,model.file="hierarchicalmodel.bug",

     parameters=c("alphac","betac","taua","taub","tau2"),

     n.chains=2,n.iter=4000,n.burnin=0,n.thin=1,

     bugs.directory="c:/Program Files/WinBUGS14/",

     codaPkg=FALSE)

 

 

# Replicating Figure 5.6 (page 162)

par(mfrow=c(2,2))

ts.plot(output1$sims.array[,1,2],xlab="iterations",ylab="",main="(a) beta")

lines(output2$sims.array[,1,2])

ts.plot(1/sqrt(output1$sims.array[,1,5]),xlab="iterations",ylab="",main="(a) sigma")

lines(1/sqrt(output2$sims.array[,1,5]))

ts.plot(output1$sims.array[,1,3],xlab="iterations",ylab="",main="(a) taua")

lines(output2$sims.array[,1,3])

ts.plot(output1$sims.array[,1,4],xlab="iterations",ylab="",main="(a) taub")

lines(output2$sims.array[,1,4])

 

 

# Replicating Figure 5.8 (page 172)

output = rbind(output1$sims.array[1501:4000,1,],output2$sims.array[1501:4000,1,])

par(mfrow=c(2,2))

plot(density(output[,2]),xlab="",main="(a) beta",ylab="",axes=F)

axis(1);axis(2)

plot(density(1/sqrt(output[,5])),xlab="",main="(b) sigma",ylab="",axes=F)

axis(1);axis(2)

plot(density(output[,3]),xlab="",main="(c) taua",ylab="",axes=F)

axis(1);axis(2)

plot(density(output[,4]),xlab="",main="(d) taub",ylab="",axes=F)

axis(1);axis(2)