ฉันจะคำนวณการประมาณความหนาแน่นหลังจากก่อนและโอกาสได้อย่างไร


9

ฉันพยายามที่จะเข้าใจวิธีการใช้ทฤษฎีบทของเบย์ในการคำนวณหลัง แต่กำลังติดอยู่กับวิธีการคำนวณเช่นในกรณีต่อไปนี้มันไม่ชัดเจนสำหรับฉันที่จะใช้ผลิตภัณฑ์ของความน่าจะเป็นก่อนและจากนั้นคำนวณ หลัง:

สำหรับตัวอย่างนี้ฉันสนใจในการคำนวณความน่าจะเป็นหลังของและฉันใช้มาตรฐานปกติก่อนหน้านี้ในแต่ฉันอยากรู้ วิธีการคำนวณหลังจากก่อนหน้านี้ที่แสดงโดยห่วงโซ่ MCMC ดังนั้นฉันจะใช้ 1,000 ตัวอย่างเป็นจุดเริ่มต้นของฉันμμ p(μ)N(μ=0,σ=1)μ

  • ตัวอย่าง 1,000 จากก่อนหน้า

    set.seed(0)
    prior.mu      <- 0
    prior.sigma   <- 1
    prior.samples <- sort(rnorm(1000, prior.mu, prior.sigma))
    
  • ทำการสังเกตบางอย่าง:

    observations <- c(0.4, 0.5, 0.8, 0.1)
    
  • และคำนวณความน่าจะเป็นเช่น :p(y|μ,σ)

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

สิ่งที่ฉันไม่ค่อยเข้าใจคือ:

  1. เมื่อใด / วิธีการคูณก่อนโดยโอกาส?
  2. เมื่อ / วิธีการปกติความหนาแน่นหลัง?

โปรดทราบ: ฉันสนใจโซลูชันการคำนวณทั่วไปที่อาจเป็นปัญหาที่สามารถสรุปได้ทั่วไปโดยไม่มีวิธีการวิเคราะห์


1
ยังไม่ชัดเจนว่าการกระจายตัวแบบต่าง ๆ ของคุณนั้นเป็นอย่างไร โปรดชี้แจงว่าการกระจายก่อนหน้า / เงื่อนไขของคุณคืออะไร เพราะอาจเป็นไปได้ว่าคุณมีคำศัพท์บางคำปะปนกัน
Nick Sabbe

@Nick คุณถูกต้อง ขอบคุณสำหรับข้อเสนอแนะ ฉันพยายามชี้แจง
Abe

คำตอบ:


8

คุณมีหลายสิ่งหลายอย่างปะปนกัน ทฤษฎีพูดคุยเกี่ยวกับการคูณการแจกแจงก่อนหน้าและความน่าจะเป็นไม่ใช่ตัวอย่างจากการแจกแจงก่อนหน้า ยังไม่ชัดเจนว่าคุณมีมาก่อนหรือไม่นี่เป็นสิ่งที่ขึ้นอยู่กับค่าเฉลี่ยของบางสิ่งหรือไม่? หรืออย่างอื่น?

จากนั้นคุณมีสิ่งที่ตรงกันข้ามในความเป็นไปได้การสังเกตของคุณควรเป็น x ด้วยการดึงก่อนหรือค่าคงที่ที่รู้จักกันว่าเป็นค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน และถึงอย่างนั้นมันก็จะเป็นผลมาจากการเรียก 4 ครั้งเพื่อบอกเลิกกับการสังเกตแต่ละครั้งของคุณว่าเป็น x และค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานเดียวกัน

สิ่งที่ไม่ชัดเจนจริงๆคือสิ่งที่คุณพยายามทำ คำถามของคุณคืออะไร? คุณสนใจพารามิเตอร์ใด คุณมีพารามิเตอร์ใดก่อนหน้านี้ มีพารามิเตอร์อื่น ๆ อีกไหม? คุณมีนักบวชหรือค่าคงที่สำหรับสิ่งเหล่านั้นหรือไม่?

การพยายามทำสิ่งต่าง ๆ ในแบบที่คุณเป็นอยู่ในปัจจุบันจะทำให้คุณสับสนมากขึ้นเรื่อย ๆ จนกว่าคุณจะรู้ว่าคำถามของคุณคืออะไรและทำงานจากที่นั่น

ด้านล่างนี้จะถูกเพิ่มหลังจากการแก้ไขคำถามเดิม

คุณยังขาดบางชิ้นส่วนและอาจไม่เข้าใจทุกอย่าง แต่เราสามารถเริ่มจากที่ที่คุณอยู่

