2016-07-10 7 views
0

Возможно ли использовать JAGS как инструмент для генерации данных из модели с известными параметрами? Мне нужно пробовать точки данных из предопределенной модели, чтобы провести симуляционное исследование и проверить мощность модели, которую я разработал в R.Имитировать данные в JAGS/r2jags

К сожалению, модель как-то сложна (иерархическая структура с компонентами AR и VAR) и я не смог имитировать данные непосредственно в R. При поиске в Интернете я нашел blog post, где данные были сгенерированы в JAGS, используя блок data{} в JAGS. В этой должности автор оценил модель непосредственно в JAGS. Поскольку у меня есть модель в R, я хотел бы передать данные обратно в R без блока model{}. Это возможно?

Best, выиграть

+0

Просто выполните, например, 'y.sim [i] ~ dnorm (mu, sigma^-2)', и проверите 'y.sim'. – jbaums

+0

Имеет ли значение, где это происходит? В блоке данных других моделей? – winwin

ответ

2

Там нет особых причин, что вам нужно использовать блок данных для генерации данных таким образом - модель блок может так же легко работать в «реверсе» для получения данных на основе фиксированного параметры. Просто укажите параметры как «данные» для 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 не предоставляет некоторую полезность для этого - я не уверен, поскольку я не использую этот пакет.

+0

спасибо, это был ответ, который я искал. – winwin

+2

Что касается вашего последнего момента, 'rearray' из пакета [jagstools] (https://github.com/johnbaums/jagstools) преобразует контролируемые многомерные массивы обратно в массивы. – jbaums