• ed.criticisms.ppc
  • ed.ppc

Defined in edward/criticisms/ppc.py.

Posterior predictive check (Gelman, Meng, & Stern, 1996; Meng, 1994; Rubin, 1984).

PPC’s form an empirical distribution for the predictive discrepancy,

\(p(T\mid x) = \int p(T(x^{\text{rep}})\mid z) p(z\mid x) dz\)

by drawing replicated data sets \(x^{\text{rep}}\) and calculating \(T(x^{\text{rep}})\) for each data set. Then it compares it to \(T(x)\).

If data is inputted with the prior predictive distribution, then it is a prior predictive check (Box, 1980).


  • T: function. Discrepancy function, which takes a dictionary of data and dictionary of latent variables as input and outputs a tf.Tensor.
  • data: dict. Data to compare to. It binds observed variables (of type RandomVariable or tf.Tensor) to their realizations (of type tf.Tensor). It can also bind placeholders (of type tf.Tensor) used in the model to their realizations.
  • latent_vars: dict. Collection of random variables (of type RandomVariable or tf.Tensor) binded to their inferred posterior. This argument is used when the discrepancy is a function of latent variables.
  • n_samples: int. Number of replicated data sets.


list of np.ndarray. List containing the reference distribution, which is a NumPy array with n_samples elements,

\((T(x^{{\text{rep}},1}, z^{1}), ..., T(x^{\text{rep,nsamples}}, z^{\text{nsamples}}))\)

and the realized discrepancy, which is a NumPy array with n_samples elements,

\((T(x, z^{1}), ..., T(x, z^{\text{nsamples}})).\)


# build posterior predictive after inference:
# it is parameterized by a posterior sample
x_post = ed.copy(x, {z: qz, beta: qbeta})

# posterior predictive check
# T is a user-defined function of data, T(data)
T = lambda xs, zs: tf.reduce_mean(xs[x_post])
ed.ppc(T, data={x_post: x_train})

# in general T is a discrepancy function of the data (both response and
# covariates) and latent variables, T(data, latent_vars)
T = lambda xs, zs: tf.reduce_mean(zs[z])
ed.ppc(T, data={y_post: y_train, x_ph: x_train},
       latent_vars={z: qz, beta: qbeta})

# prior predictive check
# run ppc on original x
ed.ppc(T, data={x: x_train})

Box, G. E. (1980). Sampling and Bayes’ inference in scientific modelling and robustness. Journal of the Royal Statistical Society. Series A (General), 383–430.

Gelman, A., Meng, X.-L., & Stern, H. (1996). Posterior predictive assessment of model fitness via realized discrepancies. Statistica Sinica, 733–760.

Meng, X.-L. (1994). Posterior predictive \(p\)-values. The Annals of Statistics, 1142–1160.

Rubin, D. B. (1984). Bayesianly justifiable and relevant frequency calculations for the applied statistician. The Annals of Statistics, 12(4), 1151–1172.