Plot channel-level thresholds#

This example demonstrates how to use autoreject to find channel-wise thresholds.

# Author: Mainak Jas <mainak.jas@telecom-paristech.fr>
# License: BSD-3-Clause

Let us first load the raw data using mne.io.read_raw_fif().

import mne
from mne import io
from mne.datasets import sample

data_path = sample.data_path()
meg_path = data_path / 'MEG' / 'sample'
raw_fname = meg_path / 'sample_audvis_filt-0-40_raw.fif'
raw = io.read_raw_fif(raw_fname, preload=True)
Opening raw data file /home/circleci/mne_data/MNE-sample-data/MEG/sample/sample_audvis_filt-0-40_raw.fif...
    Read a total of 4 projection items:
        PCA-v1 (1 x 102)  idle
        PCA-v2 (1 x 102)  idle
        PCA-v3 (1 x 102)  idle
        Average EEG reference (1 x 60)  idle
    Range : 6450 ... 48149 =     42.956 ...   320.665 secs
Ready.
Reading 0 ... 41699  =      0.000 ...   277.709 secs...

We can extract the events (or triggers) for epoching our signal.

event_fname = meg_path / 'sample_audvis_filt-0-40_raw-eve.fif'
event_id = {'Auditory/Left': 1}
tmin, tmax = -0.2, 0.5
events = mne.read_events(event_fname)

Now that we have the events, we can extract the trials for the selection of channels defined by picks.

epochs = mne.Epochs(raw, events, event_id, tmin, tmax,
                    baseline=(None, 0),
                    reject=None, verbose=False, preload=True)

picks = mne.pick_types(epochs.info, meg='grad', eeg=False, stim=False,
                       eog=False, exclude='bads')

Now, we compute the channel-level thresholds using autoreject.compute_thresholds(). The method parameter will determine how we will search for thresholds over a range of potential candidates.

import numpy as np  # noqa
from autoreject import compute_thresholds  # noqa

# Get a dictionary of rejection thresholds
threshes = compute_thresholds(epochs, picks=picks, method='random_search',
                              random_state=42, augment=False,
                              verbose=True)
/home/circleci/project/autoreject/utils.py:73: UserWarning: 2 channels are marked as bad. These will be ignored. If you want them to be considered by autoreject please remove them from epochs.info["bads"].
  warnings.warn(

  0%|          | Computing thresholds ... : 0/203 [00:00<?,       ?it/s]
  0%|          | Computing thresholds ... : 1/203 [00:00<00:24,    8.22it/s]
  1%|          | Computing thresholds ... : 2/203 [00:00<00:22,    8.78it/s]
  1%|▏         | Computing thresholds ... : 3/203 [00:00<00:22,    8.98it/s]
  2%|▏         | Computing thresholds ... : 4/203 [00:00<00:21,    9.09it/s]
  2%|▏         | Computing thresholds ... : 5/203 [00:00<00:21,    9.17it/s]
  3%|▎         | Computing thresholds ... : 6/203 [00:00<00:21,    9.19it/s]
  3%|▎         | Computing thresholds ... : 7/203 [00:00<00:21,    9.23it/s]
  4%|▍         | Computing thresholds ... : 8/203 [00:00<00:21,    9.25it/s]
  4%|▍         | Computing thresholds ... : 9/203 [00:00<00:20,    9.27it/s]
  5%|▍         | Computing thresholds ... : 10/203 [00:01<00:20,    9.29it/s]
  5%|▌         | Computing thresholds ... : 11/203 [00:01<00:20,    9.29it/s]
  6%|▌         | Computing thresholds ... : 12/203 [00:01<00:20,    9.30it/s]
  6%|▋         | Computing thresholds ... : 13/203 [00:01<00:20,    9.31it/s]
  7%|▋         | Computing thresholds ... : 14/203 [00:01<00:20,    9.32it/s]
  7%|▋         | Computing thresholds ... : 15/203 [00:01<00:20,    9.32it/s]
  8%|▊         | Computing thresholds ... : 16/203 [00:01<00:20,    9.32it/s]
  8%|▊         | Computing thresholds ... : 17/203 [00:01<00:19,    9.32it/s]
  9%|▉         | Computing thresholds ... : 18/203 [00:01<00:19,    9.32it/s]
  9%|▉         | Computing thresholds ... : 19/203 [00:02<00:19,    9.32it/s]
 10%|▉         | Computing thresholds ... : 20/203 [00:02<00:19,    9.31it/s]
 10%|█         | Computing thresholds ... : 21/203 [00:02<00:19,    9.32it/s]
 11%|█         | Computing thresholds ... : 22/203 [00:02<00:19,    9.32it/s]
 11%|█▏        | Computing thresholds ... : 23/203 [00:02<00:19,    9.32it/s]
 12%|█▏        | Computing thresholds ... : 24/203 [00:02<00:19,    9.32it/s]
 12%|█▏        | Computing thresholds ... : 25/203 [00:02<00:19,    9.31it/s]
 13%|█▎        | Computing thresholds ... : 26/203 [00:02<00:19,    9.31it/s]
 13%|█▎        | Computing thresholds ... : 27/203 [00:02<00:18,    9.31it/s]
 14%|█▍        | Computing thresholds ... : 28/203 [00:03<00:18,    9.31it/s]
 14%|█▍        | Computing thresholds ... : 29/203 [00:03<00:18,    9.31it/s]
 15%|█▍        | Computing thresholds ... : 30/203 [00:03<00:18,    9.31it/s]
 15%|█▌        | Computing thresholds ... : 31/203 [00:03<00:18,    9.31it/s]
 16%|█▌        | Computing thresholds ... : 32/203 [00:03<00:18,    9.30it/s]
 16%|█▋        | Computing thresholds ... : 33/203 [00:03<00:18,    9.30it/s]
 17%|█▋        | Computing thresholds ... : 34/203 [00:03<00:18,    9.30it/s]
 17%|█▋        | Computing thresholds ... : 35/203 [00:03<00:18,    9.30it/s]
 18%|█▊        | Computing thresholds ... : 36/203 [00:03<00:17,    9.29it/s]
 18%|█▊        | Computing thresholds ... : 37/203 [00:03<00:17,    9.27it/s]
 19%|█▊        | Computing thresholds ... : 38/203 [00:04<00:17,    9.26it/s]
 19%|█▉        | Computing thresholds ... : 39/203 [00:04<00:17,    9.26it/s]
 20%|█▉        | Computing thresholds ... : 40/203 [00:04<00:17,    9.26it/s]
 20%|██        | Computing thresholds ... : 41/203 [00:04<00:17,    9.26it/s]
 21%|██        | Computing thresholds ... : 42/203 [00:04<00:17,    9.26it/s]
 21%|██        | Computing thresholds ... : 43/203 [00:04<00:17,    9.25it/s]
 22%|██▏       | Computing thresholds ... : 44/203 [00:04<00:17,    9.25it/s]
 22%|██▏       | Computing thresholds ... : 45/203 [00:04<00:17,    9.25it/s]
 23%|██▎       | Computing thresholds ... : 46/203 [00:04<00:16,    9.24it/s]
 23%|██▎       | Computing thresholds ... : 47/203 [00:05<00:17,    9.17it/s]
 24%|██▎       | Computing thresholds ... : 48/203 [00:05<00:17,    9.04it/s]
 24%|██▍       | Computing thresholds ... : 49/203 [00:05<00:17,    8.93it/s]
 25%|██▍       | Computing thresholds ... : 50/203 [00:05<00:17,    8.93it/s]
 25%|██▌       | Computing thresholds ... : 51/203 [00:05<00:16,    8.95it/s]
 26%|██▌       | Computing thresholds ... : 52/203 [00:05<00:16,    8.96it/s]
 26%|██▌       | Computing thresholds ... : 53/203 [00:05<00:16,    8.97it/s]
 27%|██▋       | Computing thresholds ... : 54/203 [00:05<00:16,    8.98it/s]
 27%|██▋       | Computing thresholds ... : 55/203 [00:06<00:16,    8.99it/s]
 28%|██▊       | Computing thresholds ... : 56/203 [00:06<00:16,    9.00it/s]
 28%|██▊       | Computing thresholds ... : 57/203 [00:06<00:16,    9.02it/s]
 29%|██▊       | Computing thresholds ... : 58/203 [00:06<00:16,    9.03it/s]
 29%|██▉       | Computing thresholds ... : 59/203 [00:06<00:15,    9.04it/s]
 30%|██▉       | Computing thresholds ... : 60/203 [00:06<00:15,    9.05it/s]
 30%|███       | Computing thresholds ... : 61/203 [00:06<00:15,    9.06it/s]
 31%|███       | Computing thresholds ... : 62/203 [00:06<00:15,    9.07it/s]
 31%|███       | Computing thresholds ... : 63/203 [00:06<00:15,    9.08it/s]
 32%|███▏      | Computing thresholds ... : 64/203 [00:06<00:15,    9.09it/s]
 32%|███▏      | Computing thresholds ... : 65/203 [00:07<00:15,    9.10it/s]
 33%|███▎      | Computing thresholds ... : 66/203 [00:07<00:15,    9.11it/s]
 33%|███▎      | Computing thresholds ... : 67/203 [00:07<00:14,    9.12it/s]
 33%|███▎      | Computing thresholds ... : 68/203 [00:07<00:14,    9.12it/s]
 34%|███▍      | Computing thresholds ... : 69/203 [00:07<00:14,    9.12it/s]
 34%|███▍      | Computing thresholds ... : 70/203 [00:07<00:14,    9.13it/s]
 35%|███▍      | Computing thresholds ... : 71/203 [00:07<00:14,    9.13it/s]
 35%|███▌      | Computing thresholds ... : 72/203 [00:07<00:14,    9.14it/s]
 36%|███▌      | Computing thresholds ... : 73/203 [00:07<00:14,    9.14it/s]
 36%|███▋      | Computing thresholds ... : 74/203 [00:08<00:14,    9.14it/s]
 37%|███▋      | Computing thresholds ... : 75/203 [00:08<00:13,    9.15it/s]
 37%|███▋      | Computing thresholds ... : 76/203 [00:08<00:13,    9.15it/s]
 38%|███▊      | Computing thresholds ... : 77/203 [00:08<00:13,    9.16it/s]
 38%|███▊      | Computing thresholds ... : 78/203 [00:08<00:13,    9.17it/s]
 39%|███▉      | Computing thresholds ... : 79/203 [00:08<00:13,    9.17it/s]
 39%|███▉      | Computing thresholds ... : 80/203 [00:08<00:13,    9.17it/s]
 40%|███▉      | Computing thresholds ... : 81/203 [00:08<00:13,    9.18it/s]
 40%|████      | Computing thresholds ... : 82/203 [00:08<00:13,    9.18it/s]
 41%|████      | Computing thresholds ... : 83/203 [00:09<00:13,    9.19it/s]
 41%|████▏     | Computing thresholds ... : 84/203 [00:09<00:12,    9.19it/s]
 42%|████▏     | Computing thresholds ... : 85/203 [00:09<00:12,    9.20it/s]
 42%|████▏     | Computing thresholds ... : 86/203 [00:09<00:12,    9.20it/s]
 43%|████▎     | Computing thresholds ... : 87/203 [00:09<00:12,    9.20it/s]
 43%|████▎     | Computing thresholds ... : 88/203 [00:09<00:12,    9.20it/s]
 44%|████▍     | Computing thresholds ... : 89/203 [00:09<00:12,    9.21it/s]
 44%|████▍     | Computing thresholds ... : 90/203 [00:09<00:12,    9.21it/s]
 45%|████▍     | Computing thresholds ... : 91/203 [00:09<00:12,    9.21it/s]
 45%|████▌     | Computing thresholds ... : 92/203 [00:10<00:12,    9.21it/s]
 46%|████▌     | Computing thresholds ... : 93/203 [00:10<00:11,    9.21it/s]
 46%|████▋     | Computing thresholds ... : 94/203 [00:10<00:11,    9.21it/s]
 47%|████▋     | Computing thresholds ... : 95/203 [00:10<00:11,    9.22it/s]
 47%|████▋     | Computing thresholds ... : 96/203 [00:10<00:11,    9.22it/s]
 48%|████▊     | Computing thresholds ... : 97/203 [00:10<00:11,    9.22it/s]
 48%|████▊     | Computing thresholds ... : 98/203 [00:10<00:11,    9.16it/s]
 49%|████▉     | Computing thresholds ... : 99/203 [00:10<00:11,    9.06it/s]
 49%|████▉     | Computing thresholds ... : 100/203 [00:10<00:11,    9.07it/s]
 50%|████▉     | Computing thresholds ... : 101/203 [00:11<00:11,    9.08it/s]
 50%|█████     | Computing thresholds ... : 102/203 [00:11<00:11,    9.09it/s]
 51%|█████     | Computing thresholds ... : 103/203 [00:11<00:10,    9.10it/s]
 51%|█████     | Computing thresholds ... : 104/203 [00:11<00:10,    9.11it/s]
 52%|█████▏    | Computing thresholds ... : 105/203 [00:11<00:10,    9.12it/s]
 52%|█████▏    | Computing thresholds ... : 106/203 [00:11<00:10,    9.12it/s]
 53%|█████▎    | Computing thresholds ... : 107/203 [00:11<00:10,    9.12it/s]
 53%|█████▎    | Computing thresholds ... : 108/203 [00:11<00:10,    9.13it/s]
 54%|█████▎    | Computing thresholds ... : 109/203 [00:11<00:10,    9.13it/s]
 54%|█████▍    | Computing thresholds ... : 110/203 [00:12<00:10,    9.14it/s]
 55%|█████▍    | Computing thresholds ... : 111/203 [00:12<00:10,    9.14it/s]
 55%|█████▌    | Computing thresholds ... : 112/203 [00:12<00:09,    9.14it/s]
 56%|█████▌    | Computing thresholds ... : 113/203 [00:12<00:09,    9.15it/s]
 56%|█████▌    | Computing thresholds ... : 114/203 [00:12<00:09,    9.16it/s]
 57%|█████▋    | Computing thresholds ... : 115/203 [00:12<00:09,    9.16it/s]
 57%|█████▋    | Computing thresholds ... : 116/203 [00:12<00:09,    9.16it/s]
 58%|█████▊    | Computing thresholds ... : 117/203 [00:12<00:09,    9.17it/s]
 58%|█████▊    | Computing thresholds ... : 118/203 [00:12<00:09,    9.17it/s]
 59%|█████▊    | Computing thresholds ... : 119/203 [00:12<00:09,    9.18it/s]
 59%|█████▉    | Computing thresholds ... : 120/203 [00:13<00:09,    9.18it/s]
 60%|█████▉    | Computing thresholds ... : 121/203 [00:13<00:08,    9.18it/s]
 60%|██████    | Computing thresholds ... : 122/203 [00:13<00:08,    9.19it/s]
 61%|██████    | Computing thresholds ... : 123/203 [00:13<00:08,    9.19it/s]
 61%|██████    | Computing thresholds ... : 124/203 [00:13<00:08,    9.19it/s]
 62%|██████▏   | Computing thresholds ... : 125/203 [00:13<00:08,    9.20it/s]
 62%|██████▏   | Computing thresholds ... : 126/203 [00:13<00:08,    9.21it/s]
 63%|██████▎   | Computing thresholds ... : 127/203 [00:13<00:08,    9.21it/s]
 63%|██████▎   | Computing thresholds ... : 128/203 [00:13<00:08,    9.21it/s]
 64%|██████▎   | Computing thresholds ... : 129/203 [00:14<00:08,    9.21it/s]
 64%|██████▍   | Computing thresholds ... : 130/203 [00:14<00:07,    9.21it/s]
 65%|██████▍   | Computing thresholds ... : 131/203 [00:14<00:07,    9.21it/s]
 65%|██████▌   | Computing thresholds ... : 132/203 [00:14<00:07,    9.22it/s]
 66%|██████▌   | Computing thresholds ... : 133/203 [00:14<00:07,    9.22it/s]
 66%|██████▌   | Computing thresholds ... : 134/203 [00:14<00:07,    9.23it/s]
 67%|██████▋   | Computing thresholds ... : 135/203 [00:14<00:07,    9.22it/s]
 67%|██████▋   | Computing thresholds ... : 136/203 [00:14<00:07,    9.22it/s]
 67%|██████▋   | Computing thresholds ... : 137/203 [00:14<00:07,    9.22it/s]
 68%|██████▊   | Computing thresholds ... : 138/203 [00:15<00:07,    9.23it/s]
 68%|██████▊   | Computing thresholds ... : 139/203 [00:15<00:06,    9.23it/s]
 69%|██████▉   | Computing thresholds ... : 140/203 [00:15<00:06,    9.23it/s]
 69%|██████▉   | Computing thresholds ... : 141/203 [00:15<00:06,    9.23it/s]
 70%|██████▉   | Computing thresholds ... : 142/203 [00:15<00:06,    9.23it/s]
 70%|███████   | Computing thresholds ... : 143/203 [00:15<00:06,    9.23it/s]
 71%|███████   | Computing thresholds ... : 144/203 [00:15<00:06,    9.23it/s]
 71%|███████▏  | Computing thresholds ... : 145/203 [00:15<00:06,    9.22it/s]
 72%|███████▏  | Computing thresholds ... : 146/203 [00:15<00:06,    9.23it/s]
 72%|███████▏  | Computing thresholds ... : 147/203 [00:16<00:06,    9.23it/s]
 73%|███████▎  | Computing thresholds ... : 148/203 [00:16<00:05,    9.23it/s]
 73%|███████▎  | Computing thresholds ... : 149/203 [00:16<00:05,    9.23it/s]
 74%|███████▍  | Computing thresholds ... : 150/203 [00:16<00:05,    9.16it/s]
 74%|███████▍  | Computing thresholds ... : 151/203 [00:16<00:05,    9.16it/s]
 75%|███████▍  | Computing thresholds ... : 152/203 [00:16<00:05,    9.17it/s]
 75%|███████▌  | Computing thresholds ... : 153/203 [00:16<00:05,    9.18it/s]
 76%|███████▌  | Computing thresholds ... : 154/203 [00:16<00:05,    9.19it/s]
 76%|███████▋  | Computing thresholds ... : 155/203 [00:16<00:05,    9.19it/s]
 77%|███████▋  | Computing thresholds ... : 156/203 [00:16<00:05,    9.20it/s]
 77%|███████▋  | Computing thresholds ... : 157/203 [00:17<00:04,    9.20it/s]
 78%|███████▊  | Computing thresholds ... : 158/203 [00:17<00:04,    9.20it/s]
 78%|███████▊  | Computing thresholds ... : 159/203 [00:17<00:04,    9.21it/s]
 79%|███████▉  | Computing thresholds ... : 160/203 [00:17<00:04,    9.21it/s]
 79%|███████▉  | Computing thresholds ... : 161/203 [00:17<00:04,    9.21it/s]
 80%|███████▉  | Computing thresholds ... : 162/203 [00:17<00:04,    9.19it/s]
 80%|████████  | Computing thresholds ... : 163/203 [00:17<00:04,    9.20it/s]
 81%|████████  | Computing thresholds ... : 164/203 [00:17<00:04,    9.20it/s]
 81%|████████▏ | Computing thresholds ... : 165/203 [00:17<00:04,    9.21it/s]
 82%|████████▏ | Computing thresholds ... : 166/203 [00:18<00:04,    9.21it/s]
 82%|████████▏ | Computing thresholds ... : 167/203 [00:18<00:03,    9.21it/s]
 83%|████████▎ | Computing thresholds ... : 168/203 [00:18<00:03,    9.22it/s]
 83%|████████▎ | Computing thresholds ... : 169/203 [00:18<00:03,    9.22it/s]
 84%|████████▎ | Computing thresholds ... : 170/203 [00:18<00:03,    9.22it/s]
 84%|████████▍ | Computing thresholds ... : 171/203 [00:18<00:03,    9.23it/s]
 85%|████████▍ | Computing thresholds ... : 172/203 [00:18<00:03,    9.23it/s]
 85%|████████▌ | Computing thresholds ... : 173/203 [00:18<00:03,    9.24it/s]
 86%|████████▌ | Computing thresholds ... : 174/203 [00:18<00:03,    9.24it/s]
 86%|████████▌ | Computing thresholds ... : 175/203 [00:19<00:03,    9.24it/s]
 87%|████████▋ | Computing thresholds ... : 176/203 [00:19<00:02,    9.24it/s]
 87%|████████▋ | Computing thresholds ... : 177/203 [00:19<00:02,    9.24it/s]
 88%|████████▊ | Computing thresholds ... : 178/203 [00:19<00:02,    9.24it/s]
 88%|████████▊ | Computing thresholds ... : 179/203 [00:19<00:02,    9.24it/s]
 89%|████████▊ | Computing thresholds ... : 180/203 [00:19<00:02,    9.24it/s]
 89%|████████▉ | Computing thresholds ... : 181/203 [00:19<00:02,    9.24it/s]
 90%|████████▉ | Computing thresholds ... : 182/203 [00:19<00:02,    9.24it/s]
 90%|█████████ | Computing thresholds ... : 183/203 [00:19<00:02,    9.25it/s]
 91%|█████████ | Computing thresholds ... : 184/203 [00:20<00:02,    9.25it/s]
 91%|█████████ | Computing thresholds ... : 185/203 [00:20<00:01,    9.25it/s]
 92%|█████████▏| Computing thresholds ... : 186/203 [00:20<00:01,    9.25it/s]
 92%|█████████▏| Computing thresholds ... : 187/203 [00:20<00:01,    9.25it/s]
 93%|█████████▎| Computing thresholds ... : 188/203 [00:20<00:01,    9.25it/s]
 93%|█████████▎| Computing thresholds ... : 189/203 [00:20<00:01,    9.25it/s]
 94%|█████████▎| Computing thresholds ... : 190/203 [00:20<00:01,    9.26it/s]
 94%|█████████▍| Computing thresholds ... : 191/203 [00:20<00:01,    9.26it/s]
 95%|█████████▍| Computing thresholds ... : 192/203 [00:20<00:01,    9.26it/s]
 95%|█████████▌| Computing thresholds ... : 193/203 [00:20<00:01,    9.26it/s]
 96%|█████████▌| Computing thresholds ... : 194/203 [00:21<00:00,    9.27it/s]
 96%|█████████▌| Computing thresholds ... : 195/203 [00:21<00:00,    9.27it/s]
 97%|█████████▋| Computing thresholds ... : 196/203 [00:21<00:00,    9.27it/s]
 97%|█████████▋| Computing thresholds ... : 197/203 [00:21<00:00,    9.27it/s]
 98%|█████████▊| Computing thresholds ... : 198/203 [00:21<00:00,    9.28it/s]
 98%|█████████▊| Computing thresholds ... : 199/203 [00:21<00:00,    9.28it/s]
 99%|█████████▊| Computing thresholds ... : 200/203 [00:21<00:00,    9.28it/s]
 99%|█████████▉| Computing thresholds ... : 201/203 [00:21<00:00,    9.28it/s]
100%|█████████▉| Computing thresholds ... : 202/203 [00:21<00:00,    9.28it/s]
100%|██████████| Computing thresholds ... : 203/203 [00:22<00:00,    9.28it/s]
100%|██████████| Computing thresholds ... : 203/203 [00:22<00:00,    9.20it/s]

Finally, let us plot a histogram of the channel-level thresholds to verify that the thresholds are indeed different for different sensors.

import matplotlib.pyplot as plt  # noqa
from autoreject import set_matplotlib_defaults  # noqa
set_matplotlib_defaults(plt)

unit = r'fT/cm'
scaling = 1e13

plt.figure(figsize=(6, 5))
plt.tick_params(axis='x', which='both', bottom='off', top='off')
plt.tick_params(axis='y', which='both', left='off', right='off')

plt.hist(scaling * np.array(list(threshes.values())), 30,
         color='g', alpha=0.4)
plt.xlabel('Threshold (%s)' % unit)
plt.ylabel('Number of sensors')
plt.xlim((100, 950))
plt.tight_layout()
plt.show()
plot channel thresholds

Total running time of the script: (0 minutes 22.729 seconds)

Gallery generated by Sphinx-Gallery