无法从 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
是自协方差的估计值,这就是您在代码中看到的。
我正在尝试使用 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
是自协方差的估计值,这就是您在代码中看到的。