class
CumulativeDistributionTransform
extends
TransformCumulativeDistributionTransform(distribution: Distribution)Probability-integral transform via a base distribution's CDF.
Pushes any continuous random variable through its own CDF to obtain
a random variable — the classical
probability integral transform of Smirnov. Useful as a copula
building block, for goodness-of-fit testing, and for stitching
together heterogeneous flows. event_dim = 0.
Parameters
distributionDistributionContinuous distribution whose
Distribution.cdf and
Distribution.icdf define the transform. Both methods
must be implemented and the distribution must be continuous
(i.e., have a density) for the transform to be a true bijection.Notes
Forward (CDF):
Inverse (quantile / ICDF):
Log Jacobian determinant equals the log-density of the base distribution at :
By the probability-integral transform, if then
. Conversely, if
then ,
which is the inverse-CDF sampling identity used throughout
Lucid's Distribution.rsample implementations.
Examples
>>> import lucid
>>> from lucid.distributions import Normal
>>> from lucid.distributions.transforms import CumulativeDistributionTransform
>>> T = CumulativeDistributionTransform(Normal(loc=0.0, scale=1.0))
>>> T(lucid.tensor(0.0)) # F(0) = 0.5
Tensor(0.5)