斯坦会做预测性后验吗?


9

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

从固定拟合中生成分布并不难,但我宁愿不要重新发明轮子。


2
最后有一个生成量部分应该能够进行模拟,但是文档(从版本1.3开始,但应该很快发布版本2)并未详细解释如何实现此目的。您可以考虑询问邮件列表。
约翰

Answers:


4

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

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

我通常使用后者。


3

以下不是一个完整的答案,但希望它比没有答案要好。在我自己的应用程序中,我应用后验预测检查来检查从线性模型生成的单个相关度量的模型预测。这在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那么可能不需要这些预测值就可以做到。对于大型数据集,上述解决方案显然过于占用空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.