模块 'pymc3' 没有属性 'traceplot' 错误

module 'pymc3' has no attribute 'traceplot' Error

我正在尝试生成我的模型的跟踪图,但它显示 module 'pymc3' has no attribute 'traceplot' 错误。我的代码是:

with pm.Model() as our_first_model:
    # a priori
    theta = pm.Beta('theta', alpha=1, beta=1)
    # likelihood
    y = pm.Bernoulli('y', p=theta, observed=data)
    #y = pm.Binomial('theta',n=n_experimentos, p=theta, observed=sum(datos))
    start = pm.find_MAP()
    step = pm.Metropolis()
    trace = pm.sample(1000, step=step, start=start)
    burnin = 0  # no burnin
    chain = trace[burnin:]
    pm.traceplot(chain, lines={'theta':theta_real});

然后出现以下错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-8-40f97a342e0f> in <module>
      1 burnin = 0  # no burnin
      2 chain = trace[burnin:]
----> 3 pm.traceplot(chain, lines={'theta':theta_real});
AttributeError: module 'pymc3' has no attribute 'traceplot'

我在 windows10 并且我已经用 pip 下载了 pymc3,因为它没有包含在我下载的 anaconda 中。

由于 several versions ago,PyMC3 将绘图和统计委托给 ArviZ,并且为了方便和易于转换,原始绘图命令作为 ArviZ 方法的别名保留。

最新的 PyMC3 版本 (3.11.0) 是第一个不包含 pm.traceplot 等别名的版本。您必须使用与 PyMC3 对象一起使用的 arviz.plot_trace


与问题本身无关的额外注释:

  • 您正在使用 pm.find_MAP 来初始化链,并且您正在手动将采样器设置为 pm.Metropolis 而不是允许 pm.sample 到 select 它自己的默认值。这样做是有原因的,本质上并没有错,但不鼓励这样做,请参阅 PyMC3 FAQs
  • PyMC3 正在过渡到使用 InferenceData 作为 pm.sample 的默认输出。我建议在 pm.sample 中设置 return_inferencedata=True,原因如下:1) ArviZ 函数在后台转换为这种格式,您将避免这种小开销,2) InferenceData 比 MultiTrace 具有更多功能,3) PyMC3 正在过渡到 InferenceData 作为 pm.sample 的默认输出,那么为什么不开始呢?
  • 您有一个 # no burn-in 评论,但是,pm.sample 返回的跟踪已经执行了长度为传递给它的 tune 参数的老化。 tune的默认值是1000。要真正得到所有样本,看看MCMC是如何慢慢收敛到典型集的,需要使用discard_tuned_samples=False.

一些推理数据资源: