The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Type: Package
Title: Entropy and Extropy Measures for Probability Distributions
Version: 0.4.0
Description: Provides functions to compute Shannon entropy, Renyi entropy, Tsallis entropy, and related extropy measures for discrete probability distributions. Includes joint and conditional entropy, KL divergence, Jensen-Shannon divergence, cross-entropy, normalized entropy, and Renyi extropy (including the conditional and maximum forms). All measures use the natural logarithm (nats). Useful for information theory, statistics, and machine learning applications.
License: MIT + file LICENSE
URL: https://github.com/itsmdivakaran/RenyiExtropy
BugReports: https://github.com/itsmdivakaran/RenyiExtropy/issues
Encoding: UTF-8
RoxygenNote: 7.3.3
Depends: R (≥ 3.5.0)
Suggests: knitr, rmarkdown, testthat (≥ 3.0.0)
Config/testthat/edition: 3
VignetteBuilder: knitr
NeedsCompilation: no
Packaged: 2026-03-11 08:32:16 UTC; maheshdivakaran
Author: Divakaran Mahesh ORCID iD [aut, cre], G Rajesh ORCID iD [aut], Sreekumar Jayalekshmi ORCID iD [aut]
Maintainer: Divakaran Mahesh <itsmdivakaran@gmail.com>
Repository: CRAN
Date/Publication: 2026-03-16 19:00:08 UTC

Conditional Entropy

Description

Computes the conditional Shannon entropy H(Y \mid X) for two discrete random variables given their joint probability matrix.

Usage

conditional_entropy(joint_matrix)

Arguments

joint_matrix

A numeric matrix of joint probabilities, where entry (i, j) gives P(X = i, Y = j). All entries must be non-negative and the matrix must sum to 1. Must not contain NA or NaN values.

Details

The conditional entropy is computed via the chain rule:

H(Y \mid X) = H(X, Y) - H(X)

where H(X, Y) is the joint entropy and H(X) is the marginal entropy of X (obtained by summing over rows of joint_matrix).

The conditional entropy satisfies 0 \le H(Y \mid X) \le H(Y), with equality on the right when X and Y are independent.

Value

A single non-negative numeric value giving the conditional entropy H(Y \mid X) in nats.

See Also

joint_entropy(), shannon_entropy(), conditional_renyi_extropy()

Examples

# 2 x 2 joint distribution
Pxy <- matrix(c(0.2, 0.3, 0.1, 0.4), nrow = 2, byrow = TRUE)
conditional_entropy(Pxy)

# Independent variables: H(Y|X) = H(Y)
px <- c(0.4, 0.6)
py <- c(0.3, 0.7)
Pxy_indep <- outer(px, py)
conditional_entropy(Pxy_indep)
shannon_entropy(py)


Conditional Renyi Extropy

Description

Computes the conditional Renyi extropy J_q(Y \mid X) for two discrete random variables given their joint probability matrix.

Usage

conditional_renyi_extropy(Pxy, q)

Arguments

Pxy

A numeric matrix representing the joint probability distribution, where entry (i, j) gives P(X = i, Y = j). Rows correspond to values of X and columns to values of Y. All entries must be non-negative and the matrix must sum to 1. Must not contain NA or NaN values.

q

A single positive numeric value giving the Renyi order parameter. Must satisfy q > 0. When |q - 1| < 10^{-8}, the limiting (Shannon) conditional extropy is returned.

Details

The conditional Renyi extropy is defined via the chain rule:

J_q(Y \mid X) = J_q(X, Y) - J_q(X)

where J_q(\cdot) denotes the Renyi extropy computed on the joint and marginal distributions respectively.

As q \to 1, this converges to the conditional Shannon extropy.

Value

A single numeric value giving the conditional Renyi extropy J_q(Y \mid X) in nats.

See Also

renyi_extropy(), conditional_entropy(), max_renyi_extropy()

Examples

# 2 x 2 joint distribution
Pxy <- matrix(c(0.2, 0.3, 0.1, 0.4), nrow = 2, byrow = TRUE)
conditional_renyi_extropy(Pxy, q = 2)

