如何python中用pymc3实现gelman_rubin检验

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 统计量。