Иерархические данные в JAGS - PullRequest
       52

Иерархические данные в JAGS

0 голосов
/ 07 сентября 2018

Я пытаюсь смоделировать набор данных путем подбора иерархической модели. Я делаю это с помощью кода Jags ниже:

NORM_errors2 <-'model{     # model specifiction
  for (i in 1:length(obsval)){ 
    obsval[i] ~ dnorm(val[i],pow(err[i],-2))
    val[i] ~ dnorm(cent[I[i]],pow(sig[I[i]],-2))
    I[i] ~ dcat(p[])
  }

  sig[1] ~ dunif(0,2)
  sig[2] ~ dunif(0,2) 
  cent[1] ~ dunif(1,5) 
  cent[2] ~ dunif(cent[1],5) 
  p[1] ~ dunif(0,1)
  p[2] <-1-p[1]
}

Вызывается со следующим кодом R:

NORM_fit <- jags(data = AS_data,
             parameters = params0,
             model = textConnection(NORM_errors2),
             n.chains = 3,
             n.iter = 100000,
             n.thin = 10,
             n.burnin = 30000
)

где:

AS_data <- list(
  obsval = dens,
  err = err,
  N = 26
)

и:

dens <- c(2.12, 2.71, 3.44, 2.76, 2.72, 0.96, 2, 3.26, 2.5, 1.2, 1.62, 
  1.96, 2.6, 1.3, 2.67, 4.4, 1.8, 4.9, 2.39, 1.62, 1.47, 0.89, 
  2.52, 1.21, 0.9, 0.8
)
err <- c(0.04, 0.11, 0.12, 1.2, 0.12, 0.3, 0.6, 0.6, 0.3, 0.4, 0.3, 
  0.34, 0.5, 0.2, 0.03, 2.1, 0.8, 3.9, 0.9, 1.05, 0.95, 0.13, 0.3, 
  0.25, 0.1, 0.15
)

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

Моя проблема в том, что полученные результаты возвращают ненулевые вероятности до значений ниже 1. Из контекста проблемы это не может быть правдой. Мой вопрос заключается в том, как заставить Джагса реализовать это ограничение, чтобы я мог получить более разумную модель и при этом сохранять достоверные интервалы и точечные оценки.

Спасибо за любую помощь заранее:)

...