data { int nmetro; int nx; vector[nmetro] index; vector[nmetro] index_se; matrix[nmetro, nx] x; matrix[nmetro, nx] x_se; real alpha_prior_mean; real alpha_prior_sd; vector[nx] beta_prior_mean; vector[nx] beta_prior_sd; vector[nmetro] mu_prior_mean; vector[nmetro] mu_prior_sd; } parameters { real alpha; vector[nx] beta; vector[nx] mu; vector[nx] sigma; real tau; matrix[nmetro, nx] x_latent; vector[nmetro] index_latent; } model { to_vector(x) ~ normal(to_vector(x_latent), to_vector(x_se)); index ~ normal(index_latent, index_se); index_latent ~ normal(alpha + x_latent * beta, tau); for(i in 1:nx){ x_latent[,i] ~ normal(mu[i], sigma[i]); } }