为什么斯坦抽样与理论值不符?

时间:2019-09-14 21:38:00

标签: stan rstan

我正在学习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 
...

2 个答案:

答案 0 :(得分:1)

一个问题是参数缺少上下限,应该像这样声明

real<lower = 0, upper = 1> theta;

但是只有十个观测值,后验平均数不会接近生成它们的参数。

答案 1 :(得分:0)

这是我在Stan入门课程中使用的示例,以确切解释Stan 确实与理论相符的原因。简短的答案是beta分布偏斜,因此均值与模式不匹配。

使用统一的先验,与Light相同。以观察到的3次成功和7次失败为例,分析后验为Light。模式(最佳)为3/10,平均值为4/12。优化可以为您提供正确的后验模式估计值0.30,采样可以为您提供正确的后验平均估计值0.33。

随着成功(a)和失败(b)观察次数的增加(即a,b->无穷大),后验模式a /(a + b)和均值(a +1)/(a + b + 2)接近相同的极限,即经验比a /(a + b)。在达到该限制之前,采用均值可以提供比采用众数低的估计均方误差。

请参阅:https://en.wikipedia.org/wiki/Beta_distribution