JAGS: Почему моя байесовская модель не сходится? - PullRequest
0 голосов
/ 09 марта 2020

Я работаю над байесовской моделью и наткнулся на некоторые проблемы сходимости. Я уверен, что я делаю глупую ошибку, так как у меня мало формальных знаний по математике. Тем не менее, я не могу определить проблему, поэтому я не могу ее решить.

По сути, я проверяю правильность модели, применяя ее к моделируемым данным, поэтому я могу сравнить с «истинными» значениями, прежде чем использовать фактические данные. Моя модель была разработана для применения в экспериментах по психофизике. В основном, субъекты представлены серией из четырех физических свойств (названных x1, x2, x3, x4). Затем они производят ответ, который объединяет такие свойства. Однако в этой комбинации они придают больший вес некоторым свойствам (например, A), чем другим. Модель должна принимать ответы от всей выборки участников (один ответ от участника) и оценивать четыре коэффициента, которые взвешивают четыре наблюдения (Psi1, Psi2, Psi3 и Psi4). Чтобы убедиться, что вы меня понимаете, это программа, которая моделирует данные в R:

set.seed(40) #This makes the example reproducible...
psi <- runif(4, 0, 1) #This creates a random set of 4 coefficients between 0 and 1.
x <- c(20, 4, 2, 10) #Vector with the 4 physical properties to be learned
combinedX <-   ((psi[1]*x[1])/((psi[1]*x[1])+(psi[2]*x[2]))) - ((psi[3]*x[3])/((psi[3]*x[3])+(psi[4]*x[4]))) 
#This combination rule is a weighted version of Cramer's Phi coefficient of association. Each property x (x[1], x[2], x[3], x[4]) is multiplied by the corresponding coefficient stored in the vector psi.

n <- 50 #I want to simulate 50 data
data <- rnorm(n, combinedX, 0.1) #And they are obtained from a normal distribution with mean combinedX.

Теперь я хочу представить эти смоделированные данные в байесовскую модель в JAGS, которая должна взять вектор данных, и вывести оценка четырех коэффициентов.

model{
  psi1 ~ dbeta(1,1)
  psi2 ~ dbeta(1,1)
  psi3 ~ dbeta(1,1)
  psi4 ~ dbeta(1,1)
  predx <- ((psi1*x[1])/ ((psi1*x[1])+(psi2*x[2]))) - ((psi3*x[3])/((psi3*x[3])+(psi4*x[4])))
  sigma <- exp(log_sigma)
  log_sigma ~dunif(-10, 10)

  for(i in 1:n){
    data[i] ~ dnorm(predx, sigma)
  }
}

Итак, в основном, модель предполагает, что данные поступают только из нормального распределения со средним «predx», которое получается путем объединения четырех X и четырех псис.

Хорошо. Когда я запускаю эту модель, я в большинстве случаев получаю бессмысленные результаты и часто выявляю проблемы сходимости: чрезвычайно плоские постериалы (максимальная неопределенность) или оценки, сильно отличающиеся от фактических значений ... Иногда мои цепочки не смешиваются должным образом.

Я подозреваю две причины такого поведения:

-Автокорреляция. Но как ее решить?

-Проблема плохо определена: у нас слишком много свободных параметров (4), чтобы их можно было оценить по данным.

Есть идеи о том, что делать с эта модель?

...