[stagnant0]    Stagnant: a changepoint problem
      (and an illustration of how NOT to do MCMC!)



Carlin, Gelfand and Smith (1992) analyse data from Bacon and Watts (1971) concerning a changepoint in a linear regression.
[stagnant1]


Note the repeated x's.


We assume a model with two straight lines that meet at a certain changepoint x
k --- this is slightly different from the model of Carlin, Gelfand and Smith (1992) who do not constrain the two straight lines to cross at the changepoint. We assume

   Y
i    ~   Normal( m i , t )
   
m i    =    a + b J[i] (x i - x k )   J[i]=1 if i <= k    J[i]=2 if i > k

giving E(Y) =
a at the changepoint, with gradient b 1 before, and gradient b 2 after the changepoint. We give independent "noninformative'' priors to a , b 1 , b 2 and t .

Note: alpha is E(Y) at the changepoint, so will be highly correlated with k. This may be a very poor parameterisation.

Note way of constructing a uniform prior on the integer k, and making the regression
parameter depend on a random changepoint.

   model
   {
   for( i in 1 : N ) {
      Y[i] ~ dnorm(mu[i],tau)
      mu[i] <- alpha + beta[J[i]] * (x[i] - x[k])
      J[i] <- 1 + step(i - k - 0.5)
      punif[i] <- 1/N
   }
   tau ~ dgamma(0.001,0.001)
   alpha ~ dnorm(0.0,1.0E-6)
   for( j in 1 : 2 ) {
   beta[j] ~ dnorm(0.0,1.0E-6)
   }
   k ~ dcat(punif[])
   sigma <- 1 / sqrt(tau)
   }


Data     ( click to open )

Inits for chain 1     Inits for chain 2 ( click to open )



Traces of two chains shows complete dependence on starting values

[stagnant2]
[stagnant3]

Results are hopeless - no mixing at all.

Note: alpha is E(Y) at the changepoint, so will be highly correlated with k. This may be a very poor parameterisation.

TRY USING CONTINUOUS PARAMETERISATION

   model
   {
   for(i in 1 : N) {
      Y[i] ~ dnorm(mu[i], tau)
mu[i] <- alpha + beta[J[i]] * (x[i] - x.change)      
J[i] <- 1 + step(x[i] - x.change)
   }
   tau ~ dgamma(0.001, 0.001)
   alpha ~ dnorm(0.0,1.0E-6)
   for(j in 1 : 2) {
   beta[j] ~ dnorm(0.0,1.0E-6)
   }
   sigma <- 1 / sqrt(tau)
   x.change ~ dunif(-1.3,1.1)
   }



Data     ( click to open )

Inits for chain 1     Inits for chain 2 ( click to open )


Results

[stagnant4]
[stagnant5]
[stagnant6]


Not wonderful mixing, but reasonable

Good fit to data , (monitor mu and use as predicted values) use 'model fit' in Compare tool


Strong correlation of alpha and changepoint


alpha   x.change    -0.932941