require(R2jags); invisible(runif(1))
require(R2OpenBUGS)

## US Arrests: Correlated beta's in regression
bData <- list(x=USArrests$UrbanPop, y=USArrests$Murder, n=nrow(USArrests))
model <- function() {
  for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau)
    mu[i] <- beta[1] + beta[2]*x[i]
  }
  beta[1] ~ dnorm(0,0.0001)
  beta[2] ~ dnorm(0,0.0001)
  tau ~ dgamma(0.001, 0.001)
}
init <- function() list(tau=1)
fit <- bugs(model=model, init=init, param="beta", data=bData, n.iter=2000, n.chain=1, DIC=FALSE)
traceplot(fit, mfrow=c(2,1), ask=FALSE)

## Fix #1
fit <- jags(model=model, param="beta", data=bData, n.iter=2000, n.chain=1, DIC=FALSE)
traceplot(fit, mfrow=c(2,1), ask=FALSE)

## Fix #2
model <- function() {
  for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau)
    mu[i] <- beta[1] + beta[2]*(x[i]-mean(x[]))
  }
  beta[1] ~ dnorm(0,0.0001)
  beta[2] ~ dnorm(0,0.0001)
  tau ~ dgamma(0.001, 0.001)
}
fit <- bugs(model=model, init=init, param="beta", data=bData, n.iter=2000, n.chain=1, DIC=FALSE)
traceplot(fit, mfrow=c(2,1), ask=FALSE)

## Fix #3
bData <- list(X=cbind(1,USArrests$UrbanPop), y=USArrests$Murder, n=nrow(USArrests), m=c(0,0), I2=(0.0001*diag(2)))
model <- function() {
  for (i in 1:n) {
    y[i] ~ dnorm(mu[i], tau)
    mu[i] <- inprod(X[i,], beta[])
  }
  beta[1:2] ~ dmnorm(m[], I2[,])
  tau ~ dgamma(0.001, 0.001)
}
fit <- bugs(model=model, init=init, param="beta", data=bData, n.iter=2000, n.chain=1, DIC=FALSE)
traceplot(fit, mfrow=c(2,1), ask=FALSE)
