MCMC尾链中的第一次迭代与初始值不同

机器算法验证 r 马尔可夫链蒙特卡罗 锯齿 虫虫 结尾
2022-04-08 18:04:23

我有我的锯齿输出对象。为了了解 MCMC 尾链如何工作,我尝试查看每个 MCMC 链中的第一次迭代是否等于提供的初始值。它是不同的!初始值不存在!这是一个错误吗?

请注意,我为此指定了burnin = 0。

我如何跑锯齿:

inits = function () { list(
    alpha = rnorm(no_crit, 0, 10000),
    beta = rnorm(no_crit, 0, 10000)
    ,eps_tau = 7.9
    ,gamma_tau = 3.1
    ,delta_tau = 213 
) 
}

params = c("alpha", "beta", "eps_tau", "gamma_tau", "delta_tau")

ni <- 5000
nt <- 8
nb <- 0
nc <- 3

out <- R2jags::jags(win.data, inits, params, "model.txt",
    nc, ni, nb, nt,  
    working.directory = paste(getwd(), "/tmp_bugs/", sep = "")
)

jags 计算完成后,我从每个 MCMC 尾链中转储了第一次迭代:

> mm = as.mcmc(out)
> mm[1, c("delta_tau", "eps_tau")]
> mm[1, c("delta_tau", "eps_tau")]
[[1]]
   delta_tau      eps_tau 
4426.7716020    0.4825011 

[[2]]
   delta_tau      eps_tau 
4811.3174529    0.5240721 

[[3]]
   delta_tau      eps_tau 
4406.2672016    0.5351576 

如您所见,所有这些链中的第一次迭代与我提供的初始值不同(eps_tau = 7.9,delta_tau = 213)。

2个回答

我没有深入研究 JAGS 源代码,但人们通常认为初始值是迭代 0,而迭代 1 是单次通过 Gibbs 采样器后的结果。

此外,如果有任何 Metropolis 步骤,则在迭代 1 之前可能会有一个短暂的适应阶段,而与老化设置无关。

首先,JAGS 不做老化剪辑——R2jags 做了一些事情,但我不知道那是什么。其次,适应(参见 JAGS 用户手册)可能会影响初始值。第三,即使你关闭了适配,R2jags 过去也存在初始值的错误最好改用 rjags。