% OpenBUGs Code for Section 6:
model{

for(i in 1:Ntot){

y[i]~dnorm(mu[i],tau.c[i])

mu[i] <-  beta0 + gamma*ylag[i] + beta[1]*x[i] +  alpha[id[i]]  

tau.c[i] <- tau1*  step(qq[L[id[i]]]-t[i]) +  tau2*  (1-step(qq[L[id[i]]]-t[i]) )

}

# Random change points
for(j in 1:C){
q[j] ~ dunif(1,31)
}
qq[1:C]<-sort(q[1:C])

# Random intercepts
for(i in 1:N) { 
mu_lam[i] <- lambda*qq[L[i]]
alpha[i] ~ dnorm(mu_lam[i],tau.a) }

# Stick-Breaking
for (r in 1:C){ V[r]  ~ dbeta(1,M) }
pp[1] <- V[1]
cof[1]<- 1
for (j in 2:C) {pp0[j] <- V[j]*(1-V[j-1])*pp[j-1]/(V[j-1]*cof[j-1])
qdif[j]<- qq[j]-qq[j-1]
abs_qdif[j]<- abs(qdif[j])-3; # A trick to prevent from overclustering
cof[j] <- step(abs_qdif[j])*1+ (1-step(abs_qdif[j]))*0.00000000000001
pp[j] <- pp0[j]*cof[j]
}

for (j in 1:C) {p[j] <- pp[j]/sum(pp[])}

# Clusters for subjects
for (j in 1:N) {L[j] ~ dcat(p[1:C])
for (r in 1:C) {post[j,r] <- equals(L[j],r)  }
}

# Non-empty clusters
for (j in 1:C) {NonEmp[j] <- step(sum(post[,j]))
size[j] <- sum(post[,j])}

	
# Initial Equation
for (i in 1:N) {y0[i] ~ dnorm(mu0[i] , tau0) 
mu0[i] <- beta00 + beta01*x0[i] + phi*alpha[i] 
}

# Priors
for(k1 in 1:1){beta[k1] ~ dnorm(0,0.01)}
beta0 ~ dnorm(0,0.01)
beta00 ~ dnorm(0,0.01)
beta01 ~ dnorm(0,0.01)

gamma ~ dunif(0,1)

phi ~ dnorm(0,0.01)

lambda ~ dnorm(0,0.01)

tau1~ dgamma(0.01,0.01) 
sig2_1<- 1/tau1

tau2<- tau1*eps
sig2_2<- 1/tau2
eps ~ dgamma(0.01,0.01)C(1,)

tau.a ~ dgamma(0.01,0.01)
sig2.a <- 1/tau.a

tau0 ~ dgamma(0.01,0.01)
sig20 <- 1/tau0

M <- 1
}


 
# Copy the data set "mydata" generated by the Matlab code and paste it below
# The following data and those in the file "OpenBUGS_code2" must be loaded in OpenBUGs 

list(Ntot=9000,N=300,C=10)

id[]	t[]	y[]	ylag[]	x[]
1	1	-7.02404544250542	0	-0.196928205489672
1	2	-6.35488261081474	-7.02404544250542	-1.08917595778479
1	3	-1.15344042576646	-6.35488261081474	0.793316751105753
1	4	6.84295295716886	-1.15344042576646	0.0287687180104575
1	5	3.71295577572642	6.84295295716886	-0.382231371031669
1	6	4.06669336455786	3.71295577572642	1.47553485828498
.
.
.
300	1	-13.8107169155253	0	-0.0862970413426503
300	2	-8.94308747337093	-13.8107169155253	-0.0771493978651663
300	3	-9.07499374386000	-8.94308747337093	-0.834392854847995
300	4	-0.499789947235668	-9.07499374386000	-0.566702008289044
300	5	-10.8744317194315	-0.499789947235668	0.625951185557977
300	6	-12.8145111142072	-10.8744317194315	-2.14441469475163
300	7	-9.24559860869633	-12.8145111142072	0.169975029714599
300	8	-7.08753367787691	-9.24559860869633	-1.18319896944126
300	9	-3.94883889226373	-7.08753367787691	0.279446870016714
300	10	4.52345357244346	-3.94883889226373	-0.966184428327780
300	11	5.62259366306928	4.52345357244346	-1.73364249184383
300	12	-11.3865542918871	5.62259366306928	-1.08687735462004
300	13	-1.35511295470607	-11.3865542918871	-1.16960122806911
300	14	-6.42523178731556	-1.35511295470607	-1.07102120864983
300	15	-0.578517596487927	-6.42523178731556	0.163799833106383
300	16	1.11857361399555	-0.578517596487927	-0.120557696347596
300	17	1.65886509463574	1.11857361399555	1.40245012370233
300	18	-1.06581955613700	1.65886509463574	-2.11374537381601
300	19	0.662541754978523	-1.06581955613700	0.891423037588342
300	20	-0.0206237462521606	0.662541754978523	0.461460702232534
300	21	-1.06720879548083	-0.0206237462521606	-1.02322068305775
300	22	2.63898529175389	-1.06720879548083	1.92168839174825
300	23	-0.0772322243383328	2.63898529175389	-0.379296650247244
300	24	2.27826781664632	-0.0772322243383328	1.21494006146736
300	25	1.04567930843409	2.27826781664632	-1.34330310552036
300	26	2.40392555189848	1.04567930843409	1.15932393776769
300	27	0.604501742067642	2.40392555189848	0.895385265707545
300	28	-0.176681509165896	0.604501742067642	0.605475065036752
300	29	-0.124530856271597	-0.176681509165896	-1.03536818420133
300	30	0.163721923743262	-0.124530856271597	-0.0888926048592656
END















