Macht Stan vorausschauende Posterioren?

9

Verfügt Stan (insbesondere Rstan) über integrierte Einrichtungen zur Erzeugung prädiktiver posteriorer Verteilungen?

Es ist nicht schwer, die Verteilung aus der Stan-Passform zu generieren, aber ich möchte das Rad lieber nicht neu erfinden.

Anon
quelle
2
Am Ende befindet sich ein Abschnitt mit generierten Mengen, in dem die Simulation ausgeführt werden soll. In der Dokumentation (ab Version 1.3, Version 2 sollte jedoch bald veröffentlicht werden) wird nicht ausführlich erläutert, wie dies erreicht werden kann. Sie können die Mailingliste fragen.
John

Antworten:

4

Gemäß dem Stan-Benutzerhandbuch v2.2.0 (Seiten 361–362):

In Stan können posteriore Simulationen auf zwei Arten erzeugt werden. Der erste Ansatz besteht darin, die vorhergesagten Variablen als Parameter zu behandeln und dann ihre Verteilungen im Modellblock zu definieren. Der zweite Ansatz, der auch für diskrete Variablen funktioniert, besteht darin, replizierte Daten unter Verwendung von Zufallszahlengeneratoren im generierten Mengenblock zu generieren.

Ich benutze normalerweise letzteres.

Abraham
quelle
3

Das Folgende ist keine gründliche Antwort, aber hoffentlich ist es besser als keine Antwort. In meinen eigenen Anwendungen wende ich posteriore Vorhersageprüfungen an, um Modellvorhersagen für ein einzelnes abhängiges Maß zu untersuchen, das aus einem linearen Modell generiert wurde. Dies ist in JAGS einfach, in Stan jedoch etwas undurchsichtiger.

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);
}

Es muss einen besseren Weg geben, also bitte jemand eine bessere Antwort posten. Der obige Code erzeugt jedoch N posteriore Vorhersageverteilungen, eine für jede Beobachtung. Ich mache das so, dass eine prädiktive Verteilung der Extrema gefunden werden kann, aber wenn Sie nur an der posterioren prädiktiven Größe interessiert sind y_tilde, können Sie möglicherweise auf alle verzichten. Für große Datenmengen ist die obige Lösung offensichtlich zu platzintensiv.

RNG
quelle