我刚刚从 R2OpenBUGS 从 R2jags 切换,并注意到一些我不明白的东西。在使用 运行模拟jags()
并使用 转换输出as.mcmc()
后,第一个样本始终具有非常高的偏差,并且通常与收敛的参数估计相差甚远。使用此示例运行相同的数据bugs()
不会出现。这几乎就像第一个样本是来自老化阶段的实际第一个样本。
可重现的代码,包括错误的初始估计,以显示第一个样本中的错误参数jags()
但不bugs()
输出。
require(R2jags); require(R2OpenBUGS); require(mcmcplots)
set.seed(1)
x <- rnorm(100)
y <- 2*x + rnorm(100)
jags.model <- function()
{
# likelihood
for( i in 1:n ){
mu[i] <- alpha + beta * x[i]
y[i] ~ dnorm( mu[i], tau )
}
# priors
alpha ~ dnorm(0,0.001)
beta ~ dnorm(1,0.001)
tau ~ dgamma(1,1)
sigma <- 1/sqrt(tau)
}
n <- length(x)
inits <- function() list( "alpha"=5,"beta"=5,"tau"=5 ) # very far initial estimate
dat <- list("x","y","n")
out.jags <- jags( dat,
inits=inits, model=jags.model,
n.iter=1000, n.thin=1, n.chains=2,
DIC=TRUE,
parameters.to.save=c("alpha","beta") )
codaout.jags <- as.mcmc(out.jags)
out.bugs <- bugs( dat,
inits=inits, model=jags.model,
n.iter=1000, n.thin=1, n.chains=2,
DIC=TRUE,
parameters.to.save=c("alpha","beta") )
codaout.bugs <- as.mcmc.bugs(out.bugs)
plot(codaout.jags)
x11(); plot(codaout.bugs)