Deterministic Variable in Posterior Predictive Samples

When generating posterior predictive samples using pm.sample_posterior_predictive the result only shows the observed variable. How can I access deterministic variables after sampling?

Here is an example. After using pm.sample_posterior_predictive I would like to access mu, which is a pm.Deterministic variable but the result only includes y.

import pymc3 as pm
from numpy.random import default_rng

rng = default_rng(seed=0)
x1 = rng.standard_normal((1000, 1)) + 3
y = 10 + x1 * 2

with pm.Model() as model:
    # Define priors
    sigma = pm.HalfCauchy("sigma", beta=10, testval=1.0)
    intercept = pm.Normal("Intercept", 0, sigma=20)
    x_coeff = pm.Normal("x", 0, sigma=20)

    # I would like this variable in the posterior predictive samples
    mu = pm.Deterministic("mu", intercept + x_coeff * x1)

    # Define likelihood
    likelihood = pm.Normal("y", mu=mu, sigma=sigma, observed=y)

    # Sample
    trace = pm.sample(1000, return_inferencedata=True, cores=1)

ppc = pm.sample_posterior_predictive(trace, model=model)
print(ppc.keys())  # Only shows y

1

1 Answer

The deterministic variable can be accessed in the posterior predictive after explicitly naming it in var_names.

ppc = pm.sample_posterior_predictive(trace, model=model, var_names=['y', 'mu'])

This shows both y and mu.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Alexander Ross

Alexander Ross

Gaming, Esports & Interactive Media Writer

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.

Share this article
Twitter Facebook Pinterest