# Limiting case q -> 1 (Shannon conditional extropy)
conditional_renyi_extropy(Pxy, q = 1 + 1e-9)

# 3 x 3 joint distribution
Pxy3 <- matrix(c(0.1, 0.05, 0.15, 0.05, 0.2, 0.1, 0.1, 0.15, 0.1),
               nrow = 3, byrow = TRUE)
conditional_renyi_extropy(Pxy3, q = 2)


Cross-Entropy

Description

Computes the cross-entropy between a true probability distribution P and an approximating distribution Q.

Usage

cross_entropy(p, q)

Arguments

p

A numeric vector of probabilities representing the true (reference) distribution. Elements must lie in [0, 1], sum to 1, contain at least 2 elements, and must not contain NA or NaN values.

q

A numeric vector of probabilities representing the approximating distribution. Must be the same length as p, with elements in [0, 1], summing to 1, and must not contain NA or NaN values.

Details

The cross-entropy is defined as:

H(P, Q) = -\sum_{i=1}^n p_i \log q_i

Terms where p_i = 0 are omitted. If q_i = 0 but p_i > 0, q_i is replaced with 10^{-15} and a warning is emitted.

Cross-entropy relates to KL divergence via: H(P, Q) = H(P) + D_{\mathrm{KL}}(P \| Q).

Value

A single non-negative numeric value giving the cross-entropy H(P, Q) in nats.

See Also

kl_divergence(), js_divergence(), shannon_entropy()

Examples

p <- c(0.2, 0.5, 0.3)
q <- c(0.3, 0.4, 0.3)
cross_entropy(p, q)

# When P == Q, cross-entropy equals Shannon entropy
cross_entropy(p, p)
shannon_entropy(p)


Classical Extropy

Description

Computes the classical extropy for a discrete probability distribution.

Usage

extropy(p)

Arguments

p

A numeric vector of probabilities (p_1, \ldots, p_n), where each element must lie in [0, 1] and the elements must sum to 1. The vector must contain at least 2 elements and must not contain NA or NaN values.

Details

The classical extropy is defined as:

J(\mathbf{p}) = -\sum_{i=1}^n (1 - p_i) \log(1 - p_i)

Terms where 1 - p_i = 0 (i.e., p_i = 1) are omitted to avoid \log 0. Extropy is the dual complement of entropy and measures information in terms of the complementary probabilities.

Value

A single non-negative numeric value giving the classical extropy (in nats).

See Also

shannon_entropy(), renyi_extropy(), shannon_extropy()

Examples

# Three-outcome distribution
p <- c(0.2, 0.5, 0.3)
extropy(p)

# Uniform distribution
extropy(rep(0.25, 4))

# Binary distribution
extropy(c(0.7, 0.3))


Joint Entropy

Description

Computes the joint Shannon entropy for a bivariate discrete distribution specified by a joint probability matrix.

Usage

joint_entropy(joint_matrix)

Arguments

joint_matrix

A numeric matrix of joint probabilities, where entry (i, j) gives P(X = i, Y = j). All entries must be non-negative and the matrix must sum to 1. Must not contain NA or NaN values.

Details

The joint entropy is defined as:

H(X, Y) = -\sum_{i,j} P(X = i, Y = j) \log P(X = i, Y = j)

with the convention that 0 \log 0 = 0. This satisfies H(X, Y) \ge \max(H(X), H(Y)) and the chain rule H(X, Y) = H(X) + H(Y \mid X).

Value

A single non-negative numeric value giving the joint entropy H(X, Y) in nats.

See Also

conditional_entropy(), shannon_entropy()

Examples

# 2 x 2 joint distribution
Pxy <- matrix(c(0.2, 0.3, 0.1, 0.4), nrow = 2, byrow = TRUE)
joint_entropy(Pxy)

# Independent distributions: H(X,Y) = H(X) + H(Y)
px <- c(0.4, 0.6)
py <- c(0.3, 0.7)
Pxy_indep <- outer(px, py)
joint_entropy(Pxy_indep)
shannon_entropy(px) + shannon_entropy(py)


Jensen-Shannon Divergence

