¿Stan hace predicciones posteriores?

9

¿Stan (en particular, rstan) tiene instalaciones incorporadas para generar distribuciones posteriores predictivas?

No es difícil generar la distribución desde el ajuste estándar, pero prefiero no reinventar la rueda.

Luego
fuente
2
Hay una sección de cantidades generadas al final que se supone que puede manejar la simulación, pero la documentación (a partir del ver. 1.3, pero el ver. 2 debería estar disponible pronto) no explica con mucho detalle cómo lograr esto. Puede considerar preguntar en la lista de correo.
John

Respuestas:

4

De acuerdo con el Manual del usuario de Stan v2.2.0 (páginas 361–362):

En Stan, las simulaciones posteriores se pueden generar de dos maneras. El primer enfoque es tratar las variables predichas como parámetros y luego definir sus distribuciones en el bloque modelo. El segundo enfoque, que también funciona para variables discretas, es generar datos replicados utilizando generadores de números aleatorios en el bloque de cantidades generadas.

Usualmente uso el último.

Abraham
fuente
3

La siguiente no es una respuesta exhaustiva, pero espero que sea mejor que ninguna respuesta. En mis propias aplicaciones, aplico verificaciones predictivas posteriores para examinar las predicciones del modelo para una sola medida dependiente que se ha generado a partir de un modelo lineal. Esto es simple en JAGS, pero algo más opaco en 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);
}

Debe haber una mejor manera de hacer esto, así que alguien publique una mejor respuesta. Pero el código anterior genera N distribuciones predictivas posteriores, una para cada observación. Hago esto para que se pueda encontrar una distribución predictiva de los extremos, pero si solo le interesa la cantidad predictiva posterior y_tilde, puede prescindir de todos ellos. Para grandes conjuntos de datos, la solución anterior obviamente requiere demasiado espacio.

RNG
fuente