Я начинаю изучать Стэна.Стэн. Использование target + = синтаксис
Может ли кто-нибудь объяснить, когда и как использовать синтаксис, такой как ...?
target +=
вместо того, чтобы просто:
y ~ normal(mu, sigma)
Например, в Стан руководстве вы можете найти следующий пример.
model {
real ps[K]; // temp for log component densities
sigma ~ cauchy(0, 2.5);
mu ~ normal(0, 10);
for (n in 1:N) {
for (k in 1:K) {
ps[k] = log(theta[k])
+ normal_lpdf(y[n] | mu[k], sigma[k]);
}
target += log_sum_exp(ps);
}
}
Я думаю, что целевая линия увеличивает целевое значение, что я думаю, что это логарифм задней плотности.
Но задняя плотность для какого параметра?
Когда оно обновляется и инициализируется?
После того, как Стэн заканчивает (и сходится), как вы получаете доступ к его значению и как я его использую?
Другие примеры:
data {
int<lower=0> J; // number of schools
real y[J]; // estimated treatment effects
real<lower=0> sigma[J]; // s.e. of effect estimates
}
parameters {
real mu;
real<lower=0> tau;
vector[J] eta;
}
transformed parameters {
vector[J] theta;
theta = mu + tau * eta;
}
model {
target += normal_lpdf(eta | 0, 1);
target += normal_lpdf(y | theta, sigma);
}
приведенный выше пример использует цель в два раза, а не только один раз.
другой пример.
data {
int<lower=0> N;
vector[N] y;
}
parameters {
real mu;
real<lower=0> sigma_sq;
vector<lower=-0.5, upper=0.5>[N] y_err;
}
transformed parameters {
real<lower=0> sigma;
vector[N] z;
sigma = sqrt(sigma_sq);
z = y + y_err;
}
model {
target += -2 * log(sigma);
z ~ normal(mu, sigma);
}
Этот последний пример даже смешивает оба метода.
Чтобы сделать это еще сложнее, я читал, что
y ~ normal(0,1);
имеет тот же эффект, чем
increment_log_prob(normal_log(y,0,1));
Может кто-нибудь объяснить, почему, пожалуйста?
Может ли кто-нибудь представить простой пример, написанный двумя разными способами: «target + =» и обычным простым способом «y ~», пожалуйста?
С уважением
Понятно, что у вас есть широкий набор вопросов о том, чтобы в конечном итоге перейти к использованию rstan, но вы должны сначала изучить STAN, и только после этого, если вы подумаете о расширении этой перспективы для перевода в другую среду синтаксического программирования , Ограничьте свой вопрос, если вы не хотите, чтобы он закрылся. –
Мой вопрос: «Как и почему использовать цель + =?» , Остальные - это просто примеры и некоторые объяснения. – skan
Итак, не включайте посторонние материалы и теги на языки и пакеты, которые не под вопросом. –