stan 做预测后验吗?

机器算法验证 贝叶斯 后部 斯坦
2022-03-11 18:45:48

stan(特别是 rstan)是否具有生成预测后验分布的内置设施?

从 stan fit 生成分布并不难,但我宁愿不重新发明轮子。

2个回答

根据Stan 用户手册 v2.2.0(第 361-362 页):

在 Stan 中,可以通过两种方式生成后验模拟。第一种方法是将预测变量视为参数,然后在模型块中定义它们的分布。第二种方法也适用于离散变量,是在生成的数量块中使用随机数生成器生成复制数据。

我通常使用后者。

以下不是一个彻底的答案,但希望总比没有答案好。在我自己的应用程序中,我应用后验预测检查来检查从线性模型生成的单个相关度量的模型预测。这在 JAGS 中很简单,但在 Stan 中则更不透明。

data{
    int<lower=1> N; // no. rows
    real x[N]; // predictor
    real y[N]; // dependent variable
}
parameters{
    real alpha; // int.
    real beta; // slope
    real<lower=0> sigma_e; // resid. var.
    real y_tilde[N]; // post. pred.
}
model{
    real mu[N];
    for(i in 1:N){
        mu[i] <- alpha + beta*x[i];
    }

    y ~ normal(mu,sigma_e); //lik
    y_tilde ~ normal(mu,sigma_e);

    alpha ~ normal(0,5);
    beta ~ normal(0,5);
    sigma_e ~ cauchy(0,5);
}
generated quantities{
    real minimum;
    real maximum;
    minimum <- min(y_tilde);
    maximum <- max(y_tilde);
}

必须有更好的方法来做到这一点,所以请有人发布更好的答案。但是上面的代码生成了 N 个后验预测分布,每个观察一个。我这样做是为了找到极值的预测分布,但如果你只对后验预测量感兴趣,y_tilde你可以不用它们。对于大型数据集,上述解决方案显然过于占用空间。