Skip to content

This is a forked repository where I modify YASA (Yet Another Spindle Algorithm): a Python package by Raphael Vallat to analyze my polysomnographic sleep recordings of elephant seals.

License

Notifications You must be signed in to change notification settings

jmkendallbar/yasa_seals

 
 

Repository files navigation

image

image

image

image

image


YASA (Yet Another Spindle Algorithm) is a sleep analysis toolbox in Python. YASA includes several fast and convenient command-line functions to:

  • Perform automatic sleep staging.
  • Detect sleep spindles, slow-waves, and rapid eye movements on single and multi-channel EEG data.
  • Reject major artifacts on single or multi-channel EEG data.
  • Perform advanced spectral analyses: spectral bandpower, phase-amplitude coupling, event-locked analyses, 1/f, and more!
  • Manipulate hypnogram and calculate sleep statistics.

For more details, check out the API documentation or try the tutorial (Jupyter notebooks).


Installation

To install YASA, simply open a terminal or Anaconda command prompt and enter:

pip install --upgrade yasa

What are the prerequisites for using YASA?

To use YASA, all you need is:

  • Some basic knowledge of Python, especially the NumPy, Pandas and MNE packages.
  • A Python editor: YASA works best with Jupyter Lab, a web-based interactive user interface.
  • Some sleep EEG data and optionally a sleep staging file (hypnogram) to perform calculations on specific sleep stages. To facilitate masking and indexing operations, the data and hypnogram must have the same sampling frequency and number of samples. YASA provide some convenient functions to load and upsample hypnogram data to the desired shape.

I have sleep EEG data in European Data Format (.edf), how do I load the data in Python?

If you have sleep EEG data in standard formats (e.g. EDF or BrainVision), you can use the MNE package to load and preprocess your data in Python. A simple preprocessing pipeline using MNE is shown below:

import mne
# Load the EDF file, excluding the EOGs and EKG channels
raw = mne.io.read_raw_edf('MYEDFFILE.edf', preload=True, exclude=['EOG1', 'EOG2', 'EKG'])
raw.resample(100)                      # Downsample the data to 100 Hz
raw.filter(0.1, 40)                    # Apply a bandpass filter from 0.1 to 40 Hz
raw.pick_channels(['C4-A1', 'C3-A2'])  # Select a subset of EEG channels

How do I get started with YASA?

If you want to dive right in, you can simply go to the documentation and try to apply YASA's functions on your own EEG data. However, for most users, we strongly recommend that you first try running the examples Jupyter notebooks to get a sense of how YASA works and what it can do! The advantage is that the notebooks also come with example datasets so they should work right out of the box as long as you've installed YASA first. The notebooks and datasets can be found on GitHub (make sure that you download the whole notebooks/ folder). A short description of all notebooks is provided below:

Spindles detection

Slow-waves detection

  • 05_sw_detection: single-channel slow-waves detection and step-by-step description of the slow-waves detection algorithm.
  • 06_sw_detection_multi: multi-channel slow-waves detection.

Rapid Eye Movements (REMs) detection

Spectral analysis

  • 08_bandpower: calculate spectral band power, optionally averaged across channels and sleep stages.
  • 09_IRASA: separate the aperiodic (= fractal = 1/f) components of the EEG power spectrum using the IRASA method.
  • 10_spectrogram: plot a multi-taper full-night spectrogram on single-channel EEG data with the hypnogram on top.
  • 11_nonlinear_features: calculate non-linear EEG features on 30-seconds epochs and perform sleep stage classification.
  • 12_spindles-SO_coupling: slow-oscillations/spindles phase-amplitude coupling and data-driven comodulogram.

Artifact rejection

Automatic sleep staging

Gallery

Below some plots demonstrating the functionalities of YASA. To reproduce these, check out the tutorial (Jupyter notebooks).

The two top plots show an overlay of the detected spindles (blue) and slow-waves (red) on real EEG data. The middle right panel shows a time-frequency representation of the whole-night recording (spectrogram), plotted with the hypnogram (sleep stages) on top. The middle right panel shows the sleep stage probability transition matrix, calculated across the entire night. The left and right plots of the bottom row show the average template of all detected slow-waves and spindles across the entire night, stratified by channels. The middle bottom plot shows a phase-amplitude coupling comodulogram between slower (0.2-4Hz) and faster (7.5-25Hz) frequency ranges.

The two top plots show an overlay of the detected spindles (blue) and slow-waves (red) on real EEG data. The middle right panel shows a time-frequency representation of the whole-night recording (spectrogram), plotted with the hypnogram (sleep stages) on top. The middle right panel shows the sleep stage probability transition matrix, calculated across the entire night. The left and right plots of the bottom row show the average template of all detected slow-waves and spindles across the entire night, stratified by channels. The middle bottom plot shows a phase-amplitude coupling comodulogram between slower (0.2-4Hz) and faster (7.5-25Hz) frequency ranges.

Development

YASA was created and is maintained by Raphael Vallat. Contributions are more than welcome so feel free to contact me, open an issue or submit a pull request!

To see the code or report a bug, please visit the GitHub repository.

Note that this program is provided with NO WARRANTY OF ANY KIND.

Citation

To cite YASA, please use the Zenodo DOI:

image

About

This is a forked repository where I modify YASA (Yet Another Spindle Algorithm): a Python package by Raphael Vallat to analyze my polysomnographic sleep recordings of elephant seals.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%