gpt4 book ai didi

bayesian - 斯坦.使用目标+=语法

转载 作者:行者123 更新时间:2023-12-02 14:37:42 24 4
gpt4 key购买 nike

我开始学习斯坦。

谁能解释一下何时以及如何使用诸如...之类的语法?

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);
}

上面的示例使用目标两次而不是一次。

另一个例子。

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 ~”方式吗?

问候

最佳答案

语法

target += u;

将 u 添加到目标对数密度。

目标密度是采样器采样的密度,它需要等于给定数据的所有参数的联合密度,直到一个常数(通常通过贝叶斯规则通过编码为联合密度来实现)参数和建模数据直至恒定)。您可以在后验中将其作为 lp__ 访问,但要小心,因为它还包含由约束产生的雅可比行列式,并在采样语句中删除常量——您不想将它用于模型比较。

从采样的角度,写

target += normal_lpdf(y | mu, sigma);

效果与

相同
y ~ normal(mu, sigma);

_lpdf 表示它是法线的对数概率密度函数,它隐含在采样符号中。采样符号只是 target += 语法的简写,此外,还删除了对数密度中的常数项。

它在语言引用的语句部分(手册的第二部分)中进行了解释,并通过程序员指南(手册的第一部分)在多个示例中使用。

关于bayesian - 斯坦.使用目标+=语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com