Ist rstan oder meine Gitterannäherung falsch: Entscheidung zwischen widersprüchlichen Quantilschätzungen in der Bayes'schen Inferenz

8

Ich habe ein Modell, um Bayes'sche Schätzungen der Populationsgröße N und der Erkennungswahrscheinlichkeit θ in einer Binomialverteilung zu erhalten, die ausschließlich auf der beobachteten Anzahl beobachteter Objekte basieren y:

p(N,θ|y)Bin(y|N,θ)N
N y i y = 53 , 57 , 66 , 67 , 73{N|NZNmax(y)}×(0,1)Nyiy=53,57,66,67,73

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 thetaals 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.Nrstan

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.Ny¯=θN

posterior über einem Gitter

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.Nrstan

Ich habe mehrere mögliche Erklärungen dafür entwickelt, was die Divergenz zwischen der Gitterannäherung und den Ergebnissen der rstanHMC-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.

  1. 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.N+N
  2. 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.NNrstan

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: θ

p(y|N,α,β)=(Ny)Beta(y+α,Ny+β)Beta(α,β)

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?α=1β=1θp(N|y)N1i=1Kp(yi|N,α=1,β=1)K=#(y)p(N)=N1

Sycorax sagt Reinstate Monica
quelle

Antworten:

4

Cliffs: Rstan scheint (näher) korrekt zu sein, basierend auf einem Ansatz, der out analytisch integriert und in einem ziemlich großen Gitter bewertet .P ( N ) P ( y N )θP(N)P(yN)

Um den hinteren Teil von , ist es tatsächlich möglich, analytisch zu integrieren : wobei die Länge von . Da Beta vor (hier ) hat und Beta mit Binomial konjugiert ist, folgt auch einer Beta-Verteilung. Daher ist die Verteilung der ist Beta-binomischenNθ

P(yN)=P(y1N)×P(y2N,y1)×P(y3N,y1,y2)×P(yKN,y1,,yK1)
KyθBeta(1,1)y k + 1N , y 1 , , y k P ( y N )θN,y1,,ykyk+1N,y1,,ykfür die ein geschlossener Ausdruck der Wahrscheinlichkeiten in Bezug auf die Gammafunktion existiert. Daher können wir bewerten, indem wir die relevanten Parameter der Beta-Binomialzahlen berechnen und die Beta-Binomialwahrscheinlichkeiten multiplizieren. Der folgende MATLAB-Code verwendet diesen Ansatz, um für zu berechnen und zu normalisieren, um den posterioren zu erhalten. P(yN)P(N)P(y|N)N=72,,500000
%The data
y = [53 57 66 67 72];

%Initialize
maxN = 500000;
logp = zeros(1,maxN); %log prior + log likelihood
logp(1:71) = -inf; 

for N = 72:maxN
    %Prior
    logp(N) = -log(N);

    %y1 has uniform distribution
    logp(N) = logp(N) - log(N+1);    
    a = 1;
    b = 1;

    %Rest of the measurements 
    for j = 2:length(y);
        %Update beta parameters
        a = a + y(j-1);
        b = b + N - y(j-1);

        %Log predictive probability of y_j (see Wikipedia article)
        logp(N) = logp(N) + gammaln(N+1) - gammaln(y(j) + 1) - ... 
         gammaln(N - y(j) + 1) + gammaln(y(j) + a) +  ...
         gammaln(N - y(j) + b) - gammaln(N + a + b) ...
            + gammaln(a+b) - gammaln(a) - gammaln(b);

    end
end

%Get the posterior of N
pmf = exp(logp - max(logp));
pmf = pmf/sum(pmf);
cdf = cumsum(pmf);

%Evaluate quantiles of interest
disp(cdf(5000))  %0.9763
for percentile = [0.025 0.25 0.5 0.75 0.975]
    disp(find(cdf>=percentile,1,'first'))
end

Das cdf bei ist , also denke ich, ist genug, aber man könnte die Empfindlichkeit für die Erhöhung des Maximums untersuchen wollen . Das cdf bei ist nur so dass Ihr ursprüngliches Gitter tatsächlich eine ziemlich signifikante Schwanzwahrscheinlichkeitsmasse verfehlt, verglichen mit dem Ziel, das Quantil zu finden. Die Quantile, die ich erhalte, sind 0,9990 N N = 5000 0,9763 0,975 Quantile 0,025 0,25 0,5 0,75 0,975 N 95 149 235 478 4750N=1000000.9990maxN=500000NN=50000.97630.975

Quantile0.0250.250.50.750.975N951492354784750

Haftungsausschluss: Ich habe den Code nicht viel getestet, es können Fehler auftreten (und natürlich kann es auch bei diesem Ansatz zu numerischen Problemen kommen). Die erhaltenen Quantile liegen jedoch ziemlich nahe an den Rstan-Ergebnissen, daher bin ich ziemlich zuversichtlich.

Juho Kokkala
quelle
(+1) Danke für das Interesse! Ich nehme Ihr Stichwort und spiele mit diesen Ergebnissen in R und melde mich bei Ihnen.
Sycorax sagt Reinstate Monica
Könnten Sie bitte klarstellen, warum der hintere Teil der Beta-Binomialverteilung Ihr Ausdruck ist und nicht der, den ich am Ende meiner Frage hinzugefügt habe? Es scheint mir, dass der Posterior einfach das Produkt der Beta-Binomial-Wahrscheinlichkeit und des Prior sein sollte. Aber die Ergebnisse scheinen völlig falsch zu sein!
Sycorax sagt Reinstate Monica
1
Es ist wichtig, die Parameter der Beta-Distribution zu aktualisieren, wenn die ys verarbeitet werden, da alle ys das gleiche . Die Gleichung am Ende der Frage geht von einem separaten für jedes , was ein anderes Modell ist. θ yθθy
Tom Minka