yasa.sw_detect¶
- yasa.sw_detect(data, sf=None, ch_names=None, hypno=None, include=(2, 3), freq_sw=(0.3, 1.5), dur_neg=(0.3, 1.5), dur_pos=(0.1, 1), amp_neg=(40, 200), amp_pos=(10, 150), amp_ptp=(75, 350), coupling=False, coupling_params={'freq_sp': (12, 16), 'p': 0.05, 'time': 1}, remove_outliers=False, verbose=False)[source]¶
Slow-waves detection.
- Parameters
- dataarray_like
Single or multi-channel data. Unit must be uV and shape (n_samples) or (n_chan, n_samples). Can also be a
mne.io.BaseRaw
, in which casedata
,sf
, andch_names
will be automatically extracted, anddata
will also be automatically converted from Volts (MNE) to micro-Volts (YASA).- sffloat
Sampling frequency of the data in Hz. Can be omitted if
data
is amne.io.BaseRaw
.Tip
If the detection is taking too long, make sure to downsample your data to 100 Hz (or 128 Hz). For more details, please refer to
mne.filter.resample()
.- ch_nameslist of str
Channel names. Can be omitted if
data
is amne.io.BaseRaw
.- hypnoarray_like
Sleep stage (hypnogram). If the hypnogram is loaded, the detection will only be applied to the value defined in
include
(default = N2 + N3 sleep).The hypnogram must have the same number of samples as
data
. To upsample your hypnogram, please refer toyasa.hypno_upsample_to_data()
.Note
The default hypnogram format in YASA is a 1D integer vector where:
-2 = Unscored
-1 = Artefact / Movement
0 = Wake
1 = N1 sleep
2 = N2 sleep
3 = N3 sleep
4 = REM sleep
- includetuple, list or int
Values in
hypno
that will be included in the mask. The default is (2, 3), meaning that the detection is applied on N2 and N3 sleep. This has no effect whenhypno
is None.- freq_swtuple or list
Slow wave frequency range. Default is 0.3 to 1.5 Hz. Please note that YASA uses a FIR filter (implemented in MNE) with a 0.2 Hz transition band, which means that the -6 dB points are located at 0.2 and 1.6 Hz.
- dur_negtuple or list
The minimum and maximum duration of the negative deflection of the slow wave. Default is 0.3 to 1.5 second.
- dur_postuple or list
The minimum and maximum duration of the positive deflection of the slow wave. Default is 0.1 to 1 second.
- amp_negtuple or list
Absolute minimum and maximum negative trough amplitude of the slow-wave. Default is 40 uV to 200 uV. Can also be in unit of standard deviations if the data has been previously z-scored. If you do not want to specify any negative amplitude thresholds, use
amp_neg=(None, None)
.- amp_postuple or list
Absolute minimum and maximum positive peak amplitude of the slow-wave. Default is 10 uV to 150 uV. Can also be in unit of standard deviations if the data has been previously z-scored. If you do not want to specify any positive amplitude thresholds, use
amp_pos=(None, None)
.- amp_ptptuple or list
Minimum and maximum peak-to-peak amplitude of the slow-wave. Default is 75 uV to 350 uV. Can also be in unit of standard deviations if the data has been previously z-scored. Use
np.inf
to set no upper amplitude threshold (e.g.amp_ptp=(75, np.inf)
).- couplingboolean
If True, YASA will also calculate the phase-amplitude coupling between the slow-waves phase and the spindles-related sigma band amplitude. Specifically, the following columns will be added to the output dataframe:
'SigmaPeak'
: The location (in seconds) of the maximum sigma peak amplitude within a 2-seconds epoch centered around the negative peak (through) of the current slow-wave.PhaseAtSigmaPeak
: the phase of the bandpas-filtered slow-wave signal (in radians) at'SigmaPeak'
.Importantly, since
PhaseAtSigmaPeak
is expressed in radians, one should use circular statistics to calculate the mean direction and vector length:import pingouin as pg mean_direction = pg.circ_mean(sw['PhaseAtSigmaPeak']) vector_length = pg.circ_r(sw['PhaseAtSigmaPeak'])
ndPAC
: the normalized Mean Vector Length (also called the normalized direct PAC, or ndPAC) within a 2-sec epoch centered around the negative peak of the slow-wave.
The lower and upper frequencies for the slow-waves and spindles-related sigma signals are defined in
freq_sw
andcoupling_params['freq_sp']
, respectively. For more details, please refer to the Jupyter notebookNote that setting
coupling=True
may increase computation time.New in version 0.2.0.
- coupling_paramsdict
Parameters for the phase-amplitude coupling.
freq_sp
is a tuple or list that defines the spindles-related frequency of interest. The default is 12 to 16 Hz, with a wide transition bandwidth of 1.5 Hz.time
is an int or a float that defines the time around the negative peak of each detected slow-waves, in seconds. For example, a value of 1 means that the coupling will be calculated for each slow-waves using a 2-seconds epoch centered around the negative peak of the slow-waves (i.e. 1 second on each side).p
is a parameter passed to thetensorpac.methods.norm_direct_pac`()
function. It represents the p-value to use for thresholding of unreliable coupling values. Sub-threshold PAC values will be set to 0. To disable this behavior (no masking), usep=1
orp=None
.
New in version 0.6.0.
- remove_outliersboolean
If True, YASA will automatically detect and remove outliers slow-waves using
sklearn.ensemble.IsolationForest
. The outliers detection is performed on the frequency, amplitude and duration parameters of the detected slow-waves. YASA uses a random seed (42) to ensure reproducible results. Note that this step will only be applied if there are more than 50 detected slow-waves in the first place. Default to False.- verbosebool or str
Verbose level. Default (False) will only print warning and error messages. The logging levels are ‘debug’, ‘info’, ‘warning’, ‘error’, and ‘critical’. For most users the choice is between ‘info’ (or
verbose=True
) and warning (verbose=False
).New in version 0.2.0.
- Returns
- sw
yasa.SWResults
To get the full detection dataframe, use:
>>> sw = sw_detect(...) >>> sw.summary()
This will give a
pandas.DataFrame
where each row is a detected slow-wave and each column is a parameter (= property). To get the average SW parameters per channel and sleep stage:>>> sw.summary(grp_chan=True, grp_stage=True)
- sw
Notes
The parameters that are calculated for each slow-wave are:
'Start'
: Start time of each detected slow-wave, in seconds from the beginning of data.'NegPeak'
: Location of the negative peak (in seconds)'MidCrossing'
: Location of the negative-to-positive zero-crossing (in seconds)'Pospeak'
: Location of the positive peak (in seconds)'End'
: End time(in seconds)'Duration'
: Duration (in seconds)'ValNegPeak'
: Amplitude of the negative peak (in uV, calculated on thefreq_sw
bandpass-filtered signal)'ValPosPeak'
: Amplitude of the positive peak (in uV, calculated on thefreq_sw
bandpass-filtered signal)'PTP'
: Peak-to-peak amplitude (=ValPosPeak
-ValNegPeak
, calculated on thefreq_sw
bandpass-filtered signal)'Slope'
: Slope betweenNegPeak
andMidCrossing
(in uV/sec, calculated on thefreq_sw
bandpass-filtered signal)'Frequency'
: Frequency of the slow-wave (= 1 /Duration
)'SigmaPeak'
: Location of the sigma peak amplitude within a 2-sec epoch centered around the negative peak of the slow-wave. This is only calculated whencoupling=True
.'PhaseAtSigmaPeak'
: SW phase at max sigma amplitude within a 2-sec epoch centered around the negative peak of the slow-wave. This is only calculated whencoupling=True
'ndPAC'
: Normalized direct PAC within a 2-sec epoch centered around the negative peak of the slow-wave. This is only calculated whencoupling=True
'Stage'
: Sleep stage (only if hypno was provided)
For better results, apply this detection only on artefact-free NREM sleep.
References
The slow-waves detection algorithm is based on:
Massimini, M., Huber, R., Ferrarelli, F., Hill, S., & Tononi, G. (2004). The sleep slow oscillation as a traveling wave.. The Journal of Neuroscience, 24(31), 6862–6870.
Carrier, J., Viens, I., Poirier, G., Robillard, R., Lafortune, M., Vandewalle, G., Martin, N., Barakat, M., Paquet, J., & Filipini, D. (2011). Sleep slow wave changes during the middle years of life.. The European Journal of Neuroscience, 33(4), 758–766.
Examples
For an example of how to run the detection, please refer to the tutorial: https://github.com/raphaelvallat/yasa/blob/master/notebooks/05_sw_detection.ipynb