1

Runjagsパッケージrun.jagsの機能を使用しています。問題は、それを必要としないモデルに対しても適応フェーズを強制することです。JAGS 自体に、適応フェーズの必要性とデフォルトの長さを決定させたいと考えています (適応フェーズが必要なモデルもあれば、そうでないモデルもあります)。ただし、ラッパーは、明らかにそれを必要としないモデルに対しても、適応フェーズのデフォルトの 1000 回の反復を強制します。run.jagsrun.jags

この問題を説明する再現可能な例:

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 を介して実行するときに、適応フェーズについて JAGS に決定させるにはどうすればよいrun.jagsですか?


余談ですが、適応段階とバーンイン段階を混同しないでください。JAGS では別の段階です。適応フェーズは実際には MCMC のようには機能せず、一部のモデルでは必要ありません (これが、このバグが時々しか発生しない理由です)。

4

1 に答える 1

2

明示的な適応フェーズは、JAGS のコマンド ライン バージョンとの一貫性のために存在します。rjags と (外部) JAGS は、それぞれのデバイスに任せた場合、適応フェーズを異なる方法で処理するため、これらが同じことを行うようにする唯一の方法は強制することですrjags/JAGS が特定の適応フェーズを持つようにします。

adapt 引数を使用すると、適応フェーズを手動で制御できるため、adapt=0 を設定することでこれをオーバーライドできるはずですが、rjags メソッドでこれを妨げるバグに気付きました。申し訳ありません。ただし、引数 sample=1000、burnin=1000、adapt=0、method='simple' を指定すると、期待どおりに動作します。次のリリースでは、(このバグを修正して) 'adapt=NA' を許可します。残念ながら、これは得られる結果が方法に依存することを意味します…

それが役立つことを願っています。

于 2014-03-21T15:37:55.590 に答える