Bayesian 斯坦。使用目标+;=语法
我开始学斯坦了 谁能解释一下什么时候以及如何使用诸如Bayesian 斯坦。使用目标+;=语法,bayesian,stan,Bayesian,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]) + no
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);
}
效果与
increment_log_prob(normal_log(y,0,1));
谁能解释一下原因吗
有谁能提供一个简单的例子,用两种不同的方式编写,分别是“target+=”和常规的更简单的“y~”方式
关于语法
target += u;
将u添加到目标日志密度
目标密度是采样器采样的密度,它需要等于给定数据的所有参数的联合密度,直到一个常数(通常通过贝叶斯规则实现,编码为参数和建模数据的联合密度,直到一个常数)。在后面,您可以将其作为lp_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
从抽样的角度来看,写作
target += normal_lpdf(y | mu, sigma);
具有与相同的效果
y ~ normal(mu, sigma);
_lpdf表示它是正态的对数概率密度函数,这在采样符号中是隐式的。采样表示法只是target+=语法的简写,此外,在日志密度中删除常量项
语言参考(手册的第二部分)的语句部分对其进行了解释,并通过《程序员指南》(手册的第一部分)在多个示例中使用。我刚刚开始学习斯坦和贝叶斯统计,主要依赖于约翰·克鲁什克的书。在第14.3.3章中,他解释道: 因此,Stan中计算的本质是处理对数 后验概率密度及其梯度;没有 分布参数的直接随机抽样 因此(仍用Kruschke的话说),a 类[…]模型
y∼ 正态(mu,sigma)
[实际上]是指将当前后验概率乘以基准值y处正态分布的密度
按照对数计算规则,此乘法等于将给定数据的对数概率密度y
与当前对数概率相加。(log(a*b)=log(a)+log(b)
,因此乘法和和相等)
我承认我没有完全理解它的含义,但我认为它指向了正确的方向,从数学上讲,
targetr+=
就是这样做的。很明显,关于最终使用rstan的问题,你有很多疑问,但是您应该首先学习STAN,并且只有在学习了STAN之后,才应该考虑将该视角扩展到翻译到不同的语法编程环境。如果你不想关闭你的问题,就缩小范围。我的问题是“如何以及为什么使用target+=?”。其余的只是示例和一些解释。因此,不要将无关的材料和标记包含到没有问题的语言和包中。好的,删除标记。感谢您的详细解释。为什么y~语法不使用加法,而target+=使用加法?那么在同一个模型中使用两行“target+=”呢?一些例子可以做到这一点。对数密度是一个持续的总和,而target+=只是增加它。您可以有任意多个~语句和任意多个target+=语句。+=表示法遵循常见的编程语言约定(尽管变量target是内置的),而采样语句表示法遵循bug和统计表示法。
target += normal_lpdf(y | mu, sigma);
y ~ normal(mu, sigma);