JointDistribution#
- class cuqi.distribution.JointDistribution(*densities)[source]#
Joint distribution of multiple variables.
- Parameters:
densities (RandomVariable or Density) – The densities to include in the joint distribution. Each density is passed as comma-separated arguments, and can be either a :class:’Density’ such as :class:’Distribution’ or
RandomVariable.
Notes
The joint distribution allows conditioning on any variable of the distribution. This is useful for example when Gibbs sampling and the conditionals are needed. Conditioning essentially fixes the variable and stores its contribution to the log density function.
Example
Consider defining the joint distribution:
\[p(y,x,z) = p(y \mid x)p(x \mid z)p(z)\]and conditioning on \(y=y_{obs}\) leading to the posterior:
\[p(x,z \mid y_{obs}) = p(y_{obs} \mid x)p(x \mid z)p(z)\]import cuqi import numpy as np y_obs = np.random.randn(10) A = np.random.randn(10,3) # Define distributions for Bayesian model y = cuqi.distribution.Normal(lambda x: A@x, np.ones(10)) x = cuqi.distribution.Normal(np.zeros(3), lambda z:z) z = cuqi.distribution.Gamma(1, 1) # Joint distribution p(y,x,z) joint = cuqi.distribution.JointDistribution(y, x, z) # Posterior p(x,z | y_obs) posterior = joint(y=y_obs)
Methods
__init__(*densities)Create a joint distribution from the given densities.
Disable finite difference approximation for logd gradient.
enable_FD([epsilon])Enable finite difference approximation for logd gradient.
get_density(name)Return a density with the given name.
Returns the parameter names of the joint distribution.
logd(*args, **kwargs)Evaluate the un-normalized log density function.
Attributes
Returns a dictionary of keys and booleans indicating for each parameter name (key) if finite difference approximation of the logd gradient is enabled.
Returns a dictionary indicating for each parameter name the spacing for the finite difference approximation of the logd gradient.
Returns the dimensions of the joint distribution.
Returns the geometries of the joint distribution.