functions { vector z_scale(vector x) { return (x-mean(x))/sd(x); } } data { int N; int K; vector[N] soc_cap; vector[N] soc_div; vector[N] int_div; vector[N] res_soc_div; //vector[N] age; vector[N] m; matrix[N,K] x; vector[N] stable; //vector[N] age; array [N] int primary_research_area; } transformed data { vector[N] z_m = z_scale(m); vector[N] z_soc_cap = z_scale(soc_cap); vector[N] z_soc_div = z_scale(soc_div); vector[N] z_int_div = z_scale(int_div); vector[N] z_res_soc_div = z_scale(res_soc_div); } parameters { real beta_soc_cap; real beta_soc_div; real beta_int_div; real beta_stable; //real beta_age; vector[K] beta_x; real mu; real tau; //real sigma; real sigma; vector[K] mu_x; vector[K] eta; real mu_pop; real eta_pop; } model { vector[N] beta_research_area; for (k in 1:N) { beta_research_area[k] = beta_x[primary_research_area[k]+1]*tau; } beta_soc_cap ~ normal(0, 1); beta_soc_div ~ normal(0, 1); beta_int_div ~ normal(0, 1); beta_x ~ double_exponential(0, 1); beta_stable ~ normal(0, 1); //beta_age ~ normal(0, 1); mu ~ normal(0, 1); tau ~ exponential(1); //sigma ~ pareto(1, 1.5); sigma ~ exponential(1); //m ~ beta_proportion(inv_logit(beta_soc_cap*z_soc_cap + beta_soc_div*res_soc_div + beta_int_div*z_int_div + beta_stable*stable + beta_research_area + mu), sigma); z_m ~ normal(beta_soc_cap*z_soc_cap + beta_soc_div*z_res_soc_div + beta_int_div*z_int_div + beta_stable*stable + beta_research_area + mu, sigma); eta ~ pareto(1, 1.5); mu_x ~ uniform(0, 1); eta_pop ~ pareto(1, 1.5); mu_pop ~ uniform(0, 1); for (k in 1:N) { m[k] ~ beta_proportion(mu_x[primary_research_area[k]+1], eta[primary_research_area[k]+1]); } m ~ beta_proportion(mu_pop, eta_pop); } generated quantities { real R2 = 0; { vector[N] beta_research_area; for (k in 1:N) { beta_research_area[k] = beta_x[primary_research_area[k]+1]*tau; } //vector[N] pred = inv_logit(beta_soc_cap*z_soc_cap + beta_soc_div*res_soc_div + beta_int_div*z_int_div + beta_stable*stable + beta_research_area + mu); vector[N] pred = beta_soc_cap*z_soc_cap + beta_soc_div*z_res_soc_div + beta_int_div*z_int_div + beta_stable*stable + beta_research_area + mu; R2 = mean(square(z_m-pred))/variance(z_m); R2 = 1-R2; } }