Stan MCMC 链在预热和采样之间来回切换

Stan MCMC chains switching back and forth between warmup and sampling

我目前正在使用R结合Stan进行MCMC抽样以获得某个需求变量的后验分布d,给定历史需求 dH 和当前观察到的变量 x(因此公式计算出 P(d|dH, x),与 P(x|d)P(d|dH) 成正比。

我的问题

我发现采样过程显示 MCMC 在预热和采样之间 来回 跳跃真的很奇怪(不是第一个 nth 迭代的情况吗?总是处于 warmup 阶段,然后是实际的 sampling 阶段?)同时,它完全跳过了 Chain 1(?! ).下面是它显示的进度图片:

我的代码

for(i in 1:365){
  nrow = nrow(rte_m[[i]]);
  ncol = ncol(rte_m[[i]]);
  A <- as.matrix(rte_m[[i]]);
  sigma_x <- as.vector(sample.int(10, nrow(kf_vect[[i]]), replace=TRUE))
  sigma_y <- as.vector(eps_vect[[i]])
  yH <- as.vector(dh_vect[[i]]);
  yT <- yH + as.vector(eps_vect[[i]]); 
  epsilon <- sample.int(10, nrow(kf_vect[[i]]), replace=TRUE)
  x <- as.vector(as.matrix(rte_m[[i]])%*%yT) + epsilon
  iterations = 500;

  #input data into a list called stan_data
  stan_data = list(nrow = nrow, ncol = ncol,
                   yH = yH, 
                   x = x, epsilon = epsilon,
                   A = A, sigma_x = sigma_x, sigma_y = sigma_y);
  #input it into our Stan model file "stamodeling.stan"
  stanmodel1 <- stan_model(file = "stamodeling.stan",
                           model_name = "stanmodel1");

  #MCMC sampling
  stanfit <- sampling(stanmodel1, data = list(ncol = ncol,nrow = nrow,
                                              yH = yH, 
                                              x=x, epsilon = epsilon,
                                              A = A, sigma_x = sigma_x, sigma_y = sigma_y)
                      ,iter=iterations, warmup = 200, chains = 4, cores = 2);

Stan Modeling File

Data Files

正在发生的事情不是给定链在预热和采样之间切换。相反,正在发生的是来自各个链的进度消息相互穿插。

因此,例如,当您看到以下内容时:

[Iteration:] 50/500 [0%] (Warmup)
[Iteration:] 50/500 [0%] (Warmup)

您实际上看到了两条消息,一条来自链 A,第二条来自链 B。