Синтаксис кода при расчете апостериорного распределения в WinBUGS - PullRequest
1 голос
/ 27 июня 2019

Недавно я прочитал "Книга ошибок - практическое введение в байесовский анализ" для изучения WinBUGS. То, как WinBUGS описывает происхождение апостериорного распределения, приводит меня в замешательство.

Давайте рассмотрим пример 4.1.1 из этой книги, чтобы проиллюстрировать:

Предположим, мы наблюдаем число смертей у в данной больнице за операция высокого риска. Пусть n обозначает общее количество таких выполненные операции и предположим, что мы хотим сделать выводы относительно базовый уровень смертности, $ \ theta $.

Код WinBUGS:

y <- 10  # the number of deaths
n <- 100 # the total number of such operations
#########################
y ~ dbin(theta,n)             # likelihood, also a parametric sampling distribution
logit(theta) <- logit.theta   # normal prior for the logistic transform of theta
logit.theta ~ dnorm(0,0.368)  # precision = 1/2.71

Автор сказал, что:

Программное обеспечение знает, как получить апостериорное распределение и впоследствии образец из него.

Мой вопрос :

Какой код отражает логическую структуру, чтобы сообщить WinBUGS о «каком параметре я хочу вычислить его апостериорное распределение»?

Этот вопрос кажется глупым, но если я сначала не читаю фон, я действительно не могу найти непосредственно в приведенном выше коде, на котором сосредоточен параметр (например, тета или y?).

Ниже приведены некоторые мои мысли (как новичка в WinBUGS):

Я думаю, что следующие три атрибута стиля кода в WinBUGS меня смущают:

(1) код не следует за «определенной последовательностью». Например, почему logit.theta ~ dnorm(0,0.368) не перед logit(theta) <- logit.theta?

(2) повторяемая переменная. Например, почему две последние строки не были сведены в одну строку: logit(theta) ~ dnorm(0,0.368)?

(3) переменные определены более чем в одном месте. Например, y определяется два раза: y <- 10 и y ~ dbin (theta, n). Это было объяснено в Приложении A книги (то есть, <code>However, a check has been built in so that when finding a logical node that also features as a stochastic node, a stochastic node is created with the calculated values as fixed data), но я все еще не могу уловить его значение.

1 Ответ

0 голосов
/ 27 июня 2019
  1. ОШИБКИ - это декларативный язык.В большинстве случаев операторы не выполняются последовательно, они определяют разные части модели.BUGS работает с моделями, которые могут быть представлены ориентированными ациклическими графами, т. Е. Теми, в которых вы ставите априор для некоторых компонентов, а затем условные распределения для других компонентов с учетом более ранних.

  2. Это довольнопростой язык, поэтому я думаю, что logit(theta) ~ dnorm(0, 0.368) слишком сложен для него.

  3. Язык позволяет вам определять сложную модель вероятности и объявлять в ней наблюдения определенных компонентов.Как только вы объявляете наблюдение, модель, из которой БАГСы выбирают, является исходной полной моделью, обусловленной этим наблюдением.y <- 10 определяет наблюдаемые данные.y ~ dbin(theta,n) является частью модели.
    Утверждение n <- 100 может быть любым: для фиксированных констант, таких как n, не имеет значения, как вы к этому относитесь.Либо модель говорит, что n всегда равно 100, либо n имеет необъявленное предварительное распределение, не зависящее от какого-либо другого параметра, и наблюдаемое значение 100. Эти два утверждения эквивалентны.

Наконец, ваш главный вопрос: Ничего в приведенном выше коде говорит, какой параметр вы хотите посмотреть.BUGS вычислит совместное апостериорное распределение каждого параметра.n и y примут свои фиксированные значения, theta и logit.theta будут смоделированы сзади.В другой части вашего кода (или с помощью меню WinBUGS) вы можете решить, на какой из них смотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...