Diese Frage ist eine technische Folge dieser Frage .
Ich habe Probleme, das in Raftery (1988) vorgestellte Modell zu verstehen und zu replizieren : Inferenz für den Binomial- Parameter: ein hierarchischer Bayes-Ansatz in WinBUGS / OpenBUGS / JAGS. Es geht aber nicht nur um Code, es sollte hier auch zum Thema gehören.
Hintergrund
Sei eine Menge von Erfolgszählungen aus einer Binomialverteilung mit unbekanntem und . Ferner gehe ich davon aus, dass einer Poisson-Verteilung mit dem Parameter folgt (wie in der Veröffentlichung beschrieben). Dann hat jedes eine Poisson-Verteilung mit dem Mittelwert . Ich möchte die Prioren in und angeben .N θ N μ x i λ = μ θ λ θ
Unter der Annahme, dass ich keine guten Vorkenntnisse über oder ; habe, möchte ich sowohl als auch ; nicht informative Prioritäten zuweisen . Angenommen, meine Prioren sind und .θ λ θ λ ∼ G a m m a ( 0,001 , 0,001 ) θ ∼ U n i f o r m ( 0 , 1 )
Der Autor verwendet ein falsches Vorzeichen von , WinBUGS akzeptiert jedoch keine falschen Vorzeichen.
Beispiel
In dem Artikel (Seite 226) werden die folgenden Erfolgszahlen der beobachteten Wasserböcke angegeben: . Ich möchte schätzen , die Größe der Bevölkerung.N
So habe ich versucht, das Beispiel in WinBUGS auszuarbeiten ( aktualisiert nach dem Kommentar von @ Stéphane Laurent):
model {
# Likelihood
for (i in 1:N) {
x[i] ~ dbin(theta, n)
}
# Priors
n ~ dpois(mu)
lambda ~ dgamma(0.001, 0.001)
theta ~ dunif(0, 1)
mu <- lambda/theta
}
# Data
list(x = c(53, 57, 66, 67, 72), N = 5)
# Initial values
list(n = 100, lambda = 100, theta = 0.5)
list(n = 1000, lambda = 1000, theta = 0.8)
list(n = 5000, lambda = 10, theta = 0.2)
Das Modell ist Sill nicht konvergieren schön nach 500'000 Proben mit 20'000 Burn-in - Proben. Hier ist die Ausgabe eines JAGS-Laufs:
Inference for Bugs model at "jags_model_binomial.txt", fit using jags,
5 chains, each with 5e+05 iterations (first 20000 discarded), n.thin = 5
n.sims = 480000 iterations saved
mu.vect sd.vect 2.5% 25% 50% 75% 97.5% Rhat n.eff
lambda 63.081 5.222 53.135 59.609 62.938 66.385 73.856 1.001 480000
mu 542.917 1040.975 91.322 147.231 231.805 462.539 3484.324 1.018 300
n 542.906 1040.762 95.000 147.000 231.000 462.000 3484.000 1.018 300
theta 0.292 0.185 0.018 0.136 0.272 0.428 0.668 1.018 300
deviance 34.907 1.554 33.633 33.859 34.354 35.376 39.213 1.001 43000
Fragen
Klar, mir fehlt etwas, aber ich kann nicht genau sehen, was. Ich denke, meine Formulierung des Modells ist irgendwo falsch. Meine Fragen sind also:
- Warum funktioniert mein Modell und seine Implementierung nicht?
- Wie könnte das von Raftery (1988) gegebene Modell richtig formuliert und implementiert werden?
Danke für Ihre Hilfe.
quelle
mu=lambda/theta
und ersetzenn ~ dpois(lambda)
durchn ~ dpois(mu)
Antworten:
Nun, da Sie Ihren Code zum Laufen gebracht haben, scheint diese Antwort etwas zu spät zu sein. Aber ich habe den Code schon geschrieben, also ...
Für das, was es wert ist, ist dies das gleiche * Modell, zu dem es passt( N, Θ )
rstan
. Es wird auf meinem Consumer-Laptop in 11 Sekunden geschätzt, wodurch eine effektivere Stichprobengröße für unsere interessierenden Parameter in weniger Iterationen erreicht wird.Beachte, dass ich
theta
als 2-Simplex gecastet habe . Dies dient nur der numerischen Stabilität. Die Menge des Interesses isttheta[1]
; offensichtlichtheta[2]
ist überflüssige Information.* Wie Sie sehen, ist die hintere Zusammenfassung praktisch identisch, und die Heraufstufung von zu einer realen Menge scheint keinen wesentlichen Einfluss auf unsere Schlussfolgerungen zu haben.N
rstan
Der folgende Code kann bestätigen, dass unsere Ergebnisse aus Stan sinnvoll sind.
rstan
quelle
n
kann nicht als Ganzzahl deklariert werden und ich kannte keine Problemumgehung für das Problem.rstan
Ergebnisse korrekter sind. [1] stats.stackexchange.com/questions/114366/…Hier ist mein Analyseskript und die Ergebnisse mit JAGS und R:
Die Berechnung auf meinem Desktop-PC dauerte ungefähr 98 Sekunden.
Die Ergebnisse sind:
quelle