Làm thế nào tôi có thể tính toán ước tính mật độ sau từ trước và khả năng?


9

Tôi đang cố gắng hiểu cách sử dụng định lý Bayes để tính toán một hậu thế nhưng đang bị mắc kẹt với cách tiếp cận tính toán, ví dụ, trong trường hợp sau đây, tôi không rõ cách lấy sản phẩm của ưu tiên và khả năng sau đó tính toán sau:

Trong ví dụ này, tôi quan tâm đến việc tính xác suất sau của và tôi sử dụng tiêu chuẩn bình thường trước , nhưng tôi muốn biết làm thế nào để tính toán hậu thế từ trước đó trên được đại diện bởi chuỗi MCMC, vì vậy tôi sẽ sử dụng 1000 mẫu làm điểm bắt đầu.μ p ( μ ) ~ N ( μ = 0 , σ = 1 ) μμμ p(μ)N(μ=0,σ=1)μ

  • mẫu 1000 từ trước.

    set.seed(0)
    prior.mu      <- 0
    prior.sigma   <- 1
    prior.samples <- sort(rnorm(1000, prior.mu, prior.sigma))
    
  • thực hiện một số quan sát:

    observations <- c(0.4, 0.5, 0.8, 0.1)
    
  • và tính toán khả năng, ví dụ :p(y|μ,σ)

    likelihood <- prod(dnorm(observations, mean(prior.samplse), sd(prior.samples)))
    

điều tôi không hiểu lắm là:

  1. khi nào / làm thế nào để nhân lên trước với khả năng?
  2. khi nào / làm thế nào để bình thường hóa mật độ sau?

xin lưu ý: Tôi quan tâm đến giải pháp tính toán chung có thể là các vấn đề khái quát mà không có giải pháp phân tích


1
Không rõ những gì các bản phân phối khác nhau trong ví dụ của bạn. Vui lòng làm rõ phân phối trước / có điều kiện của bạn là gì. Bởi vì nó có thể là bạn có một số thuật ngữ trộn lẫn.
Nick Sabbe

@Nick bạn đúng. Cảm ơn bạn đã phản hồi. Tôi đã cố gắng làm rõ.
Abe

Câu trả lời:


8

Bạn có một vài thứ lẫn lộn. Lý thuyết nói về việc nhân phân phối trước và khả năng, không phải mẫu từ phân phối trước. Ngoài ra, không rõ những gì bạn có trước, đây có phải là trước về ý nghĩa của một cái gì đó? hay cái gì khác?

Sau đó, bạn có những thứ đảo ngược trong khả năng, các quan sát của bạn nên là x với các lần rút trước hoặc các hằng số cố định đã biết là độ lệch trung bình và độ lệch chuẩn. Và thậm chí sau đó nó thực sự sẽ là sản phẩm của 4 cuộc gọi đến dnorm với mỗi quan sát của bạn là x và cùng độ lệch trung bình và độ lệch chuẩn.

Điều thực sự không rõ ràng là những gì bạn đang cố gắng làm. Câu hỏi của bạn là gì? Những thông số nào bạn quan tâm? bạn có những thông tin gì trước đây? Có thông số nào khác không? Bạn có linh mục hoặc giá trị cố định cho những người?

Cố gắng đi về mọi thứ theo cách bạn hiện tại sẽ chỉ khiến bạn bối rối hơn cho đến khi bạn tìm ra chính xác câu hỏi của bạn là gì và làm việc từ đó.

Dưới đây được thêm vào sau khi chỉnh sửa câu hỏi ban đầu.

Bạn vẫn còn thiếu một số phần, và có thể không hiểu tất cả mọi thứ, nhưng chúng tôi có thể bắt đầu từ nơi bạn đang ở.

