Contrôle prédictif postérieur après l'inférence ABC pour plusieurs paramètres

8

Je suis relativement nouveau dans les statistiques bayésiennes, alors soyez gentil.

Je viens d'effectuer le calcul bayésien approximatif (ABC) pour l'inférence d'un modèle multi-paramètres. Maintenant, je cherche à effectuer une vérification prédictive postérieure des paramètres qui ont été déduits.

Ce que je veux savoir, c'est que, lors de l'échantillonnage à partir du postérieur pour générer les statistiques récapitulatives pour le contrôle prédictif postérieur, dois-je échantillonner indépendamment des postérieurs marginaux pour chaque paramètre, ou suis-je censé échantillonner les valeurs des paramètres conjointement (c.-à-d. des combinaisons exactes de paramètres qui ont donné lieu aux statistiques sommaires acceptées).

Le modèle contient beaucoup de paramètres (plus de 6) et je m'intéresse aux postérieurs marginaux pour chaque paramètre. J'espère que cette question est logique.

David
la source

Réponses:

8

Grande question pour un nouveau venu !!!

Votre algorithme ABC vous fournit un échantillon de la distribution ABC-postérieure. Pour chaque composante du vecteur , on obtient ainsi un échantillon de taille partir du marginal ABC-postérieur. Par exemple, voici un exemple de jouet sur la moyenne postérieure à la variance normale, lorsque vous utilisez la médiane et la folle comme résumés:θ1,,θMθM

#normal data with 100 observations 
x=rnorm(100)
#observed summaries
sumx=c(median(x),mad(x))

#normal x gamma prior
priori=function(N){
  return(cbind(rnorm(N,sd=10),1/sqrt(rgamma(N,shape=2,scale=5))))
  }

ABC=function(N){

  prior=priori(N)  #reference table

  #pseudo-data
  summ=matrix(0,N,2)
  for (i in 1:N){
    xi=rnorm(100)*prior[i,2]+prior[i,1]
    summ[i,]=c(median(xi),mad(xi)) #summaries
    }

  #normalisation factor for the distance
  mads=c(mad(summ[,1]),mad(summ[,2]))

  #distance
  dist=(abs(sumx[1]-summ[,1])/mads[1])+(abs(sumx[2]-summ[,2])/mads[2])

  #selection
  posterior=prior[dist<quantile(dist,.05),]

  return(posterior)
  }

Si vous complotez

res=ABC(10^5);hist(res[,1])

vous obtiendrez le marginal ABC-postérieur pour la moyenne normale.

Cependant, si vous souhaitez effectuer une vérification prédictive postérieure, vous ne pouvez pas générer un composant de votre postérieur à la fois pour obtenir des pseudo-données et les résumés correspondants. Vous avez besoin à la fois de la moyenne et de la variance pour obtenir un nouvel échantillon normal! Donc mon code R serait alors

postsample=res[sample(1:length(res[,1]),10^3),]

pour tirer un échantillon de l'ABC-postérieur et les pseudo-données seraient alors générées comme précédemment:

  #pseudo-data
  summ=matrix(0,M,2)
  for (i in 1:M){
    xi=rnorm(100)*postsample[i,2]+postsample[i,1]
    summ[i,]=c(median(xi),mad(xi)) #summaries
    }
Xi'an
la source
1
Merci beaucoup pour la réponse complète. Votre exemple de script R m'a vraiment fait comprendre. Après avoir posté cette question, j'ai réfléchi plus attentivement à ce que je demandais et je me rapprochais de la conclusion que vous avez donnée, donc c'est génial de vous la confirmer pour moi :-)
David
1
@ Xi'an: Terminé. Je vous remercie. Je suis encore nouveau sur ce site!
David
(Également nouvelle marque à Proba et ABC, je peux être totalement hors de portée) de @ réponse de Xi'an, il est pas vraiment clair pour moi ce que est. Je suppose que ce devrait être le nombre de contrôles postérieurs que vous souhaitez effectuer, non? et si j'ai raison, cela n'a aucun rapport avec le dans définir dans la première partie, quel est le nombre de particules sélectionné par le droit ABC? Cela m'amène à une autre question: dans votre réponse @ Xi'an, vous échantillonnez particules des postérieurs. En votre code, l'ABC me renvoie particules. Existe-t-il une règle pour choisir le nombre de postérieurs à vérifier? MMthetaM1035×103
Simon C.
Bonjour Robert, si vous pouviez répondre à cette question, ce serait grandement apprécié: stats.stackexchange.com/questions/468189/…
Bayesian Newbie