Beim Erstellen von Modellen ist es hilfreich, unser Verständnis zu überprüfen, indem wir gefälschte Daten simulieren und prüfen, ob das angepasste Modell die wahren zugrunde liegenden Parameter wiederherstellen kann. Und das geht in Stan so einfach!

Siehe oben – ich habe gerade ein einfaches Beispiel gemacht Stan-Spielplatz. (Danke, Brian!) Der Code ist irgendwie hässlich, weil ich die wahren Parameterwerte im Stan-Code des transformierten Datenblocks angegeben habe, anstatt sie als Daten aufzurufen; Auf der anderen Seite ist das Ganze dann in einem Programm.

Das ist nicht dasselbe wie voll Simulationsbasierte Kalibrierungsprüfung (SBC). In SBC ziehen Sie die wahren Parameterwerte aus dem Prior, wiederholen den gesamten Prozess viele Male parallel und überprüfen dann die durchschnittliche Abdeckung der Posterior-Inferenzen in Bezug auf die wahren Parameterwerte, indem Sie über den Prior mitteln. Hier führe ich nur eine Simulation durch und stelle die wahren Parameterwerte nur einmal ein. Es ist eine Artwork schnell und schmutzig SBC, das immer noch nützlich sein kann, um Probleme wie nicht identifizierte Modelle oder schlechte Mischung zu erkennen.

Und es ist so einfach! Wann immer Sie ein Modell anpassen, sollten Sie es anhand gefälschter Daten überprüfen.

Ich habe das obige Beispiel gemacht, weil ich schnell nach einer der Übungen suchen wollte, die ich für das kommende Buch „Bayesian Workflow“ schreibe.

PS Hier ist der Code für das obige Beispiel, falls Sie es selbst ausprobieren möchten:

reworked knowledge {
  int N = 100;
  actual a_true = 0.2;
  actual b_true = 0.3;
  actual sigma_true = 0.2;
  vector(N) x;
  vector(N) y;
   for (n in 1:N) {
    x(n) = uniform_rng(0, 10);
    y(n) = normal_rng(1 / (a_true + b_true * x(n)), sigma_true);
  }
}
parameters {
  actual<decrease=0> a, b, sigma;
}
mannequin {
  a ~ regular(0, 1);
  b ~ regular(0, 1);
  for (n in 1:N) {
    y(n) ~ regular(1 / (a + b * x(n)), sigma);
  }
}

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert