Там нет особых причин, что вам нужно использовать блок данных для генерации данных таким образом - модель блок может так же легко работать в «реверсе» для получения данных на основе фиксированного параметры. Просто укажите параметры как «данные» для JAGS и проверите имитируемые точки данных (и запустите столько итераций, сколько вам нужно, наборы данных, которые могут быть только 1!).
Сказав, что в принципе вы можете имитировать данные с использованием блоков данных или модели (или их комбинации), но для JAGS необходим блок модели (даже если это простая и несвязанная модель) бежать. Например, следующий использует блок данных, чтобы имитировать некоторые данные:
txtstring <- '
data{
for(i in 1:N){
Simulated[i] ~ dpois(i)
}
}
model{
fake <- 0
}
#monitor# Simulated
#data# N
'
library('runjags')
N <- 10
Simulated <- coda::as.mcmc(run.jags(txtstring, sample=1, n.chains=1, summarise=FALSE))
Simulated
Единственное отличие в том, что блок данных обновляются только один раз (в начале моделирования), тогда как модель блок обновляется каждая итерация. В этом случае мы принимаем только один образец, поэтому это не имеет значения, но если вы хотите создать несколько реализаций ваших имитируемых данных в одном и том же запуске JAGS, вам придется поместить код в блок модели. [Также могут быть и другие различия между данными и блоками модели, но я не могу придумать ничего из этого.
Обратите внимание, что вы получите данные обратно из JAGS в другом формате (один вектор с именами, указывающими индексы любых массивов в контролируемых данных), поэтому может потребоваться некоторые проблемы с обработкой для возврата к списку из векторов/массивов/независимо от R. Edit: если R2jags не предоставляет некоторую полезность для этого - я не уверен, поскольку я не использую этот пакет.
Просто выполните, например, 'y.sim [i] ~ dnorm (mu, sigma^-2)', и проверите 'y.sim'. – jbaums
Имеет ли значение, где это происходит? В блоке данных других моделей? – winwin