<span class="hljs-comment">// Multivariate Regression Example</span>
<span class="hljs-comment">// Taken from stan-reference-2.8.0.pdf p.66</span>

<span class="hljs-title">data</span> {
  <span class="hljs-keyword">int</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">0</span>&gt; N;             <span class="hljs-comment">// num individuals</span>
  <span class="hljs-keyword">int</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">1</span>&gt; K;             <span class="hljs-comment">// num ind predictors</span>
  <span class="hljs-keyword">int</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">1</span>&gt; J;             <span class="hljs-comment">// num groups</span>
  <span class="hljs-keyword">int</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">1</span>&gt; L;             <span class="hljs-comment">// num group predictors</span>
  <span class="hljs-keyword">int</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">1</span>,<span class="hljs-keyword">upper</span>=J&gt; jj[N]; <span class="hljs-comment">// group for individual</span>
  <span class="hljs-keyword">matrix</span>[N,K] x;              <span class="hljs-comment">// individual predictors</span>
  <span class="hljs-keyword">row_vector</span>[L] u[J];         <span class="hljs-comment">// group predictors</span>
  <span class="hljs-keyword">vector</span>[N] y;                <span class="hljs-comment">// outcomes</span>
}
<span class="hljs-title">parameters</span> {
  <span class="hljs-keyword">corr_matrix</span>[K] Omega;       <span class="hljs-comment">// prior correlation</span>
  <span class="hljs-keyword">vector</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">0</span>&gt;[K] tau;     <span class="hljs-comment">// prior scale</span>
  <span class="hljs-keyword">matrix</span>[L,K] gamma;          <span class="hljs-comment">// group coeffs</span>
  <span class="hljs-keyword">vector</span>[K] beta[J];          <span class="hljs-comment">// indiv coeffs by group</span>
  <span class="hljs-keyword">real</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">0</span>&gt; sigma;        <span class="hljs-comment">// prediction error scale</span>
}
<span class="hljs-title">model</span> {
  tau ~ <span class="hljs-keyword">cauchy</span>(<span class="hljs-number">0</span>,<span class="hljs-number">2.5</span>);
  Omega ~ <span class="hljs-keyword">lkj_corr</span>(<span class="hljs-number">2</span>);
  <span class="hljs-built_in">to_vector</span>(gamma) ~ <span class="hljs-keyword">normal</span>(<span class="hljs-number">0</span>, <span class="hljs-number">5</span>);
  {
    <span class="hljs-keyword">row_vector</span>[K] u_gamma[J];
    <span class="hljs-keyword">for</span> (j <span class="hljs-keyword">in</span> <span class="hljs-number">1</span>:J)
      u_gamma[j] &lt;- u[j] * gamma;
    beta ~ <span class="hljs-keyword">multi_normal</span>(u_gamma, <span class="hljs-built_in">quad_form_diag</span>(Omega, tau));
  }
  {
    <span class="hljs-keyword">vector</span>[N] x_beta_jj;
    <span class="hljs-keyword">for</span> (n <span class="hljs-keyword">in</span> <span class="hljs-number">1</span>:N)
      x_beta_jj[n] &lt;- x[n] * beta[jj[n]];
    y ~ <span class="hljs-keyword">normal</span>(x_beta_jj, sigma);
  }
}

<span class="hljs-comment"># Note: Octothorpes indicate comments, too!</span>
