【发布时间】:2019-09-14 21:38:00
【问题描述】:
我正在学习 stan,只是尝试了一个非常简单的模型(bernoulli),如下所示,我希望后验采样的平均值为 0.3,因为先验只是均匀分布,但 stan 实际上给出了平均值为 0.33。这是怎么回事?
顺便说一句,我尝试了“优化”,它给出了 0.3,这是我所期望的。
感谢您的帮助!
model_code = "
data {
int N;
int y[N];
}
parameters {
real theta;
}
model {
theta ~ uniform(0, 1);
y ~ bernoulli(theta);
}
"
data <- list(
N = 10,
y = c(0, 1, 1, 0, 0, 1, 0, 0, 0, 0)
)
fit = stan(model_code=model_code, data=data, iter=5000)
print(fit)
model = stan_model(model_code=model_code)
mle = optimizing(model, data=data)
print(mle, digits=3)
> print(fit)
...
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
theta 0.33 0.00 0.13 0.11 0.24 0.32 0.42 0.61 6920 1
lp__ -6.56 0.01 0.63 -8.32 -6.71 -6.31 -6.15 -6.11 6813 1
> print(mle, digits=3)
$par
theta
0.3
...
【问题讨论】:
-
我想通了。基本上我最初的期望是错误的。它应该是 0.33333。这就是贝叶斯的工作原理。