Description

Computes the Jensen-Shannon (JS) divergence between two probability distributions.

Usage

js_divergence(p, q)

Arguments

p

A numeric vector of probabilities. Elements must lie in [0, 1], sum to 1, contain at least 2 elements, and must not contain NA or NaN values.

q

A numeric vector of probabilities. Must be the same length as p, with elements in [0, 1], summing to 1, and must not contain NA or NaN values.

Details

The JS divergence is defined as:

\mathrm{JSD}(P \| Q) = \frac{1}{2} D_{\mathrm{KL}}(P \| M) + \frac{1}{2} D_{\mathrm{KL}}(Q \| M)

where M = (P + Q)/2 is the mixture distribution and D_{\mathrm{KL}} is the KL divergence.

Unlike kl_divergence(), the JS divergence is symmetric and always finite (even when one distribution has zero entries). Its square root is a metric.

Value

A single non-negative numeric value giving the Jensen-Shannon divergence in nats. The value is bounded in [0, \log 2].

See Also

kl_divergence(), cross_entropy()

Examples

p <- c(0.2, 0.5, 0.3)
q <- c(0.3, 0.4, 0.3)
js_divergence(p, q)

# Symmetry: JSD(P, Q) == JSD(Q, P)
js_divergence(q, p)

# JSD is 0 when P == Q
js_divergence(p, p)

# JSD <= log(2) for any two distributions
js_divergence(c(1, 0), c(0, 1))
log(2)


Kullback-Leibler Divergence

Description

Computes the Kullback-Leibler (KL) divergence from distribution Q to distribution P.

Usage

kl_divergence(p, q)

Arguments

p

A numeric vector of probabilities representing the true (reference) distribution. Elements must lie in [0, 1], sum to 1, contain at least 2 elements, and must not contain NA or NaN values.

q

A numeric vector of probabilities representing the approximating distribution. Must be the same length as p, with elements in [0, 1], summing to 1, and must not contain NA or NaN values.

Details

The KL divergence is defined as:

D_{\mathrm{KL}}(P \| Q) = \sum_{i=1}^n p_i \log\!\frac{p_i}{q_i}

Terms where p_i = 0 are omitted (convention 0 \log 0 = 0). If q_i = 0 but p_i > 0 the divergence is technically infinite; this function replaces such q_i with 10^{-15} and emits a warning.

Note that KL divergence is not symmetric: D_{\mathrm{KL}}(P \| Q) \neq D_{\mathrm{KL}}(Q \| P) in general. For a symmetric measure see js_divergence().

Value

A single non-negative numeric value giving the KL divergence D_{\mathrm{KL}}(P \| Q) in nats.

See Also

js_divergence(), cross_entropy(), shannon_entropy()

Examples

p <- c(0.2, 0.5, 0.3)
q <- c(0.3, 0.4, 0.3)
kl_divergence(p, q)

# KL divergence is zero when P == Q
kl_divergence(p, p)

# Asymmetry: KL(P||Q) != KL(Q||P)
kl_divergence(p, q)
kl_divergence(q, p)


Maximum Renyi Extropy

Description

Computes the maximum Renyi extropy, which is attained by the uniform discrete distribution over n outcomes.

Usage

max_renyi_extropy(n)

Arguments

n

A single integer value giving the number of outcomes. Must satisfy n \ge 2.

Details

For a uniform distribution p_i = 1/n, the maximum Renyi extropy is:

\max_{\mathbf{p}} J_q(\mathbf{p}) = (n - 1) \log\!\left(\frac{n}{n - 1}\right)

Remarkably, this value is independent of the Renyi parameter q (for any q > 0, q \neq 1).

Value

A single positive numeric value giving the maximum Renyi extropy.

See Also

renyi_extropy(), conditional_renyi_extropy()

Examples

# Maximum Renyi extropy for n = 3 outcomes
max_renyi_extropy(3)

# For n = 10 outcomes
max_renyi_extropy(10)

# Verify against renyi_extropy() with uniform distribution
max_renyi_extropy(4)
renyi_extropy(rep(0.25, 4), q = 2)


Normalized Shannon Entropy

