Source code for neurokit2.eda.eda_changepoints
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
from ..signal import signal_changepoints
[docs]
def eda_changepoints(eda_cleaned, penalty=10000, show=False):
"""**Calculate Number of Change Points**
Calculate the number of change points using of the skin conductance signal in terms of mean
and variance.
.. note::
This function is somewhat experimental, and improvements or discussions about it are
welcome.
Parameters
----------
eda_cleaned : Union[list, np.array, pd.Series]
The cleaned EDA signal.
penalty : int
Defaults to an algorithm penalty of 10000, as recommended by Halem et al. (2020). See
:func:`.signal_changepoints`.
show : bool
Show the signal with the change points.
Returns
-------
float
Number of changepoints in the
See Also
--------
eda_simulate, .signal_changepoints
Examples
---------
.. ipython:: python
import neurokit2 as nk
# Simulate EDA signal
eda_signal = nk.eda_simulate(duration=5, sampling_rate=100, scr_number=5, drift=0.1)
eda_cleaned = nk.eda_clean(eda_signal, sampling_rate=100)
@savefig p_eda_changepoints1.png scale=100%
nk.eda_changepoints(eda_cleaned, penalty = 100, show=True)
@suppress
plt.close()
References
-----------
* van Halem, S., Van Roekel, E., Kroencke, L., Kuper, N., & Denissen, J. (2020). Moments that
matter? On the complexity of using triggers based on skin conductance to sample arousing
events within an experience sampling framework. European Journal of Personality, 34(5),
794-807.
"""
# Sanity checks
if not isinstance(eda_cleaned, np.ndarray):
if isinstance(eda_cleaned, pd.DataFrame):
colnames = eda_cleaned.columns.values
if len([i for i in colnames if "EDA_Clean" in i]) == 0:
raise ValueError(
"NeuroKit error: eda_changepoints(): Your input does not contain the cleaned EDA signal."
)
else:
eda_cleaned = eda_cleaned["EDA_Clean"]
eda_cleaned = np.array(eda_cleaned)
# Calculate changepoints based on mean and variance
changepoints = signal_changepoints(eda_cleaned, change="meanvar", show=show, penalty=penalty)
number = len(changepoints)
return number