Tôi có một mô hình để đạt Bayesian ước tính quy mô dân số 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 :
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 theta
là 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.rstan
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 = θ N
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%.rstan
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ừ rstan
lấ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.
- 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 .+ ∞ N - 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.N
rstan
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:
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?