Stan (em particular, rstan) possui instalações integradas para gerar distribuições posteriores preditivas?
Não é difícil gerar a distribuição do padrão, mas prefiro não reinventar a roda.
Stan (em particular, rstan) possui instalações integradas para gerar distribuições posteriores preditivas?
Não é difícil gerar a distribuição do padrão, mas prefiro não reinventar a roda.
Respostas:
De acordo com o Stan User manual v2.2.0 (páginas 361–362):
Em Stan, simulações posteriores podem ser geradas de duas maneiras. A primeira abordagem é tratar as variáveis previstas como parâmetros e depois definir suas distribuições no bloco do modelo. A segunda abordagem, que também funciona para variáveis discretas, é gerar dados replicados usando geradores de números aleatórios no bloco de quantidades geradas.
Eu costumo usar o último.
O seguinte não é uma resposta completa, mas espero que seja melhor do que nenhuma resposta. Em minhas próprias aplicações, aplico verificações preditivas posteriores para examinar as previsões do modelo para uma única medida dependente gerada a partir de um modelo linear. Isso é simples no JAGS, mas um pouco mais opaco no 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);
}
Deve haver uma maneira melhor de fazer isso, para que alguém poste uma resposta melhor. Mas o código acima gera N distribuições preditivas posteriores, uma para cada observação. Faço isso para que seja possível encontrar uma distribuição preditiva de extremos, mas se você estiver interessado apenas na quantidade preditiva posterior, y_tilde
poderá conseguir sem todas elas. Para conjuntos de dados grandes, a solução acima é obviamente muito ocupada em espaço.