I'm trying to generate a trace plot of my model but it shows module 'pymc3' has no attribute 'traceplot'
error. My code is:
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});
which then gives the following error:
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'
I'm on windows10 and I've downloaded pymc3 with pip since it was not included in anaconda that I've downloaded.
Since several versions ago, PyMC3 delegates plotting and stats to ArviZ, and the original plotting commands were kept as alias to ArviZ methods for convenience and ease of transition.
Latest PyMC3 release (3.11.0) is the first to not include the alias such as
pm.traceplot
. You have to usearviz.plot_trace
which works with PyMC3 objects.Extra notes unrelated to the question itself:
pm.find_MAP
to initialize the chain and you are manually setting the sampler topm.Metropolis
instead of allowingpm.sample
to select its own defaults. There are reasons to do so and it's not intrinsically wrong but it is discourged, see PyMC3 FAQs.InferenceData
as default output ofpm.sample
. I would recommend settingreturn_inferencedata=True
inpm.sample
for the following reasons: 1) ArviZ functions convert to this format under the hood, you will avoid this small overhead, 2) InferenceData has more capabilities than MultiTrace, 3) PyMC3 is transitioning to InferenceData as the default output ofpm.sample
so why not get started already?# no burn-in
comment, however, the trace returned bypm.sample
has already had a burn-in performed of length thetune
parameter passed to it. The default value oftune
is 1000. To actually get all the samples and see how the MCMC slowly converges to the typical set, you need to usediscard_tuned_samples=False
.Some InferenceData resources: