У вас кілька змішаних речей. Теорія говорить про множення попереднього розподілу та ймовірності, а не вибірки з попереднього розподілу. Також не ясно, що у вас є пріоритет, це пріоритет середнього значення? чи щось інше?
Тоді у вас все зміниться, ймовірно, ваші спостереження повинні бути x із попередніми нічиями або відомими фіксованими константами як середніми та стандартними відхиленнями. І навіть тоді це було б дійсно добутком чотирьох дзвінків до dnorm з кожним вашим спостереженням як 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 ймовірності, і для цього також знадобився би попередній (часто попередження щодо дисперсії - або гама), але тоді обчислити це складніше (McMC стане у нагоді ) і немає закритої форми для порівняння.χ2
Загальне рішення полягає у використанні існуючих інструментів для обчислення McMC, таких як WinBugs або OpenBugs (BRugs в R дає інтерфейс між R і Bugs) або пакетів таких LearnBayes в R.