close all; 
clear all; clc;
% Matlab Code for the data generating process (Section 6: A simulation study):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Use matrices mydata and mydata0 as the data lists in 
% OpenBUGs_code1 and OpenBUGs_code2, respectively.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sig2_1=25;
sig2_2=1;
sig2x=1;
sig2alpha=1;
n=300;
T=30;
k=0;r=0;
b00=0;
b0=0;
beta01=1;
beta1=1;
gamma=0.5;
phi=0.98;

for i=1:n
   %%%%%%%%%%%% Generating random intercepts %%%%%%%%%
   a(i)=normrnd(0,sqrt(sig2alpha));

   %%%%%%%%%%%% Generating change points %%%%%%%%%%%%%
   c0(i)=unidrnd(5);
   c(i)=5*c0(i);% 5  10  15  20  25

   %%%%%%%%%%%% Generating initial values %%%%%%%%%%%%
   x(i,1)=normrnd(0,sqrt(sig2x));
   error(i,1)=normrnd(0,sqrt(sig2_1));
   y(i,1)=b00 +beta01*x(i,1)+phi*a(i)+error(i,1) ;
 
   id=i;k=k+1;r=r+1;
   mydata(k,1:5)=[id,1,y(i,1),0,x(i,1)];
   mydata0(r,1:2)=[y(i,1),x(i,1)];

  for t=2:T
     x(i,t)=normrnd(0,sqrt(sig2x));
     %%%%%
     if t < c(i);   sig2(i,t)=sig2_1;   else sig2(i,t)=sig2_2;  end;
     error(i,t)=normrnd(0,sqrt(sig2(i,t)));   


     ylag(i,t)=y(i,t-1);
     y(i,t)=b0 + gamma*ylag(i,t)+ beta1*x(i,t) + a(i) +error(i,t); 
     time=t;k=k+1;
     mydata(k,1:5)=[id,t,y(i,t),ylag(i,t),x(i,t)];
     end
end

