Là gần đúng hoặc xấp xỉ lưới của tôi không chính xác: quyết định giữa các ước tính lượng tử mâu thuẫn trong suy luận Bayes


8

Tôi có một mô hình để đạt Bayesian ước tính quy mô dân số N và khả năng phát hiện θ trong một phân phối nhị thức chỉ dựa trên số lượng quan sát của các đối tượng quan sát y :

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

Mô hình này, khi được ước tính rstan, phân kỳ từ các kết quả thu được từ một xấp xỉ lưới của sau. Tôi đang cố gắng xác định tại sao. (Độc giả quan tâm có thể thấy rằng câu hỏi này là câu trả lời tiếp theo cho câu trả lời của tôi ở đây .)

rstan Xấp xỉ

Để tham khảo, đây là mã rstan.

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))

Lưu ý rằng tôi chọn thetalà 2-đơn giản. Đây chỉ là đơn giản. Số lượng lãi là theta[1]; rõ ràng theta[2]là thông tin thừa.

Ngoài ra, là một giá trị thực ( chỉ chấp nhận các tham số có giá trị thực vì nó là phương thức gradient), vì vậy tôi đã viết một phân phối nhị thức có giá trị thực.Nrstan

Kết quả Rct

            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

Xấp xỉ lưới

Các xấp xỉ lưới được sản xuất như dưới đây. Hạn chế về bộ nhớ ngăn tôi tạo lưới tốt hơn trên máy tính xách tay của mình.

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)

Tôi đã sử dụng xấp xỉ lưới để tạo ra màn hình hiển thị mật độ sau này. Chúng ta có thể thấy rằng phía sau có hình quả chuối; loại hậu thế này có thể gây rắc rối cho số liệu điện tử hạt nhân HMC. (Mức độ nghiêm trọng của hình dạng quả chuối thực sự bị triệt tiêu ở đây vì nằm trên thang đo log.) Nếu bạn nghĩ về hình dạng quả chuối trong một phút, bạn sẽ nhận ra rằng nó phải nằm trên dòng . (Ngoài ra, xấp xỉ lưới hiển thị trong biểu đồ này không được chuẩn hóa vì lý do rõ ràng - khác với chuối quá hẹp để có thể làm rõ.)ˉ y = θ NNy¯=θN

phía sau trên một lưới

Kết quả xấp xỉ lưới

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

Thảo luận

Định lượng 97,5% cho lớn hơn nhiều trong mô hình của tôi so với mô hình gần đúng lưới, nhưng lượng tử của nó tương tự như xấp xỉ lưới. Tôi giải thích điều này như chỉ ra rằng hai phương pháp nói chung là đồng thuận. Tuy nhiên, tôi không biết làm thế nào để giải thích sự khác biệt trong định lượng 97,5%.Nrstan

Tôi đã phát triển một số giải thích có thể cho những gì có thể giải thích cho sự khác biệt giữa xấp xỉ lưới và kết quả từ rstanlấy mẫu của HMC-NUTS, nhưng tôi không chắc làm thế nào để hiểu nếu một, cả hai hoặc không giải thích đều đúng.

  1. Rstan là sai và lưới là chính xác. Mật độ hình quả chuối là vấn đề đối với rstan, đặc biệt là khi trôi về phía , vì vậy những lượng đuôi này không đáng tin cậy. Chúng ta có thể thấy từ âm mưu của hậu thế trên lưới rằng đuôi rất sắc nét ở giá trị lớn hơn .+ NN+N
  2. Rstan là đúng và lưới là sai. Lưới làm cho hai xấp xỉ có thể làm suy yếu kết quả. Đầu tiên, lưới chỉ là một tập hợp hữu hạn các điểm trên một không gian con phía sau, vì vậy nó là một xấp xỉ thô. Thứ hai, bởi vì đó là một không gian con hữu hạn, chúng tôi khai man có là 0 xác suất hậu nghiệm trên các giá trị lớn hơn giá trị lưới lớn nhất của chúng tôi cho . Tương tự như vậy, tốt hơn là đi vào đuôi của lưới, do đó, phụ đề đuôi của nó là chính xác.NNNrstan

Tôi cần thêm không gian để làm rõ một điểm từ câu trả lời của Juho. Nếu tôi hiểu chính xác, chúng ta có thể tích hợp từ phía sau để có được phân phối nhị thức beta: θ

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

Trong trường hợp của chúng tôi, và vì chúng tôi có đồng phục trước . Tôi tin rằng sau đó sẽ là trong đó vì . Nhưng điều này dường như phân kỳ từ câu trả lời của Juho. Tôi đã đi sai ở đâu?α=1β=1θp(N|y)N1i=1Kp(yi|N,α=1,β=1)K=#(y)p(N)=N1

Câu trả lời:


4

Vách đá: Rstan dường như (gần hơn) chính xác dựa trên cách tiếp cận tích hợp ra phân tích và đánh giá trong một lưới khá lớn.θP(N)P(yN)

Để có được hậu thế của , thực tế có thể tích hợp ra một cách phân tích: trong đó là độ dài của . Bây giờ, vì có Beta trước (ở đây là ) và Beta được liên hợp thành nhị thức, cũng tuân theo phân phối Beta. Do đó, phân phối của là Beta-nhị thứcNθ

P(yN)=P(y1N)×P(y2N,y1)×P(y3N,y1,y2)×P(yKN,y1,,yK1)
KyθBeta(1,1)θN,y1,,ykyk+1N,y1,,yktrong đó biểu thức dạng đóng của xác suất tồn tại theo hàm Gamma. Do đó, chúng tôi có thể đánh giá bằng cách tính toán các tham số có liên quan của nhị thức Beta và nhân xác suất nhị phân Beta. Mã MATLAB sau đây sử dụng phương pháp này để tính cho và chuẩn hóa để có được hậu thế. 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

Cdf tại là , vì vậy tôi đoán là đủ, nhưng người ta có thể muốn điều tra độ nhạy để tăng tối đa . Cdf tại chỉ là do đó, lưới ban đầu của bạn thực sự bỏ lỡ khối lượng xác suất đuôi khá đáng kể so với mục tiêu tìm ra lượng tử . Các lượng tử tôi nhận được là N=1000000.9990maxN=500000NN=50000.97630.975

Quantile0.0250.250.50.750.975N951492354784750

Tuyên bố miễn trừ trách nhiệm: Tôi đã không kiểm tra mã nhiều, có thể có lỗi (và rõ ràng cũng có thể có vấn đề về số với cách tiếp cận này). Tuy nhiên, các lượng tử thu được khá gần với kết quả của Rstan, vì vậy tôi khá tự tin.


(+1) Cảm ơn bạn đã quan tâm! Tôi sẽ lấy gợi ý của bạn và chơi với những kết quả này trong R và lấy lại cho bạn.
Sycorax nói phục hồi Monica

Bạn có thể vui lòng làm rõ lý do tại sao phần sau của phân phối nhị thức beta là biểu thức của bạn, chứ không phải là phần tôi đã thêm vào cuối câu hỏi của tôi không? Dường như với tôi rằng hậu thế chỉ đơn giản là sản phẩm của khả năng nhị phân beta và trước đó. Nhưng kết quả có vẻ khá sai!
Sycorax nói phục hồi Monica

1
Điều quan trọng là phải cập nhật các tham số của bản phân phối Beta khi y được xử lý, vì tất cả các y đều có chung . Phương trình ở cuối câu hỏi giả sử một riêng cho mỗi , là một mô hình khác nhau. θθy
Tom Minka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.