Description

Computes the normalized Shannon entropy (also called relative entropy or efficiency) for a discrete probability distribution.

Usage

normalized_entropy(p)

Arguments

p

A numeric vector of probabilities (p_1, \ldots, p_n), where each element must lie in [0, 1] and the elements must sum to 1. The vector must contain at least 2 elements and must not contain NA or NaN values.

Details

The normalized entropy is defined as:

H_{\mathrm{norm}}(\mathbf{p}) = \frac{H(\mathbf{p})}{\log n}

where H(\mathbf{p}) is the Shannon entropy and n is the number of outcomes. The result equals 0 for a degenerate distribution and 1 for a uniform distribution.

Value

A single numeric value in [0, 1] giving the ratio of the Shannon entropy to its maximum possible value \log n.

See Also

shannon_entropy()

Examples

# Uniform distribution: normalized entropy = 1
normalized_entropy(rep(0.25, 4))

# Degenerate distribution: normalized entropy = 0
normalized_entropy(c(1, 0, 0))

# Intermediate distribution
normalized_entropy(c(0.2, 0.5, 0.3))


Renyi Entropy

Description

Computes the Renyi entropy for a discrete probability distribution and order parameter q.

Usage

renyi_entropy(p, q)

Arguments

p

A numeric vector of probabilities (p_1, \ldots, p_n), where each element must lie in [0, 1] and the elements must sum to 1. The vector must contain at least 2 elements and must not contain NA or NaN values.

q

A single positive numeric value giving the Renyi order parameter. Must satisfy q > 0. When q is numerically close to 1 (within 10^{-8}), the Shannon entropy is returned instead.

Details

The Renyi entropy of order q is defined as:

H_q(\mathbf{p}) = \frac{1}{1 - q} \log\!\left( \sum_{i=1}^n p_i^q \right)

For q \to 1, this reduces to the Shannon entropy:

H(\mathbf{p}) = -\sum_{i=1}^n p_i \log p_i

The function detects when |q - 1| < 10^{-8} and returns the Shannon entropy in that case to avoid numerical issues near the singularity.

Special cases: H_0 is the log of the support size (Hartley entropy), H_2 is the collision entropy, and H_\infty is the min-entropy.

Value

A single numeric value giving the Renyi entropy (in nats).

See Also

shannon_entropy(), tsallis_entropy(), renyi_extropy()

Examples

p <- c(0.2, 0.5, 0.3)

# Renyi entropy for q = 2 (collision entropy)
renyi_entropy(p, 2)

# Renyi entropy for q = 0.5
renyi_entropy(p, 0.5)

# q near 1 returns Shannon entropy
renyi_entropy(p, 1 + 1e-9)

# Explicit Shannon entropy for comparison
shannon_entropy(p)


Renyi Extropy

Description

Computes the Renyi extropy for a discrete probability distribution and Renyi order parameter q.

Usage

renyi_extropy(p, q)

Arguments

p

A numeric vector of probabilities (p_1, \ldots, p_n), where each element must lie in [0, 1] and the elements must sum to 1. The vector must contain at least 2 elements and must not contain NA or NaN values.

q

A single positive numeric value giving the Renyi order parameter. Must satisfy q > 0. When |q - 1| < 10^{-8}, the classical extropy (Shannon extropy) is returned instead.

Details

The Renyi extropy of order q is defined as:

J_q(\mathbf{p}) = \frac{-(n-1)\log(n-1) + (n-1) \log\!\left(\sum_{i=1}^n (1 - p_i)^q \right)}{1 - q}

where n is the number of outcomes.

For q \to 1, the formula reduces to the classical (Shannon) extropy:

J(\mathbf{p}) = -\sum_{i=1}^n (1 - p_i) \log(1 - p_i)

For n = 2, the Renyi extropy coincides with the Renyi entropy.

Value

A single numeric value giving the Renyi extropy (in nats).

See Also

extropy(), renyi_entropy(), conditional_renyi_extropy(), max_renyi_extropy()

Examples

p <- c(0.2, 0.5, 0.3)

# Renyi extropy for q = 2
renyi_extropy(p, 2)

