Як я можу обчислити оцінку задньої щільності за попередньою та ймовірною?


9

Я намагаюся зрозуміти, як використовувати теорему Байєса для обчислення задніх, але я застрягаю з обчислювальним підходом, наприклад, у наступному випадку мені незрозуміло, як взяти добуток попереднього та ймовірного, а потім обчислити задній:

У цьому прикладі мені цікаво обчислити задню ймовірність і я використовую стандартний звичайний до , але я хочу знати як обчислити заднє від попереднього що представлене ланцюгом MCMC, тому я буду використовувати вихідні зразки 1000.μμ p(μ)N(μ=0,σ=1)μ

  • зразок 1000 від попереднього.

    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 ви маєте рацію. дякую за відгуки Я намагався уточнити.
Абе

Відповіді:


8

У вас кілька змішаних речей. Теорія говорить про множення попереднього розподілу та ймовірності, а не вибірки з попереднього розподілу. Також не ясно, що у вас є пріоритет, це пріоритет середнього значення? чи щось інше?

Тоді у вас все зміниться, ймовірно, ваші спостереження повинні бути 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.


Дякую, що допомогли мені трохи прояснити це. Я оновив свою відповідь, хоча мені все ще не зрозуміло. Моє запитання: «яка найкраща оцінкаμз урахуванням попереднього та даних? '; інших параметрів немає.
Абе

дякую, що ви зламали це для мене; У мене було важкий час, але це допомагає.
Абе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.