data{ int Nsubj ; // number of participants int Ntotal ; // number of questions int nYlevels ; // number of responses on scale (0-10 scale, so 11 responses) int s[Ntotal] ; // index of subject at a given question int k ; // num. of predictors int yPre[Ntotal] ; // subjects' self-rating before feedback int yJud[Ntotal] ; // feedback from external judges int yPost[Ntotal] ; // subjects' self-rating after feedback } parameters { real mu_tau_pos ; real sigma_tau_pos ; real omega_corr_pos ; real mu_tau_neg ; real sigma_tau_neg ; real omega_corr_neg ; vector[k] tau_pos[Nsubj] ; corr_matrix[k] Omega_pos[Nsubj] ; vector[k] tau_neg[Nsubj] ; corr_matrix[k] Omega_neg[Nsubj] ; vector[Nsubj] muPreSub ; real muPreGroup ; real sigma2PreGroup ; vector[Nsubj] muJudPosSub ; real muJudPosGroup ; real sigma2JudPosGroup ; vector[Nsubj] muJudNegSub ; real muJudNegGroup ; real sigma2JudNegGroup ; vector[Nsubj] muPostSub ; real muPostGroup ; real sigma2PostGroup ; } model { mu_tau_pos ~ cauchy(0, 2.5) ; omega_corr_pos ~ gamma(2,1) ; mu_tau_neg ~ cauchy(0, 2.5) ; omega_corr_neg ~ gamma(2,1) ; for (i in 1:Nsubj) { tau_pos[i,] ~ gamma((mu_tau_pos/sigma_tau_pos)^2, mu_tau_pos/(sigma_tau_pos^2)); Omega_pos[i,,] ~ lkj_corr(omega_corr_pos); tau_neg[i,] ~ gamma((mu_tau_neg/sigma_tau_neg)^2, mu_tau_neg/(sigma_tau_neg^2)); Omega_neg[i,,] ~ lkj_corr(omega_corr_neg); } sigma2PreGroup ~ inv_gamma(1, 1) ; muPreGroup ~ normal((1+nYlevels)/2 , nYlevels) ; // muPreSub ~ normal(muPreGroup, sqrt(sigma2PreGroup)) ; sigma2JudPosGroup ~ inv_gamma(1, 1) ; muJudPosGroup ~ normal((1+nYlevels)/2 , nYlevels) ; // muJudPosSub ~ normal(muJudPosGroup, sqrt(sigma2JudPosGroup)) ; sigma2JudNegGroup ~ inv_gamma(1, 1) ; muJudNegGroup ~ normal((1+nYlevels)/2 , nYlevels) ; // muJudNegSub ~ normal(muJudNegGroup, sqrt(sigma2JudNegGroup)) ; sigma2PostGroup ~ inv_gamma(1, 1) ; muPostGroup ~ normal((1+nYlevels)/2 , nYlevels) ; // muPostSub ~ normal(muPostGroup, sqrt(sigma2PostGroup)) ; for (i in 1:Ntotal) { if (yJud[i]-yPre[i]>0) { [yPre[i], yJud[i], yPost[i]] ~ multi_normal([muPreSub[s[i]], muJudPosSub[s[i]], muPostSub[s[i]]], quad_form_diag(Omega_pos[s[i],,], tau_pos[s[i],])); } if (yJud[i]-yPre[i]<0) { [yPre[i], yJud[i], yPost[i]] ~ multi_normal([muPreSub[s[i]], muJudNegSub[s[i]], muPostSub[s[i]]], quad_form_diag(Omega_neg[s[i],,], tau_neg[s[i],])); } if (yJud[i]-yPre[i]==0) { real muJudZeroSub = (muJudPosSub[s[i]]+muJudNegSub[s[i]])/2 ; vector[k] tau_zero = (tau_pos[s[i],]+tau_neg[s[i],])/2 ; matrix[k,k] Omega_zero = (Omega_pos[s[i],,]+Omega_neg[s[i],,])/2; [yPre[i], yJud[i], yPost[i]] ~ multi_normal([muPreSub[s[i]], muJudZeroSub[s[i]], muPostSub[s[i]]], quad_form_diag(Omega_Zero[s[i],,], tau_Zero[s[i],])); } } }