Я пытаюсь смоделировать набор данных путем подбора иерархической модели. Я делаю это с помощью кода 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. Из контекста проблемы это не может быть правдой. Мой вопрос заключается в том, как заставить Джагса реализовать это ограничение, чтобы я мог получить более разумную модель и при этом сохранять достоверные интервалы и точечные оценки.
Спасибо за любую помощь заранее:)