kldggd {mggd} | R Documentation |
Kullback-Leibler Divergence between Centered Multivariate generalized Gaussian Distributions
Description
Computes the Kullback- Leibler divergence between two random variables distributed according to multivariate generalized Gaussian distributions (MGGD) with zero means.
Usage
kldggd(Sigma1, beta1, Sigma2, beta2, eps = 1e-06)
Arguments
Sigma1 |
symmetric, positive-definite matrix. The dispersion matrix of the first distribution. |
beta1 |
positive real number. The shape parameter of the first distribution. |
Sigma2 |
symmetric, positive-definite matrix. The dispersion matrix of the second distribution. |
beta2 |
positive real number. The shape parameter of the second distribution. |
eps |
numeric. Precision for the computation of the Lauricella function
(see |
Details
Given , a random vector of
(
) distributed according to the MGGD
with parameters
and
, a random vector of
distributed according to the MGGD
with parameters
.
The Kullback-Leibler divergence between and
is given by:
where are the eigenvalues
of the matrix
and is the Lauricella
-hypergeometric Function.
This computation uses the lauricella
function.
When (univariate case):
let
, a random variable distributed according to the generalized Gaussian distribution
with parameters
and
, a random variable distributed according to the generalized Gaussian distribution
with parameters
.
Value
A numeric value: the Kullback-Leibler divergence between the two distributions,
with two attributes attr(, "epsilon")
(precision of the result of the Lauricella function;
0 if the distributions are univariate)
and attr(, "k")
(number of iterations).
Author(s)
Pierre Santagostini, Nizar Bouhlel
References
N. Bouhlel, A. Dziri, Kullback-Leibler Divergence Between Multivariate Generalized Gaussian Distributions. IEEE Signal Processing Letters, vol. 26 no. 7, July 2019. doi:10.1109/LSP.2019.2915000
See Also
dmggd: probability density of a MGGD.
Examples
beta1 <- 0.74
beta2 <- 0.55
Sigma1 <- matrix(c(0.8, 0.3, 0.2, 0.3, 0.2, 0.1, 0.2, 0.1, 0.2), nrow = 3)
Sigma2 <- matrix(c(1, 0.3, 0.2, 0.3, 0.5, 0.1, 0.2, 0.1, 0.7), nrow = 3)
# Kullback-Leibler divergence
kl12 <- kldggd(Sigma1, beta1, Sigma2, beta2)
kl21 <- kldggd(Sigma2, beta2, Sigma1, beta1)
print(kl12)
print(kl21)
# Distance (symmetrized Kullback-Leibler divergence)
kldist <- as.numeric(kl12) + as.numeric(kl21)
print(kldist)