Đây là câu hỏi của người mới bắt đầu về một bài tập trong Tính toán Bayesian của Jim Albert với Rợi. Lưu ý rằng mặc dù đây có thể là bài tập về nhà, nhưng trong trường hợp của tôi thì không, vì tôi đang học các phương pháp Bayes trong R vì tôi nghĩ rằng tôi có thể sử dụng nó trong các phân tích trong tương lai của mình.
Dù sao, trong khi đây là một câu hỏi cụ thể, nó có thể liên quan đến sự hiểu biết cơ bản về các phương pháp Bayes.
Vì vậy, trong bài tập 2.2, Jim Albert yêu cầu chúng tôi phân tích thí nghiệm ném penny. Xem ở đây. Chúng ta phải sử dụng biểu đồ trước, nghĩa là chia không gian của các p
giá trị có thể thành 10 khoảng thời gian .1
và gán xác suất trước cho các giá trị này.
Vì tôi biết rằng xác suất thực sự sẽ là như vậy .5
, và tôi nghĩ rất khó có khả năng vũ trụ đã thay đổi quy luật xác suất hoặc đồng xu bị gồ ghề, các linh mục của tôi là:
prior <- c(1,5,20,100,5000,5000,100,20,5,1)
prior <- prior/sum(prior)
dọc theo các điểm giữa
midpt <- seq(0.05, 0.95, by=0.1)
Càng xa càng tốt. Tiếp theo, chúng tôi quay đồng xu 20 lần và ghi lại số lần thành công (đầu) và thất bại (đuôi). Dễ dàng thực hiện:
y <- rbinom(n=20,p=.5,size=1)
s <- sum(y==1)
f <- sum(y==0)
Trong sự mở rộng của tôi, s == 7
và f == 13
. Tiếp đến là phần mà tôi không hiểu:
Mô phỏng từ phân phối sau bằng cách (1) tính mật độ sau của p trên lưới các giá trị trên (0,1) và (2) lấy một mẫu mô phỏng thay thế từ lưới. (Hàm
histprior
vàsample
rất hữu ích trong tính toán này). Làm thế nào có xác suất khoảng thời gian thay đổi trên cơ sở dữ liệu của bạn?
Đây là cách nó được thực hiện:
p <- seq(0,1, length=500)
post <- histprior(p,midpt,prior) * dbeta(p,s+1,f+1)
post <- post/sum(post)
ps <- sample(p, replace=TRUE, prob = post)
Nhưng tại sao chúng ta làm điều đó ?
Chúng ta có thể dễ dàng có được mật độ sau bằng cách nhân số trước với khả năng thích hợp, như được thực hiện trong dòng hai của khối trên. Đây là một âm mưu của phân phối sau:
Khi phân phối sau được sắp xếp, chúng ta có thể thu được kết quả cho các khoảng thời gian được giới thiệu trong biểu đồ trước bằng cách tóm tắt các yếu tố của mật độ sau:
post.vector <- vector()
post.vector[1] <- sum(post[p < 0.1])
post.vector[2] <- sum(post[p > 0.1 & p <= 0.2])
post.vector[3] <- sum(post[p > 0.2 & p <= 0.3])
post.vector[4] <- sum(post[p > 0.3 & p <= 0.4])
post.vector[5] <- sum(post[p > 0.4 & p <= 0.5])
post.vector[6] <- sum(post[p > 0.5 & p <= 0.6])
post.vector[7] <- sum(post[p > 0.6 & p <= 0.7])
post.vector[8] <- sum(post[p > 0.7 & p <= 0.8])
post.vector[9] <- sum(post[p > 0.8 & p <= 0.9])
post.vector[10] <- sum(post[p > 0.9 & p <= 1])
(Các chuyên gia R có thể tìm ra cách tốt hơn để tạo ra vectơ đó. Tôi đoán nó có thể có liên quan gì sweep
?)
round(cbind(midpt,prior,post.vector),3)
midpt prior post.vector
[1,] 0.05 0.000 0.000
[2,] 0.15 0.000 0.000
[3,] 0.25 0.002 0.003
[4,] 0.35 0.010 0.022
[5,] 0.45 0.488 0.737
[6,] 0.55 0.488 0.238
[7,] 0.65 0.010 0.001
[8,] 0.75 0.002 0.000
[9,] 0.85 0.000 0.000
[10,] 0.95 0.000 0.000
Hơn nữa, chúng tôi có 500 trận hòa từ phân phối sau cho chúng tôi không có gì khác nhau. Dưới đây là một âm mưu về mật độ của các bản vẽ mô phỏng:
Bây giờ chúng tôi sử dụng dữ liệu mô phỏng để có được xác suất cho các khoảng thời gian của chúng tôi bằng cách tính tỷ lệ mô phỏng trong khoảng:
sim.vector <- vector()
sim.vector[1] <- length(ps[ps < 0.1])/length(ps)
sim.vector[2] <- length(ps[ps > 0.1 & ps <= 0.2])/length(ps)
sim.vector[3] <- length(ps[ps > 0.2 & ps <= 0.3])/length(ps)
sim.vector[4] <- length(ps[ps > 0.3 & ps <= 0.4])/length(ps)
sim.vector[5] <- length(ps[ps > 0.4 & ps <= 0.5])/length(ps)
sim.vector[6] <- length(ps[ps > 0.5 & ps <= 0.6])/length(ps)
sim.vector[7] <- length(ps[ps > 0.6 & ps <= 0.7])/length(ps)
sim.vector[8] <- length(ps[ps > 0.7 & ps <= 0.8])/length(ps)
sim.vector[9] <- length(ps[ps > 0.8 & ps <= 0.9])/length(ps)
sim.vector[10] <- length(ps[ps > 0.9 & ps <= 1])/length(ps)
(Một lần nữa: Có cách nào hiệu quả hơn để làm việc này không?)
Tóm tắt kết quả:
round(cbind(midpt,prior,post.vector,sim.vector),3)
midpt prior post.vector sim.vector
[1,] 0.05 0.000 0.000 0.000
[2,] 0.15 0.000 0.000 0.000
[3,] 0.25 0.002 0.003 0.000
[4,] 0.35 0.010 0.022 0.026
[5,] 0.45 0.488 0.737 0.738
[6,] 0.55 0.488 0.238 0.236
[7,] 0.65 0.010 0.001 0.000
[8,] 0.75 0.002 0.000 0.000
[9,] 0.85 0.000 0.000 0.000
[10,] 0.95 0.000 0.000 0.000
Không có gì ngạc nhiên khi mô phỏng không tạo ra kết quả nào khác ngoài hậu thế, dựa trên đó. Vì vậy, tại sao chúng ta đã vẽ những mô phỏng đó ở nơi đầu tiên ?
ps <- sample(p, replace=TRUE, prob = post)
! Tôi có đúng không khi cho rằng điều này sẽ thay đổi đối với các kỹ thuật mô phỏng tiên tiến hơn?