Tôi nghĩ rằng bạn đang nhầm lẫn một vài khái niệm. Có khả năng cho thấy mối quan hệ giữa dữ liệu và tham số, bạn đang sử dụng bình thường có 2 tham số, giá trị trung bình và độ lệch chuẩn (hoặc phương sai hoặc độ chính xác). Sau đó, có các phân phối trước trên các tham số, bạn đã chỉ định mức bình thường trước với giá trị trung bình 0 và sd 1, nhưng độ lệch trung bình và độ lệch chuẩn hoàn toàn khác với độ lệch trung bình và độ lệch chuẩn của khả năng. Để hoàn thành, bạn cần biết khả năng SD hoặc đặt ưu tiên cho khả năng SD, vì đơn giản (nhưng ít thực tế hơn) tôi sẽ cho rằng chúng ta biết khả năng SD là (không có lý do chính đáng nào khác ngoài hoạt động và khác với 1).12

Vì vậy, chúng tôi có thể bắt đầu tương tự như những gì bạn đã làm và tạo ra từ trước:

> obs <- c(0.4, 0.5, 0.8, 0.1)
> pri <- rnorm(10000, 0, 1)

Bây giờ chúng ta cần tính toán khả năng, điều này dựa trên các lần rút trước về giá trị trung bình, khả năng với dữ liệu và giá trị đã biết của SD. Hàm dnorm sẽ cho chúng ta khả năng của một điểm duy nhất, nhưng chúng ta cần nhân các giá trị với nhau cho mỗi quan sát, đây là một hàm để làm điều đó:

> likfun <- function(theta) {
+ sapply( theta, function(t) prod( dnorm(obs, t, 0.5) ) )
+ }

Bây giờ chúng ta có thể tính khả năng cho mỗi lần rút từ giá trị trung bình trước

> tmp <- likfun(pri)

Bây giờ để có được kết quả sau, chúng ta cần thực hiện một kiểu rút thăm mới, một cách tiếp cận tương tự như lấy mẫu từ chối là lấy mẫu từ lần rút trung bình trước tỷ lệ thuận với khả năng của mỗi lần rút trước (đây là cách gần nhất với bước nhân của bạn hỏi về):

> post <- sample( pri, 100000, replace=TRUE, prob=tmp )

Bây giờ chúng ta có thể nhìn vào kết quả bốc thăm sau:

> mean(post)
[1] 0.4205842
> sd(post)
[1] 0.2421079
> 
> hist(post)
> abline(v=mean(post), col='green')

và so sánh các kết quả trên với các giá trị dạng đóng từ lý thuyết

> (1/1^2*mean(pri) + length(obs)/0.5^2 * mean(obs))/( 1/1^2 + length(obs)/0.5^2 )
[1] 0.4233263
> sqrt(1/(1+4*4))
[1] 0.2425356

Không phải là một xấp xỉ xấu, nhưng có lẽ sẽ hoạt động tốt hơn khi sử dụng một công cụ McMC tích hợp để vẽ từ phía sau. Hầu hết các công cụ này lấy mẫu một điểm tại một thời điểm không theo đợt như trên.

Thực tế hơn, chúng ta sẽ không biết SD về khả năng và cũng sẽ cần ưu tiên cho điều đó (thường thì ưu tiên của phương sai là hoặc gamma), nhưng sau đó việc tính toán sẽ phức tạp hơn (McMC có ích ) và không có hình thức đóng để so sánh với.χ2

Giải pháp chung là sử dụng các công cụ hiện có để thực hiện các tính toán McMC như WinBugs hoặc OpenBugs (BRugs in R cung cấp giao diện giữa R và Bugs) hoặc các gói như LearnBayes trong R.


Cảm ơn bạn đã giúp tôi làm rõ điều này hơn một chút. Tôi đã cập nhật câu trả lời của mình, mặc dù tôi vẫn chưa rõ ràng. Câu hỏi của tôi là 'ước tính tốt nhất của được đưa ra trước và dữ liệu là gì?'; không có thông số nào khác μ
Abe

cảm ơn bạn đã phá vỡ điều này cho tôi; Tôi đã có một thời gian khó khăn nhưng điều này giúp.
Abe
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.