A TransformedDistribution models p(y)
given a base distribution p(x)
,
and a deterministic, invertible, differentiable transform,Y = g(X)
. The
transform is typically an instance of the Bijector class and the base
distribution is typically an instance of the Distribution class.
tfd_transformed_distribution( distribution, bijector, batch_shape = NULL, event_shape = NULL, kwargs_split_fn = NULL, validate_args = FALSE, parameters = NULL, name = NULL )
distribution | The base distribution instance to transform. Typically an instance of Distribution. |
---|---|
bijector | The object responsible for calculating the transformation. Typically an instance of Bijector. |
batch_shape | integer vector Tensor which overrides distribution batch_shape; valid only if distribution.is_scalar_batch(). |
event_shape | integer vector Tensor which overrides distribution event_shape; valid only if distribution.is_scalar_event(). |
kwargs_split_fn | Python |
validate_args | Logical, default FALSE. When TRUE distribution parameters are checked for validity despite possibly degrading runtime performance. When FALSE invalid inputs may silently render incorrect outputs. Default value: FALSE. |
parameters | Locals dict captured by subclass constructor, to be used for copy/slice re-instantiation operations. |
name | The name for ops managed by the distribution. Default value: bijector.name + distribution.name. |
a distribution instance.
A Bijector
is expected to implement the following functions:
forward
,
inverse
,
inverse_log_det_jacobian
.
The semantics of these functions are outlined in the Bijector
documentation.
We now describe how a TransformedDistribution
alters the input/outputs of a
Distribution
associated with a random variable (rv) X
.
Write cdf(Y=y)
for an absolutely continuous cumulative distribution function
of random variable Y
; write the probability density function
pdf(Y=y) := d^k / (dy_1,...,dy_k) cdf(Y=y)
for its derivative wrt to Y
evaluated at
y
. Assume that Y = g(X)
where g
is a deterministic diffeomorphism,
i.e., a non-random, continuous, differentiable, and invertible function.
Write the inverse of g
as X = g^{-1}(Y)
and (J o g)(x)
for the Jacobian
of g
evaluated at x
.
A TransformedDistribution
implements the following operations:
sample
Mathematically: Y = g(X)
Programmatically: bijector.forward(distribution.sample(...))
log_prob
Mathematically: (log o pdf)(Y=y) = (log o pdf o g^{-1})(y) + (log o abs o det o J o g^{-1})(y)
Programmatically: (distribution.log_prob(bijector.inverse(y)) + bijector.inverse_log_det_jacobian(y))
log_cdf
Mathematically: (log o cdf)(Y=y) = (log o cdf o g^{-1})(y)
Programmatically: distribution.log_cdf(bijector.inverse(x))
and similarly for: cdf
, prob
, log_survival_function
, survival_function
.
For usage examples see e.g. tfd_sample()
, tfd_log_prob()
, tfd_mean()
.
Other distributions:
tfd_autoregressive()
,
tfd_batch_reshape()
,
tfd_bates()
,
tfd_bernoulli()
,
tfd_beta_binomial()
,
tfd_beta()
,
tfd_binomial()
,
tfd_categorical()
,
tfd_cauchy()
,
tfd_chi2()
,
tfd_chi()
,
tfd_cholesky_lkj()
,
tfd_continuous_bernoulli()
,
tfd_deterministic()
,
tfd_dirichlet_multinomial()
,
tfd_dirichlet()
,
tfd_empirical()
,
tfd_exp_gamma()
,
tfd_exp_inverse_gamma()
,
tfd_exponential()
,
tfd_gamma_gamma()
,
tfd_gamma()
,
tfd_gaussian_process_regression_model()
,
tfd_gaussian_process()
,
tfd_generalized_normal()
,
tfd_geometric()
,
tfd_gumbel()
,
tfd_half_cauchy()
,
tfd_half_normal()
,
tfd_hidden_markov_model()
,
tfd_horseshoe()
,
tfd_independent()
,
tfd_inverse_gamma()
,
tfd_inverse_gaussian()
,
tfd_johnson_s_u()
,
tfd_joint_distribution_named_auto_batched()
,
tfd_joint_distribution_named()
,
tfd_joint_distribution_sequential_auto_batched()
,
tfd_joint_distribution_sequential()
,
tfd_kumaraswamy()
,
tfd_laplace()
,
tfd_linear_gaussian_state_space_model()
,
tfd_lkj()
,
tfd_log_logistic()
,
tfd_log_normal()
,
tfd_logistic()
,
tfd_mixture_same_family()
,
tfd_mixture()
,
tfd_multinomial()
,
tfd_multivariate_normal_diag_plus_low_rank()
,
tfd_multivariate_normal_diag()
,
tfd_multivariate_normal_full_covariance()
,
tfd_multivariate_normal_linear_operator()
,
tfd_multivariate_normal_tri_l()
,
tfd_multivariate_student_t_linear_operator()
,
tfd_negative_binomial()
,
tfd_normal()
,
tfd_one_hot_categorical()
,
tfd_pareto()
,
tfd_pixel_cnn()
,
tfd_poisson_log_normal_quadrature_compound()
,
tfd_poisson()
,
tfd_power_spherical()
,
tfd_probit_bernoulli()
,
tfd_quantized()
,
tfd_relaxed_bernoulli()
,
tfd_relaxed_one_hot_categorical()
,
tfd_sample_distribution()
,
tfd_sinh_arcsinh()
,
tfd_skellam()
,
tfd_spherical_uniform()
,
tfd_student_t_process()
,
tfd_student_t()
,
tfd_triangular()
,
tfd_truncated_cauchy()
,
tfd_truncated_normal()
,
tfd_uniform()
,
tfd_variational_gaussian_process()
,
tfd_vector_diffeomixture()
,
tfd_vector_exponential_diag()
,
tfd_vector_exponential_linear_operator()
,
tfd_vector_laplace_diag()
,
tfd_vector_laplace_linear_operator()
,
tfd_vector_sinh_arcsinh_diag()
,
tfd_von_mises_fisher()
,
tfd_von_mises()
,
tfd_weibull()
,
tfd_wishart_linear_operator()
,
tfd_wishart_tri_l()
,
tfd_wishart()
,
tfd_zipf()