回答:
よると、スタンユーザーマニュアルバージョン2.2.0(ページ361から362まで):
スタンでは、事後シミュレーションは2つの方法で生成できます。最初のアプローチは、予測された変数をパラメーターとして扱い、モデルブロックでそれらの分布を定義することです。離散変数に対しても機能する2番目のアプローチは、生成された数量ブロックで乱数ジェネレーターを使用して複製データを生成することです。
私は通常後者を使用します。
以下は完全な答えではありませんが、うまくいけば、答えがないよりはましです。私自身のアプリケーションでは、事後予測チェックを適用して、線形モデルから生成された単一の従属メジャーのモデル予測を調べます。これはJAGSでは単純ですが、スタンではやや不透明です。
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);
}
これを行うにはもっと良い方法があるに違いないので、誰かがより良い答えを投稿してください。ただし、上記のコードは、観測ごとに1つ、N個の事後予測分布を生成します。これを行うのは、極値の予測分布を見つけるy_tilde
ことができるようにするためですが、事後予測量のみに関心がある場合は、それらすべてを使用しなくても実行できる可能性があります。大きなデータセットの場合、上記のソリューションは明らかにスペースを使いすぎます。