Zaczynam uczyć się Stana.Stan. Używanie celu + = składnia
Czy ktoś może wyjaśnić, kiedy i jak używać składni, takiej jak ...?
target +=
zamiast po prostu:
y ~ normal(mu, sigma)
Na przykład w podręczniku Stan można znaleźć następujący przykład.
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);
}
}
Myślę, że linia docelowa zwiększa wartość docelową, którą uważam za logarytm gęstości tylnej.
Ale gęstość tylna dla jakiego parametru?
Kiedy jest aktualizowany i inicjalizowany?
Po tym, jak Stan kończy (i konwerguje), w jaki sposób uzyskujesz dostęp do jego wartości i jak z niej korzystam?
Inne przykłady:
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);
}
powyższym przykładzie wykorzystuje celu dwukrotnie, a nie tylko raz.
inny przykład.
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);
}
Ten ostatni przykład nawet miesza obie metody.
Aby zrobić to jeszcze trudniejsze Czytałem, że
y ~ normal(0,1);
ma ten sam efekt niż
increment_log_prob(normal_log(y,0,1));
Czy ktoś może wyjaśnić dlaczego, proszę?
Czy ktokolwiek mógłby podać prosty przykład napisany na dwa różne sposoby, z "target + =" i prostszym sposobem "y ~"?
Pozdrowienia
Jest oczywiste, że masz szeroki zestaw pytań dotyczących ostatecznego dojścia do użycia rstanu, ale powinieneś najpierw nauczyć się STAN i dopiero po tym należy pomyśleć o rozszerzeniu tej perspektywy na tłumaczenie na inne syntaktyczne środowisko programistyczne . Zawęź pytanie, jeśli nie chcesz go zamknąć. –
Moje pytanie brzmi "Jak i dlaczego używać target + =?" . Reszta to tylko przykłady i objaśnienia. – skan
Tak więc, nie należy dołączać obcej substancji i znaczników do języków i pakietów, które nie są kwestionowane. –