import pymc3 as pm
执行pm.gelman_rubin(multi_chain)后,报错:pm没有这个属性,但教科书的例子上有这个代码,如何正确调用呢?或者用什么其它代码实现同样的功能呢?
如果你使用的是 PyMC3 的旧版本,可能会出现 pm.gelman_rubin()
方法不存在的情况。你可以尝试使用以下代码来计算 Gelman-Rubin 统计量:
import numpy as np
from scipy import stats
def gelman_rubin(chains):
n, m = chains.shape
# Calculate between-chain variance
B = n * np.var(np.mean(chains, axis=1), axis=0, ddof=1)
# Calculate within-chain variance
W = np.mean(np.var(chains, axis=1, ddof=1), axis=0)
# Estimate of marginal posterior variance
Vhat = W * (n - 1) / n + B / n
# Calculate PSRF
Rhat = np.sqrt(Vhat / W)
return Rhat
这个函数的输入是一个二维数组,其中每一行代表一个 MCMC 链的样本。输出是一个标量,代表 Gelman-Rubin 统计量。你可以将多个 MCMC 链的样本合并成一个二维数组,然后调用这个函数来计算 Gelman-Rubin 统计量。