Блок Stan внутри блока сгенерированных количеств

#r #stan #rstan

Вопрос:

Я очень новичок в stan и пытаюсь понять цель написания отдельного блока внутри generated quantities блока.
В частности, в чем разница между этим кодом:

 generated quantities {
 real x[N];
 vector[N] y;
 vector[N] f;
 for (n in 1:N)
  x[n] = uniform_rng(-2,2);
{
 matrix[N, N] cov;
 matrix[N, N] L_cov;
 cov = cov_exp_quad(x, alpha, length_scale);
 for (n in 1:N)
  cov[n, n] = cov[n, n]   1e-12;
 L_cov = cholesky_decompose(cov);
 f = multi_normal_cholesky_rng(zeros, L_cov);
}
 for (n in 1:N)
  y[n] = normal_rng(f[n], sigma);
}
 

и этот, где у меня нет разделенного блока кода:

 generated quantities {
 real x[N];
 vector[N] y;
 vector[N] f;
 matrix[N, N] cov;
 matrix[N, N] L_cov;

 for (n in 1:N)
  x[n] = uniform_rng(-2,2);

 cov = cov_exp_quad(x, alpha, length_scale);
 
 for (n in 1:N)
  cov[n, n] = cov[n, n]   1e-12;
 
 L_cov = cholesky_decompose(cov);
 f = multi_normal_cholesky_rng(zeros, L_cov);

 for (n in 1:N)
  y[n] = normal_rng(f[n], sigma);
}
 

Комментарии:

1. Ознакомьтесь с разделом 8.8 Справочного руководства Stan — «Переменные, объявленные во вложенных блоках, являются локальными переменными, а не сгенерированными величинами, и поэтому не будут напечатаны». В вашем примере cov и f не являются частью первого вывода, но были бы во втором.