Source code for neurokit2.complexity.entropy_renyi

import numpy as np

from .entropy_shannon import _entropy_freq


[docs] def entropy_renyi(signal=None, alpha=1, symbolize=None, show=False, freq=None, **kwargs): """**Rényi entropy (REn or H)** In information theory, the Rényi entropy *H* generalizes the Hartley entropy, the Shannon entropy, the collision entropy and the min-entropy. * :math:`\\alpha = 0`: the Rényi entropy becomes what is known as the **Hartley entropy**. * :math:`\\alpha = 1`: the Rényi entropy becomes the **:func:`Shannon entropy <entropy_shannon>`**. * :math:`\\alpha = 2`: the Rényi entropy becomes the collision entropy, which corresponds to the surprisal of "rolling doubles". It is mathematically defined as: .. math:: REn = \\frac{1}{1-\\alpha} \\log_2 \\left( \\sum_{x \\in \\mathcal{X}} p(x)^\\alpha \\right) Parameters ---------- signal : Union[list, np.array, pd.Series] The signal (i.e., a time series) in the form of a vector of values. alpha : float The *alpha* :math:`\\alpha` parameter (default to 1) for Rényi entropy. symbolize : str Method to convert a continuous signal input into a symbolic (discrete) signal. ``None`` by default, which skips the process (and assumes the input is already discrete). See :func:`complexity_symbolize` for details. show : bool If ``True``, will show the discrete the signal. freq : np.array Instead of a signal, a vector of probabilities can be provided. **kwargs Optional arguments. Not used for now. Returns -------- ren : float The Tsallis entropy of the signal. info : dict A dictionary containing additional information regarding the parameters used. See Also -------- entropy_shannon, entropy_tsallis Examples ---------- .. ipython:: python import neurokit2 as nk signal = [1, 3, 3, 2, 6, 6, 6, 1, 0] tsen, _ = nk.entropy_renyi(signal, alpha=1) tsen # Compare to Shannon function shanen, _ = nk.entropy_shannon(signal, base=np.e) shanen # Hartley Entropy nk.entropy_renyi(signal, alpha=0)[0] # Collision Entropy nk.entropy_renyi(signal, alpha=2)[0] References ----------- * Rényi, A. (1961, January). On measures of entropy and information. In Proceedings of the Fourth Berkeley Symposium on Mathematical Statistics and Probability, Volume 1: Contributions to the Theory of Statistics (Vol. 4, pp. 547-562). University of California Press. """ if freq is None: _, freq = _entropy_freq(signal, symbolize=symbolize, show=show) freq = freq / np.sum(freq) if np.isclose(alpha, 1): ren = -np.sum(freq * np.log(freq)) else: ren = (1 / (1 - alpha)) * np.log(np.sum(freq**alpha)) return ren, {"Symbolization": symbolize}