首页 文章

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

提问于
浏览
1

我正在测试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])

我现在期望/猜测 P1P2 被设置为使用具有自适应协方差的正常双变量提议进行采样 . 我该如何监控?抽样是在打电话后完成的

MC.sample(iter=11000, burn=10000)

1 回答

  • 0

    挖掘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) ) .

相关问题