Source code for neurokit2.stats.density

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

from .density_bandwidth import density_bandwidth


[docs] def density(x, desired_length=100, bandwidth="Scott", show=False, **kwargs): """Density estimation. Computes kernel density estimates. Parameters ----------- x : Union[list, np.array, pd.Series] A vector of values. desired_length : int The amount of values in the returned density estimation. bandwidth : float Passed to the ``method`` argument from the :func:`.density_bandwidth` function. show : bool Display the density plot. **kwargs Additional arguments to be passed to :func:`.density_bandwidth`. Returns ------- x The x axis of the density estimation. y The y axis of the density estimation. See Also -------- density_bandwidth Examples -------- .. ipython:: python import neurokit2 as nk signal = nk.ecg_simulate(duration=20) @savefig p_density1.png scale=100% x, y = nk.density(signal, bandwidth=0.5, show=True) @suppress plt.close() .. ipython:: python # Bandwidth comparison _, y2 = nk.density(signal, bandwidth=1) _, y3 = nk.density(signal, bandwidth=2) _, y4 = nk.density(signal, bandwidth="scott") _, y5 = nk.density(signal, bandwidth="silverman") _, y6 = nk.density(signal, bandwidth="kernsmooth") @savefig p_density2.png scale=100% nk.signal_plot([y, y2, y3, y4, y5, y6], labels=["0.5", "1", "2", "Scott", "Silverman", "KernSmooth"]) @suppress plt.close() """ if "method" in kwargs: kwargs.pop("method") bw = density_bandwidth(x, method=bandwidth, **kwargs) density_function = scipy.stats.gaussian_kde(x, bw_method=bw) x = np.linspace(np.nanmin(x), np.nanmax(x), num=desired_length) y = density_function(x) if show is True: pd.DataFrame({"x": x, "y": y}).plot(x="x") return x, y