You are on page 1of 1

generated quantities{

matrix[T, 2] eta_p;
matrix[T, 2] xi_p;
vector[T] f_p;
vector[T] log_lik;

// menghitung matriks kontribusi likelihood pada state 1 dan state 2


for(t in 1:T) {
eta_p[t,1] = exp(normal_lpdf(y[t]| mu1, sigma_t[t,1]));
eta_p[t,2] = exp(normal_lpdf(y[t]| mu2, sigma_t[t,2]));
}

// menghitung vektor kontribusi likelihood

for(t in 1:T) {
// for the first observation
if(t==1) {
f_p[t] = p[1]*xi1_init*eta_p[t,1] + // stay in state 1
(1 - p[1])*xi1_init*eta_p[t,2] + // transition from 1 to 2
p[2]*(1 - xi1_init)*eta_p[t,2] + // stay in state 2
(1 - p[2])*(1 - xi1_init)*eta_p[t,1]; // transition from 2 to 1

xi_p[t,1] = (p[1]*xi1_init*eta_p[t,1] +(1 - p[2])*(1 - xi1_init)*eta_p[t,1])/f_p[t];


xi_p[t,2] = 1.0 - xi_p[t,1];

} else {
// and for the rest

f_p[t] = p[1]*xi_p[t-1,1]*eta_p[t,1] + // stay in state 1


(1 - p[1])*xi_p[t-1,1]*eta_p[t,2] + // transition from 1 to 2
p[2]*xi_p[t-1,2]*eta_p[t,2] + // stay in state 2
(1 - p[2])*xi_p[t-1,2]*eta_p[t,1]; // transition from 2 to 1

// menghitung matriks probabilitas berada di state 1 dan state 2


xi_p[t,1] = (p[1]*xi_p[t-1,1]*eta_p[t,1] +(1 - p[2])*xi_p[t-1,2]*eta_p[t,1])/f_p[t];
xi_p[t,2] = 1.0 - xi_p[t,1];
}
}

// likelihood
log_lik=log(f_p);
}

You might also like