Source code for neurokit2.epochs.epochs_average
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from .epochs_to_df import epochs_to_df
[docs]
def epochs_average(epochs, which=None, show=False, **kwargs):
"""**Compute Grand Average**
Average epochs and returns the grand average, as well as the SD and the confidence interval.
Parameters
----------
epochs : dict
A dict containing one DataFrame per event/trial. Usually obtained via `epochs_create()`.
which : str or list
The name of the column(s) to compute the average from.
**kwargs
Other arguments to pass (not used for now).
See Also
----------
events_find, events_plot, epochs_create, epochs_to_df
Examples
----------
* **Example with ECG Peaks**
.. ipython:: python
signal = nk.ecg_simulate(duration=10)
events = nk.ecg_findpeaks(signal)
epochs = nk.epochs_create(signal, events=events["ECG_R_Peaks"], epochs_start=-0.5,
epochs_end=0.5)
@savefig p_epochs_average1.png scale=100%
grand_av = nk.epochs_average(epochs, which="Signal", show=True)
@suppress
plt.close()
"""
data = epochs_to_df(epochs)
assert (
"Time" in data.columns
), "Something is wrong with the epochs data, could not find a 'Time' column in them."
# Select only the first column
if which is None:
which = data.columns[0]
if isinstance(which, str):
which = [which]
# Define quantile functions
def q1(x):
return x.quantile(0.025)
def q2(x):
return x.quantile(0.975)
# Format which
what = {i: ["mean", "std", q1, q2] for i in which}
# Group by and average
av = data.groupby(["Time"], as_index=False).agg(what).reset_index()
av.columns = ["%s%s" % (a, "_%s" % b if b else "") for a, b in av.columns]
# Format
av.columns = av.columns.str.replace("_mean", "_Mean")
av.columns = av.columns.str.replace("_std", "_SD")
av.columns = av.columns.str.replace("_q1", "_CI_low")
av.columns = av.columns.str.replace("_q2", "_CI_high")
# Plot
if show is True:
for i in which:
plt.plot(av["Time"], av[f"{i}_Mean"], label=i)
plt.fill_between(
av["Time"],
av[f"{i}_CI_low"],
av[f"{i}_CI_high"],
alpha=0.3,
)
plt.legend()
return av