I am trying to learn PyMC from the book Bayesian Modeling and Computation in Python. Unfortunately, the book’s example code is quite out-of-date (PyMC3)! Some of the code does not work with today’s package versions.
I’m struggling to adapt this one example. It looks like az.from_pymc no longer exists. Interestingly, I see az still has lots of “other” from_{library_name} methods, just not one for pymc.
Can someone please provide best practice recommendation for packaging up all the different little inference objects into a single az object? I just went through PyMC’s own documentation examples and don’t see any examples of packaging up multiple objects for simplicity.
2 Likes
PyMC’s pm.sample()
now returns an arviz InferenceData
object by default. So your trace
variable is already what you want. Of course, this assumes you are running a recent version of PyMC (e.g., > 5.0).
Thanks! But I guess what I really want is both {prior} and {trace} packaged into a single object. In current state, they both have different components:
But I know that it’s possible to have a single object with everything consolidated inside. For example, here is a single InferenceData object that has everything together.
Maybe this question has nothing to do with az.from_pymc.
If you check out the Prior/Posterior Predictive notebook you’ll see the conventional workflow. Something along these lines:
with pm.Model() as model:
a = pm.Normal("a", 0.0, 0.5)
b = pm.Normal("b", 0.0, 1.0)
sigma = pm.Exponential("sigma", 1.0)
obs = pm.Normal("obs", mu=a+b, sigma=sigma, observed=outcome_scaled)
# sample from the prior
idata = pm.sample_prior_predictive()
with model:
# sample from the posterior and add to the existing idata object
idata.extend(pm.sample())
Nice! .extend() looks very useful. Thanks for the link.
1 Like
Worked through that notebook; very helpful thanks.
Updating for future readers. My {idata} object now has its powers combined!!!
2 Likes