Skip to content

Chapter 4: Artifact Removal with ICA

Continuing from Chapter 3 — Preprocessing.

Filtering and re-referencing handle broad, predictable noise; independent component analysis (ICA) handles artifacts that overlap in frequency with real brain signal — chiefly eye blinks, eye movements, and muscle activity — the same problem tackled with code in the MNE-Python track's ICA chapter.

Running ICA

Tools → Decompose data by ICA runs a decomposition algorithm — runica (the classic Infomax algorithm) by default, or faster options like AMICA for larger datasets — splitting the recording into as many statistically independent components as there are channels. This can take anywhere from under a minute to tens of minutes depending on data length and channel count.

Looking at components

Once ICA finishes, three plots (all under Plot) help identify which components are artifacts rather than brain signal:

  • Component maps — a scalp topography per component; a blink component shows a sharp, symmetric pattern over the frontal electrodes.
  • Component activations — each component's time course; a blink component shows large, sparse spikes lining up with visible blinks in the raw scroll view.
  • Component spectra — a component dominated by muscle activity shows a broadband rise at high frequencies rather than the smooth 1/f-like shape of brain signal.

Letting a classifier help: ICLabel

Judging every component by eye works but is slow and inconsistent between people. The ICLabel plugin (installed the same way as ERPLAB, via File → Manage EEGLAB extensions) runs a trained classifier over every component and labels each one — Brain, Eye, Muscle, Heart, Line Noise, Channel Noise, or Other — with a confidence score, turning "does this look like a blink" into a number you can threshold consistently across subjects.

Removing the artifact components

Once you've marked which components are artifacts (by eye, by ICLabel, or both), Tools → Remove components from data subtracts exactly those components' contribution and reconstructs a cleaned recording — the same "remove, don't just ignore" approach as ica.apply() in MNE-Python.

Next: Chapter 5 — Events and Epoching