我开始学习Stan。
有人能解释一下如何使用...这样的语法吗?
target +=
不是只有:
y ~ normal(mu, sigma)
例如,在Stan手册中,您可以找到以下示例。
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);
}
}
我认为目标行增加了目标值,我认为它是后验密度的对数。
但是哪个参数的后验密度呢?
它是何时更新和初始化的?
在Stan完成(并收敛)后,如何访问其值以及如何使用它?
其他例子:
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);
}
上面的例子使用了两次target而不是一次。
另一个例子。
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~”方式分别编写,谢谢。
谢谢!