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