Stan (en particulier, rstan) a-t-il des installations intégrées pour générer des distributions postérieures prédictives?
Il n'est pas difficile de générer la distribution à partir du stan fit, mais je préfère ne pas réinventer la roue.
Stan (en particulier, rstan) a-t-il des installations intégrées pour générer des distributions postérieures prédictives?
Il n'est pas difficile de générer la distribution à partir du stan fit, mais je préfère ne pas réinventer la roue.
Réponses:
Selon le manuel d'utilisation de Stan v2.2.0 (pages 361–362):
Dans Stan, les simulations postérieures peuvent être générées de deux manières. La première approche consiste à traiter les variables prédites comme des paramètres, puis à définir leurs distributions dans le bloc de modèle. La deuxième approche, qui fonctionne également pour les variables discrètes, consiste à générer des données répliquées à l'aide de générateurs de nombres aléatoires dans le bloc de quantités générées.
J'utilise habituellement ce dernier.
Ce qui suit n'est pas une réponse complète, mais j'espère que c'est mieux que pas de réponse. Dans mes propres applications, j'applique des vérifications prédictives postérieures pour examiner les prédictions du modèle pour une seule mesure dépendante qui a été générée à partir d'un modèle linéaire. C'est simple dans JAGS, mais un peu plus opaque dans 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);
}
Il doit y avoir une meilleure façon de le faire, donc quelqu'un s'il vous plaît postez une meilleure réponse. Mais le code ci-dessus génère N distributions prédictives postérieures, une pour chaque observation. Je le fais pour que la distribution prédictive des extrema puisse être trouvée, mais si vous êtes uniquement intéressé par la quantité prédictive postérieure, y_tilde
vous pourrez peut-être vous en passer. Pour les grands ensembles de données, la solution ci-dessus est évidemment trop gourmande en espace.