Ich habe ein Modell, um Bayes'sche Schätzungen der Populationsgröße und der Erkennungswahrscheinlichkeit in einer Binomialverteilung zu erhalten, die ausschließlich auf der beobachteten Anzahl beobachteter Objekte basieren :
Wenn dieses Modell in geschätzt wird rstan
, weicht es von den Ergebnissen ab, die aus einer Gitterannäherung des Seitenzahns erhalten wurden. Ich versuche herauszufinden, warum. (Interessierte Leser könnten feststellen, dass diese Frage eine Fortsetzung meiner Antwort hier ist .)
rstan
Annäherung
Als Referenz ist dies der Standardcode.
raftery.model <- "
data{
int I;
int y[I];
}
parameters{
real<lower=max(y)> N;
simplex[2] theta;
}
transformed parameters{
}
model{
vector[I] Pr_y;
for(i in 1:I){
Pr_y[i] <- binomial_coefficient_log(N, y[i])
+multiply_log(y[i], theta[1])
+multiply_log((N-y[i]), theta[2]);
}
increment_log_prob(sum(Pr_y));
increment_log_prob(-log(N));
}
"
raft.data <- list(y=c(53,57,66,67,72), I=5)
system.time(fit.test <- stan(model_code=raftery.model, data=raft.data,iter=10))
system.time(fit <- stan(fit=fit.test, data=raft.data,iter=10000,chains=5))
Beachten Sie, dass ich theta
als 2-Simplex gegossen habe . Dies dient nur der Einfachheit. Die Menge des Interesses ist theta[1]
; offensichtlich theta[2]
ist überflüssige information.
Außerdem ist ein reeller Wert ( akzeptiert nur reelle Parameter, da es sich um eine Gradientenmethode handelt), daher habe ich eine reelle Binomialverteilung geschrieben.rstan
Rstan Ergebnisse
mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
N 1078.75 256.72 15159.79 94.44 148.28 230.61 461.63 4575.49 3487 1
theta[1] 0.29 0.00 0.19 0.01 0.14 0.27 0.42 0.67 2519 1
theta[2] 0.71 0.00 0.19 0.33 0.58 0.73 0.86 0.99 2519 1
lp__ -19.88 0.02 1.11 -22.89 -20.31 -19.54 -19.09 -18.82 3339 1
Rasterannäherung
Die Gitterannäherung wurde wie folgt erzeugt. Aufgrund von Speicherbeschränkungen kann ich auf meinem Laptop kein feineres Raster erstellen.
theta <- seq(0+1e-10,1-1e-10, len=1e3)
N <- round(seq(72, 5000, len=1e3)); N[2]-N[1]
grid <- expand.grid(N,theta)
y <- c(53,57,66,67,72)
raftery.prob <- function(x, z=y){
N <- x[1]
theta <- x[2]
exp(sum(dbinom(z, size=N, prob=theta, log=T)))/N
}
post <- matrix(apply(grid, 1, raftery.prob), nrow=length(N), ncol=length(theta),byrow=F)
post.norm <- post/sum(post)
Ich habe die Gitterannäherung verwendet, um diese Anzeige der posterioren Dichte zu erzeugen. Wir können sehen, dass der hintere bananenförmig ist; Diese Art von posterior kann für die euklidische metrische HMC problematisch sein. (Der Schweregrad der Bananenform wird hier tatsächlich unterdrückt, da auf der logarithmischen Skala liegt.) Wenn Sie eine Minute lang über die Bananenform nachdenken, werden Sie feststellen, dass sie auf der Linie . (Außerdem ist die in diesem Diagramm angezeigte Gitterannäherung aus Gründen der Übersichtlichkeit nicht normalisiert. Andernfalls ist die Banane etwas zu schmal, um sie deutlich zu erkennen.)ˉ y = θ N.
Ergebnisse der Gitterannäherung
do.call(cbind, lapply(c(0.025, .25, .5, .75, .975), function(quantile){
approx(y=N, x=cumsum(rowSums(post.norm))/sum(post.norm), xout=quantile)
}))
[,1] [,2] [,3] [,4] [,5]
x 0.025 0.25 0.5 0.75 0.975
y 92.55068 144.7091 226.7845 443.6359 2475.398
Diskussion
Das 97,5% -Quantil für ist in meinem Modell viel größer als für die Gitternäherung, aber seine Quantile ähneln ansonsten der Gitternäherung. Ich interpretiere dies als Hinweis darauf, dass die beiden Methoden im Allgemeinen übereinstimmen. Ich weiß jedoch nicht, wie ich die Diskrepanz im 97,5% -Quantil interpretieren soll.rstan
Ich habe mehrere mögliche Erklärungen dafür entwickelt, was die Divergenz zwischen der Gitterannäherung und den Ergebnissen der rstan
HMC-NUTS-Abtastung erklären könnte , aber ich bin mir nicht sicher, wie ich verstehen soll, ob eine, beide oder keine der beiden Erklärungen korrekt ist.
- Rstan ist falsch und das Gitter ist korrekt. Die bananenförmige Dichte ist problematisch
rstan
, insbesondere wenn in Richtung abdriftet , so dass diese Schwanzmengen nicht vertrauenswürdig sind. Wir können aus der Darstellung des Seitenzahns über dem Gitter sehen, dass der Schwanz bei größeren Werten sehr scharf ist .+ ∞ N. - Rstan ist korrekt und das Raster ist falsch. Das Raster macht zwei Annäherungen, die die Ergebnisse untergraben können. Erstens ist das Gitter nur eine endliche Menge von Punkten über einem Unterraum im hinteren Bereich, so dass es eine grobe Annäherung ist. Zweitens, weil es ein endlicher Teilraum ist, wir erklären fälschlicherweise dort 0 - posteriori - Wahrscheinlichkeit über Werte sein größer als unser größter Rasterwert für . Ebenso ist es besser, in die Schwänze des Gitters zu gelangen, so dass seine Schwanzquanitles korrekt sind.N.
rstan
Ich brauchte mehr Platz, um einen Punkt aus Juhos Antwort zu klären. Wenn ich das richtig verstehe, können wir aus dem Posterior integrieren, um die Beta-Binomialverteilung zu erhalten:
In unserem Fall ist und weil wir vor eine einheitliche Priorität haben . Ich glaube, dass der Posterior dann wobei weil . Dies scheint jedoch stark von Juhos Antwort abzuweichen. Wo bin ich falsch gelaufen?