Posterior Predictive Check nach ABC-Inferenz für mehrere Parameter

8

Ich bin relativ neu in der Bayes'schen Statistik, bitte seien Sie vorsichtig.

Ich habe gerade eine ungefähre Bayes'sche Berechnung (ABC) durchgeführt, um auf ein Multi-Parameter-Modell zu schließen. Jetzt möchte ich eine posteriore prädiktive Überprüfung der abgeleiteten Parameter durchführen.

Was ich wissen möchte, ist, dass ich bei der Probenahme aus dem Seitenzahnbereich, um die zusammenfassende Statistik für die posteriore Vorhersageprüfung zu erstellen, unabhängig von den Randposterioren für jeden Parameter eine Stichprobe mache oder die Parameterwerte gemeinsam abtasten soll (dh eine Stichprobe) aus den genauen Parameterkombinationen, aus denen die akzeptierte zusammenfassende Statistik hervorging).

Das Modell enthält viele Parameter (über 6) und ich interessiere mich für die Randposterioren für jeden Parameter. Ich hoffe diese Frage macht Sinn.

David
quelle

Antworten:

8

Tolle Frage für einen Neuling !!!

Ihr ABC-Algorithmus liefert Ihnen ein Beispiel aus der ABC-posterioren Verteilung. Für jede Komponente des Vektors Sie somit eine Stichprobe der Größe vom marginalen ABC-posterior. Zum Beispiel ist hier ein Spielzeugbeispiel über den normalen posterioren Mittelwert der Varianz, wenn Median und Mad als Zusammenfassungen verwendet werden: θ M.θ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)
  }

Wenn Sie planen

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

Sie erhalten das marginale ABC-posterior für den normalen Mittelwert.

Wenn Sie jedoch eine posteriore Vorhersageprüfung durchführen möchten, können Sie nicht jeweils eine Komponente Ihres posterioren Tests generieren, um Pseudodaten und die entsprechenden Zusammenfassungen abzurufen. Sie benötigen sowohl Mittelwert als auch Varianz, um eine neue normale Stichprobe zu erhalten! Also wäre mein R-Code dann

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

Um eine Probe aus dem ABC-Posterior zu ziehen, würden dann die Pseudodaten wie zuvor erzeugt:

  #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
quelle
1
Vielen Dank für die gründliche Antwort. Ihr Beispiel-R-Skript hat es mir wirklich klar gemacht. Nachdem ich diese Frage gestellt hatte, dachte ich genauer darüber nach, was ich stellte, und näherte mich der Schlussfolgerung, die Sie gegeben haben. Es ist also großartig, wenn Sie sie für mich bestätigen :-)
David,
1
@ Xi'an: Fertig. Vielen Dank. Ich bin noch neu auf dieser Seite!
David
M.M.theteinM.1035×103
Simon C.