<span class="hljs-title">functions</span> {
  <span class="hljs-meta">#include <span class="hljs-string">normal_copula.stanfunctions</span></span>
}
<span class="hljs-title">data</span> {
  <span class="hljs-type">int</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">0</span>&gt; N;
  <span class="hljs-type">int</span> K;
  <span class="hljs-type">matrix</span>[N, K] x;
  <span class="hljs-type">complex_row_vector</span>[K] z;
}
<span class="hljs-title">transformed</span> <span class="hljs-title">data</span> {
    <span class="hljs-type">complex</span> zi = <span class="hljs-number">1</span>+<span class="hljs-number">3.14i</span>;
    zi = zi * <span class="hljs-number">0i</span>;
    <span class="hljs-type">complex</span> yi = <span class="hljs-built_in">to_complex</span>(<span class="hljs-number">0</span>, <span class="hljs-number">1.1</span>) + <span class="hljs-built_in">to_complex</span>(<span class="hljs-number">0.0</span>, <span class="hljs-number">2.2</span>) + <span class="hljs-built_in">to_complex</span>();
    <span class="hljs-type">real</span> x = <span class="hljs-built_in">get_real</span>(<span class="hljs-number">3i</span> - <span class="hljs-number">40e-3i</span> + <span class="hljs-number">1e10i</span>);
}›
<span class="hljs-title">parameters</span> {
  <span class="hljs-type">array</span>[K - <span class="hljs-number">1</span>] <span class="hljs-type">real</span> mu;
  <span class="hljs-type">array</span>[K + <span class="hljs-number">1</span>] <span class="hljs-type">real</span>&lt;<span class="hljs-keyword">lower</span>=<span class="hljs-number">0</span>&gt; sigma;
  <span class="hljs-type">cholesky_factor_corr</span>[K] L;
  <span class="hljs-type">tuple</span>(<span class="hljs-type">real</span>, <span class="hljs-type">tuple</span>(<span class="hljs-type">real</span>, <span class="hljs-type">real</span>)) t;
}
<span class="hljs-title">model</span> {
  <span class="hljs-keyword">target</span> += <span class="hljs-built_in">normal_lpdf</span>(x[ : , <span class="hljs-number">1</span>] | mu[<span class="hljs-number">1</span>], sigma[<span class="hljs-number">1</span>]);
  <span class="hljs-keyword">target</span> += <span class="hljs-built_in">gumbel_lpdf</span>(x[ : , <span class="hljs-number">2</span>] | mu[<span class="hljs-number">2</span>], sigma[<span class="hljs-number">2</span>]);
  <span class="hljs-keyword">target</span> += <span class="hljs-built_in">lognormal_lpdf</span>(x[ : , <span class="hljs-number">3</span>] | mu[<span class="hljs-number">3</span>], sigma[<span class="hljs-number">3</span>]);
  <span class="hljs-keyword">target</span> += <span class="hljs-built_in">weibull_lpdf</span>(x[ : , <span class="hljs-number">4</span>] | sigma[<span class="hljs-number">4</span>], sigma[<span class="hljs-number">5</span>]);

  {
    <span class="hljs-type">matrix</span>[K, N] y;
    <span class="hljs-keyword">for</span> (n <span class="hljs-keyword">in</span> <span class="hljs-number">1</span> : N) {
      y[<span class="hljs-number">1</span>, n] = <span class="hljs-built_in">inv_Phi</span>(<span class="hljs-built_in">normal_cdf</span>(x[n, <span class="hljs-number">1</span>] | mu[<span class="hljs-number">1</span>], sigma[<span class="hljs-number">1</span>]));
      y[<span class="hljs-number">2</span>, n] = <span class="hljs-built_in">inv_Phi</span>(<span class="hljs-built_in">gumbel_cdf</span>(x[n, <span class="hljs-number">2</span>] | mu[<span class="hljs-number">2</span>], sigma[<span class="hljs-number">2</span>]));
      y[<span class="hljs-number">3</span>, n] = <span class="hljs-built_in">inv_Phi</span>(<span class="hljs-built_in">lognormal_cdf</span>(x[n, <span class="hljs-number">3</span>] | mu[<span class="hljs-number">3</span>], sigma[<span class="hljs-number">3</span>]));
      y[<span class="hljs-number">4</span>, n] = <span class="hljs-built_in">inv_Phi</span>(<span class="hljs-built_in">weibull_cdf</span>(x[n, <span class="hljs-number">4</span>] | sigma[<span class="hljs-number">4</span>], sigma[<span class="hljs-number">5</span>]));
    }
    y ~ <span class="hljs-built_in">multi_normal</span>(L);

  }
}
<span class="hljs-title">generated</span> <span class="hljs-title">quantities</span> {
  <span class="hljs-type">matrix</span>[K, K] Sigma = <span class="hljs-built_in">multiply_lower_tri_self_transpose</span>(L);
}
