无法从 Vehtari 论文中复制 RStan ESS 代码

Can't replicate RStan ESS code from Vehtari paper

我正在尝试使用 Vehtari 等人的方法复制 ESS(有效样本量)计算。在:Rank-normalization, folding, and localization: An improved Rhat for assessing convergence of MCMC

我正在使用这里的代码: https://github.com/avehtari/rhat_ess/blob/master/code/monitornew.R

  # Geyer's initial positive sequence
  rho_hat_t <- rep.int(0, n_samples)
  t <- 0
  rho_hat_even <- 1
  rho_hat_t[t + 1] <- rho_hat_even
  rho_hat_odd <- 1 - (mean_var - mean(acov[t + 2, ])) / var_plus # 251
  rho_hat_t[t + 2] <- rho_hat_odd
  while (t < nrow(acov) - 5 && !is.nan(rho_hat_even + rho_hat_odd) &&
         (rho_hat_even + rho_hat_odd > 0)) {
    t <- t + 2
    rho_hat_even = 1 - (mean_var - mean(acov[t + 1, ])) / var_plus # 256
    rho_hat_odd = 1 - (mean_var - mean(acov[t + 2, ])) / var_plus # 257
    if ((rho_hat_even + rho_hat_odd) >= 0) {
      rho_hat_t[t + 1] <- rho_hat_even
      rho_hat_t[t + 2] <- rho_hat_odd
    }
  }

除了论文中的等式 10(计算跨链自相关),我可以按照论文中的代码进行操作。代码(第 251、256 和 257 行)以以下形式出现:

1 - (mean_var - mean(acov[t + 1, ])) / var_plus

接近等式 10,只是缺少等式 10 中的 's' 项:

我在代码中的任何地方都看不到这是以某种方式在其他地方以某种方式计算的。我尝试将 's' 项放回到这些代码行中,这对最终的 ESS 值产生了很大的影响。

有人能帮我理解论文和代码之间的差异吗?

谢谢。

论文中的公式中,s^2是方差的估计,rho是自相关的估计。因此 s^2 * rho 是自协方差的估计值,这就是您在代码中看到的。