Runjags - как позволить JAGS определиться с фазой адаптации?

Я использую run.jags функция пакета Runjags. Проблема в том, что run.jags заставляет фазу адаптации даже для моделей, которые не нуждаются в этом. Я хочу позволить JAGS принять решение о необходимости и продолжительности фазы адаптации по умолчанию ( некоторые модели действительно нуждаются в фазе адаптации, а некоторые нет). Тем не менее run.jags Обертка заставляет по умолчанию 1000 итераций для адаптивной фазы даже для моделей, которые, очевидно, не нуждаются в этом.

Воспроизводимый пример, иллюстрирующий эту проблему:

library(R2jags)

N <- 1000
y <- rnorm(N)
x <- rnorm(N)
data <- list("N", "y", "x")

inits <- function(){list(beta0=rnorm(1), beta1=rnorm(1), tau=1)}
parameters <- c("beta0", "beta1", "tau")
#inits <- function(){list(beta0=rnorm(1), beta1=rnorm(1), sigma2=1)}
#parameters <- c("beta0", "beta1")

sink("m.bug")
cat("
model{
for (i in 1:N){
y[i] ~ dnorm(mu[i], tau)
mu[i] <- beta0 + beta1*x[i]
}

beta0 ~ dnorm(0, 0.00001)
beta1 ~ dnorm(0, 0.00001)
sigma2 <- 1/tau
tau ~ dgamma(0.001, 0.001)
#sigma2 ~ dunif(0, 100)
#tau <- 1/sigma2
}
")
sink()

m <- R2jags::jags(data, inits, parameters, "m.bug", 
  n.chains=3, n.iter=2000, n.burnin=1000, n.thin=1)

require("runjags")
data2 <- list(N = N, y = y, x = x)
outRJ <- run.jags("m.bug", parameters, data2, 3, inits,
      1000, 1000, thin = 1, summarise=FALSE, plot=FALSE)

Теперь, если вы посмотрите на вывод R2jags::jags, эта модель на самом деле не нуждается в адаптации и вызове adapt ничего не делает, возможно, из-за того, что JAGS может принять решение об этом ( более подробная информация здесь). В то время как run.jags вынуждает (ненужную) адаптацию для этой модели, тем самым занимая гораздо больше времени для запуска. Он делает 1000 итераций для адаптации, затем 1000 для выгорания и затем 1000 для образцов:

> outRJ <- run.jags("m.bug", parameters, data2, 3, inits,
+       1000, 1000, thin = 1, summarise=FALSE, plot=FALSE)
Compiling rjags model and adapting for 1000 iterations...
Calling the simulation using the rjags method...
  Burning in the model for 1000 iterations...
  |**************************************************| 100%
  Running the model for 1000 iterations...                                                      
  |**************************************************| 100%
Simulation complete
Finished running the simulation

Как позволить JAGS определиться с фазой адаптации, когда она запускается через run.jags?


Обратите внимание: пожалуйста, не путайте адаптацию и фазу выгорания, в JAGS все по-другому. Этап адаптации фактически не работает как MCMC, и для некоторых моделей он не нужен (вот почему эта ошибка появляется только иногда).

1 ответ

Этап явной адаптации предназначен для согласования с версией JAGS для командной строки - rjags и (внешние) JAGS по-разному обрабатывают фазу адаптации, если оставить их собственным устройствам, поэтому единственный способ убедиться, что они выполняют одно и то же, - принудительно рьяги / яги имеют специфическую адаптивную фазу.

Аргумент adapt позволяет вручную управлять фазой адаптации, поэтому вы должны иметь возможность переопределить это, установив adapt=0 … но я только что заметил ошибку, которая предотвращает это для метода rjags, извините. Тем не менее, он будет работать должным образом, если вы укажете следующие аргументы: sample=1000, burnin=1000, adapt=0, method='simple'. В следующем выпуске я (исправлю эту ошибку и) разрешу "adapt=NA", что будет означать "разрешить rjags/JAGS адаптироваться так, как считает нужным"; но, к сожалению, это будет означать, что полученные результаты будут зависеть от метода...

Надеюсь, это поможет.

Другие вопросы по тегам