如何监控 PyMC 中的提案协方差?

How to monitor the proposal covariance in PyMC?

我正在 PyMC 中测试 AdaptativeMetropolis 步骤方法(如文档 here 所述),并希望看到它的实际效果。这种步进方法包括使用协方差在采样期间调整的多变量跳跃分布来块更新一些变量。

是否可以打印提案协方差矩阵与时间的关系?在我看来,这没有记录在案。

谢谢。

编辑:作为玩具模型,让我们考虑两个相似骰子的情况(假设它们来自同一家工厂)。我们希望估计它们是否有偏见。

import pymc
n = 100
alpha = pymc.Gamma('alpha', alpha=1, beta=1)
P1 = pymc.Beta('p1', alpha=alpha, beta=2)
P2 = pymc.Beta('p2', alpha=alpha, beta=2)
Y1 = pymc.Binomial('y1', n=n, p=P1, value=70, observed=True)
Y2 = pymc.Binomial('y2', n=n, p=P2, value=50, observed=True)
model = pymc.Model([alpha, P1, P2, Y1, Y2])
MC = pymc.MCMC(model)
MC.use_step_method(pymc.AdaptiveMetropolis, [P1, P2])

我现在 expect/guess P1P2 设置为使用具有自适应协方差的正常双变量提案进行采样。我该如何监控?采样是在调用

之后完成的
MC.sample(iter=11000, burn=10000)

挖掘source code,我发现可以调整冗长来打印协方差矩阵:

if self.verbose > 1:
  print_("\tUpdating covariance ...\n", self.C)
  print_("\tUpdating mean ... ", self.chain_mean)

因此,应该足够了:

MC.use_step_method(pymc.AdaptiveMetropolis, [P1, P2], verbose=2)

最终的相关矩阵也存储在MC.get_state()['step_methods']['AdaptiveMetropolis_p1_p2']['proposal_sd']中。这可用于计算采样后的协方差矩阵 (np.dot(corr, corr.T)).