ฉันคิดว่าคุณกำลังสับสนแนวคิดบางอย่าง มีความเป็นไปได้ที่จะแสดงความสัมพันธ์ระหว่างข้อมูลและพารามิเตอร์คุณกำลังใช้งานปกติซึ่งมี 2 พารามิเตอร์คือค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน (หรือความแปรปรวนหรือความแม่นยำ) จากนั้นก็มีการแจกแจงก่อนหน้าของพารามิเตอร์คุณได้ระบุค่าปกติก่อนด้วยค่าเฉลี่ย 0 และ sd 1 แต่ค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานนั้นแตกต่างจากค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานของความน่าจะเป็น เพื่อให้สมบูรณ์คุณต้องรู้ SD โอกาสหรือวางไว้ก่อนหน้า SD โอกาสเพื่อความง่าย (แต่จริงน้อยกว่า) ฉันจะถือว่าเรารู้ว่าโอกาส SD คือ (ไม่มีเหตุผลที่ดีกว่ามันทำงานและแตกต่างจาก 1)12

ดังนั้นเราสามารถเริ่มคล้ายกับสิ่งที่คุณทำและสร้างจากก่อนหน้านี้:

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

ตอนนี้เราจำเป็นต้องคำนวณความน่าจะเป็นนี้ขึ้นอยู่กับการดึงค่าเฉลี่ยก่อนหน้าความน่าจะเป็นกับข้อมูลและค่าที่เป็นที่รู้จักของ SD ฟังก์ชัน dnorm จะให้โอกาสเราในจุดเดียว แต่เราต้องคูณค่าสำหรับการสังเกตแต่ละครั้งด้วยกันนี่คือฟังก์ชันที่จะทำเช่นนั้น:

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

ตอนนี้เราสามารถคำนวณความน่าจะเป็นสำหรับการวาดแต่ละครั้งจากก่อนหน้าสำหรับค่าเฉลี่ย

> tmp <- likfun(pri)

ทีนี้เพื่อให้ได้หลังเราต้องทำการวาดรูปแบบใหม่วิธีหนึ่งที่คล้ายกับการสุ่มตัวอย่างการปฏิเสธคือการสุ่มตัวอย่างจากการดึงค่าเฉลี่ยก่อนหน้าตามสัดส่วนกับความน่าจะเป็นสำหรับการวาดแต่ละครั้งก่อนหน้า ถามเกี่ยวกับ):

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

ตอนนี้เราสามารถดูผลลัพธ์ของการดึงหลัง:

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

และเปรียบเทียบผลลัพธ์ข้างต้นกับค่ารูปแบบปิดจากทฤษฎี

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

ไม่ใช่การประมาณที่ไม่ดี แต่มันน่าจะดีกว่าถ้าใช้เครื่องมือ McMC ในตัวเพื่อดึงออกมาจากด้านหลัง เครื่องมือเหล่านี้ส่วนใหญ่สุ่มตัวอย่างหนึ่งจุดในเวลาที่ไม่อยู่ในชุดเช่นด้านบน

ยิ่งกว่าความเป็นจริงเราจะไม่รู้จัก SD ของความน่าจะเป็นและจะต้องมีความต้องการก่อนหน้าเช่นกัน (บ่อยครั้งที่ความแปรปรวนก่อนหน้าคือหรือแกมม่า) แต่จากนั้นมันก็ซับซ้อนกว่าในการคำนวณ ) และไม่มีรูปแบบปิดเพื่อเปรียบเทียบกับχ2

วิธีแก้ปัญหาทั่วไปคือการใช้เครื่องมือที่มีอยู่สำหรับทำการคำนวณ McMC เช่น WinBugs หรือ OpenBugs (BRugs ใน R ให้ส่วนต่อประสานระหว่าง R และ Bugs) หรือแพ็คเกจ LearnBayes ใน R


ขอขอบคุณที่ช่วยฉันชี้แจงเพิ่มเติมเล็กน้อย ฉันได้อัปเดตคำตอบแล้วแม้ว่าฉันจะยังไม่ชัดเจนก็ตาม คำถามของฉันคือ 'การประมาณการที่ดีที่สุดของเมื่อก่อนและข้อมูลคืออะไร'; ไม่มีพารามิเตอร์อื่น ๆ μ
Abe

ขอบคุณที่ทำลายมันให้ฉัน ฉันมีช่วงเวลาที่ยากลำบาก แต่สิ่งนี้ช่วยได้
Abe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.