Learn R Programming

seewave (version 2.1.6)

kl.dist: Kullback-Leibler distance

Description

Compare two distributions (e.g. two frequency spectra) by computing the Kullback-Leibler distance

Usage

kl.dist(spec1, spec2, base = 2)

Arguments

spec1

any distribution, especially a spectrum obtained with spec or meanspec (not in dB). This can be either a two-column matrix (col1 = frequency, col2 = amplitude) or a vector (amplitude).

spec2

any distribution, especially a spectrum obtained with spec or meanspec (not in dB). This can be either a two-column matrix (col1 = frequency, col2 = amplitude) or a vector (amplitude).

base

the logarithm base used to compute the distance. See log.

Value

The function returns a list of three items:

D1

The K-L distance of 'spec2' with respect to 'spec1' (i.e. D(spec1 || spec2))

D2

The K-L distance of 'spec1' with respect to 'spec2' (i.e. D(spec2 || spec1))

D

The symmetric K-L distance (i.e. D = 0.5*(D1+D2))

Details

The Kullback-Leibler distance or relative entropy is a non-symmetric measure of the difference between two probability distributions. It is here adapted for frequency spectra. The distance is asymmetric, ie computing the K-L distance between spec1 and spec2 is not the same as computing it between spec2 and spec1. A symmetry can be obtained by calculating the mean between the two directions. The distance is obtained following: $$D_{K-L}(spec1 \Vert spec2) = \sum{spec1 \times log(\frac{spec1}{spec2})}$$

References

Kullback, S., Leibler, R.A. (1951). On information and sufficiency. Annals of Mathematical Statistics, 22: 79-86

See Also

ks.dist, logspec.dist, simspec, diffspec

Examples

Run this code
# NOT RUN {
# Comparison of two spectra
data(tico)
tico1 <- spec(tico, at=0.65, plot=FALSE)
tico2 <- spec(tico, at=1.1, plot=FALSE)
kl.dist(tico1, tico2)    # log2 (binary logarithm)
kl.dist(tico1, tico2, base=exp(1))  # ln (natural logarithm)
# }

Run the code above in your browser using DataLab