Answers:
根据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
那么可能不需要这些预测值就可以做到。对于大型数据集,上述解决方案显然过于占用空间。