data { int N; int T; int T_pred; int HA[N,T]; } parameters { ordered[10] cutpoints; matrix[N,T] mu_raw; matrix[N,T] phi_raw; real mu_ori; real s_mu; real s_phi; real s_ori; } transformed parameters{ matrix[N,T] mu; matrix[N,T] phi; mu[,1] = mu_ori + s_ori*mu_raw[,1] ; for (t in 2:T) mu[,t] = mu[,t-1] + s_mu*mu_raw[,t]; for (t in 1:T) phi[,t] = mu[,t] + s_phi*phi_raw[,t]; } model { mu_ori ~ normal(0,1.5); s_mu ~ exponential(3); s_phi ~ lognormal(-0.5,0.5); s_ori ~ lognormal(0,0.5); for (t in 1:T){ mu_raw[,t] ~ normal(0,1); phi_raw[,t] ~ normal(0,1); HA[,t] ~ ordered_logistic(phi[,t], cutpoints); } } generated quantities { matrix[N,T+T_pred] mu_all; matrix[N,T+T_pred] phi_all; int ha_all[N,T+T_pred]; matrix[N,T] log_lik; for (t in 1:T) for (n in 1:N){ mu_all[n,t] = mu[n,t]; phi_all[n,t] = phi[n,t]; log_lik[n,t] = ordered_logistic_lpmf(HA[n,t]|phi[n,t], cutpoints); } for (t in 1:T_pred) for (n in 1:N){ mu_all[n,T+t] = normal_rng(mu_all[n,T+t-1], s_mu); phi_all[n,T+t] = normal_rng(mu_all[n,T+t], s_phi); } for (t in 1:T+T_pred) for (n in 1:N) ha_all[n,t] = ordered_logistic_rng(phi_all[n,t], cutpoints); }