#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
не являются частью первого вывода, но были бы во втором.