Using both EOC and ECG channels for artifact removal from EEG data

I’m relatively new to EEG analysis and to the MNE-Python ecosystem, and I’d appreciate some guidance on artifact removal using ICA.

Environment

  • MNE version: 1.10.2

  • Operating system: macOS 15.5 (MacBook Air M1)

Dataset overview

EEG   : 64 channels
EOG   : 3 channels
ECG   : 2 channels
MISC  : 3 channels
STIM  : 1 channel

Question

I would like to remove both ocular (EOG) and cardiac (ECG) artifacts from my EEG data using ICA, making proper use of the available EOG and ECG channels.

I’m currently unsure about:

  • The recommended workflow in MNE for handling both EOG and ECG artifacts

  • Whether ICA component identification for EOG and ECG should be done sequentially or jointly

  • Any best practices or common pitfalls for beginners

Could someone point me to:

  • A tutorial, example notebook, or documentation page that demonstrates this clearly

  • Or briefly describe the standard MNE approach for this scenario

I’m happy to provide a minimal working example if needed.

Thanks a lot in advance for your help, and apologies if this is a basic question — I’m still learning EEG preprocessing and MNE.

  1. Fit ICA to your raw (make sure to highpass filter at 1Hz!) or epochs.
  2. Use ica.find_bads_eog() and mark the EOG components you want to remove.
  3. Use ica.find_bads.ecg() and mark the ECG components you want to remove.
  4. Add all the components you want to remove to ica.exclude.
  5. Apply the ICA to data you want to clean, which will remove all the components in ica.exclude so if you put both EOG and ECG components there, they will all be removed.

For details on how to achieve these 5 steps, see the ICA tutorial: Repairing artifacts with ICA — MNE 1.11.0 documentation

Hope that helps!

1 Like