# For q near 1, returns classical extropy
renyi_extropy(p, 1 + 1e-9)

# Compare with extropy() at the limiting case
extropy(p)

# Binary distribution (n = 2): Renyi extropy equals Renyi entropy
renyi_extropy(c(0.4, 0.6), 2)
renyi_entropy(c(0.4, 0.6), 2)


Shannon Entropy

Description

Computes the Shannon entropy for a discrete probability distribution.

Usage

shannon_entropy(p)

Arguments

p

A numeric vector of probabilities (p_1, \ldots, p_n), where each element must lie in [0, 1] and the elements must sum to 1. The vector must contain at least 2 elements and must not contain NA or NaN values.

Details

The Shannon entropy is defined as:

H(\mathbf{p}) = - \sum_{i=1}^n p_i \log(p_i)

with the convention that 0 \log 0 = 0 (terms where p_i = 0 contribute zero). The logarithm used is the natural logarithm, so the result is in nats.

Shannon entropy is the limiting case of the Renyi entropy as q \to 1 and equals zero if and only if the distribution is degenerate. It is maximised by the uniform distribution, where H = \log n.

Value

A single non-negative numeric value giving the Shannon entropy measured in nats (natural-logarithm base).

See Also

renyi_entropy(), tsallis_entropy(), extropy(), normalized_entropy()

Examples

# Three-outcome distribution
p <- c(0.2, 0.5, 0.3)
shannon_entropy(p)

# Uniform distribution -- maximum entropy equals log(n)
shannon_entropy(rep(0.25, 4))

# Degenerate distribution -- entropy equals 0
shannon_entropy(c(1, 0, 0))


Shannon Extropy

Description

Computes the Shannon extropy for a discrete probability distribution.

Usage

shannon_extropy(p)

Arguments

p

A numeric vector of probabilities (p_1, \ldots, p_n), where each element must lie in [0, 1] and the elements must sum to 1. The vector must contain at least 2 elements and must not contain NA or NaN values.

Details

Shannon extropy is defined as:

J(\mathbf{p}) = -\sum_{i=1}^n (1 - p_i) \log(1 - p_i)

Terms where p_i = 1 are treated as contributing zero (using the convention 0 \log 0 = 0).

This function is an alias for extropy(); both compute the same quantity. It is retained for naming consistency with shannon_entropy().

Value

A single non-negative numeric value giving the Shannon extropy (in nats).

See Also

extropy(), shannon_entropy(), renyi_extropy()

Examples

p <- c(0.2, 0.5, 0.3)
shannon_extropy(p)

# Identical to extropy()
extropy(p)

# Uniform distribution
shannon_extropy(rep(1/3, 3))


Tsallis Entropy

Description

Computes the Tsallis entropy for a discrete probability distribution and order parameter q.

Usage

tsallis_entropy(p, q)

Arguments

p

A numeric vector of probabilities (p_1, \ldots, p_n), where each element must lie in [0, 1] and the elements must sum to 1. The vector must contain at least 2 elements and must not contain NA or NaN values.

q

A single positive numeric value giving the Tsallis order parameter. Must satisfy q > 0. When |q - 1| < 10^{-8}, the Shannon entropy is returned.

Details

The Tsallis entropy of order q is defined as:

S_q(\mathbf{p}) = \frac{1 - \sum_{i=1}^n p_i^q}{q - 1}

For q \to 1, this reduces to the Shannon entropy:

H(\mathbf{p}) = -\sum_{i=1}^n p_i \log p_i

The Tsallis entropy is non-extensive and is widely used in non-equilibrium statistical mechanics and complex systems.

Value

A single non-negative numeric value giving the Tsallis entropy.

See Also

shannon_entropy(), renyi_entropy()

Examples

p <- c(0.2, 0.5, 0.3)

# Tsallis entropy for q = 2
tsallis_entropy(p, 2)

# Tsallis entropy for q = 0.5
tsallis_entropy(p, 0.5)

# As q -> 1, converges to Shannon entropy
tsallis_entropy(p, 1 + 1e-9)
shannon_entropy(p)

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.