Source code for neurokit2.complexity.entropy_bubble

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd

from .entropy_permutation import _entropy_permutation
from .entropy_renyi import entropy_renyi


[docs] def entropy_bubble(signal, delay=1, dimension=3, alpha=2, **kwargs): """**Bubble Entropy (BubblEn)** Introduced by Manis et al. (2017) with the goal of being independent of parameters such as *Tolerance* and *Dimension*. Bubble Entropy is based on :func:`permutation entropy <entropy_permutation>`, but uses the bubble sort algorithm for the ordering procedure instead of the number of swaps performed for each vector. Parameters ---------- signal : Union[list, np.array, pd.Series] The signal (i.e., a time series) in the form of a vector of values. delay : int Time delay (often denoted *Tau* :math:`\\tau`, sometimes referred to as *lag*) in samples. See :func:`complexity_delay` to estimate the optimal value for this parameter. dimension : int Embedding Dimension (*m*, sometimes referred to as *d* or *order*). See :func:`complexity_dimension` to estimate the optimal value for this parameter. tolerance : float Tolerance (often denoted as *r*), distance to consider two data points as similar. If ``"sd"`` (default), will be set to :math:`0.2 * SD_{signal}`. See :func:`complexity_tolerance` to estimate the optimal value for this parameter. alpha : float The *alpha* :math:`\\alpha` parameter (default to 1) for :func:`Rényi entropy <entropy_renyi>`). **kwargs : optional Other arguments. See Also -------- complexity_ordinalpatterns, entropy_permutation, entropy_renyi Returns ---------- BubbEn : float The Bubble Entropy. info : dict A dictionary containing additional information regarding the parameters used to compute sample entropy. Examples ---------- .. ipython:: python import neurokit2 as nk signal = nk.signal_simulate(duration=2, frequency=5) BubbEn, info = nk.entropy_bubble(signal) BubbEn References ---------- * Manis, G., Aktaruzzaman, M. D., & Sassi, R. (2017). Bubble entropy: An entropy almost free of parameters. IEEE Transactions on Biomedical Engineering, 64(11), 2711-2718. """ # Sanity checks if isinstance(signal, (np.ndarray, pd.DataFrame)) and signal.ndim > 1: raise ValueError( "Multidimensional inputs (e.g., matrices or multichannel data) are not supported yet." ) # Store parameters info = {"Dimension": dimension, "Delay": delay} H = [ _entropy_permutation( signal, dimension=d, delay=delay, algorithm=entropy_renyi, sorting="bubblesort", **kwargs, ) for d in [dimension, dimension + 1] ] BubbEn = np.diff(H) / np.log((dimension + 1) / (dimension - 1)) return BubbEn[0], info