Automatic EEG quality check & ICA for blink removal in 19-channel dry EEG

  • MNE version: e.g. 1.11.0
  • operating system: e.g. Ubuntu 24.04.1 LTS

Hello MNE forum,

I am currently preprocessing resting-state EEG data recorded from patients with Parkinson’s disease.

Each subject performed a 2-minute resting-state recording. At this stage, I have loaded all raw data and would like to check whether the recordings were properly acquired and whether the EEG data are usable (i.e., not severely corrupted by artifacts or technical problems).

My main concern is that:

  • I am not an EEG expert,

  • Visually inspecting every subject’s data is difficult,

  • And it is hard to apply consistent criteria across all participants.

So I would like to ask:

Is there an automatic pipeline in MNE to assess EEG data quality?

For example:

  • Detecting bad channels automatically

  • Identifying excessively noisy recordings

  • Checking whether the data are suitable for further analysis

If possible, I would like to combine:

  • Visual inspection

  • An automated quality assessment method

Do you have any recommendations for a good and robust approach?

2. ICA for blink removal in 19-channel dry EEG

My second question concerns eye-blink artifact removal.

This dataset contains 19-channel dry EEG only. We did not record dedicated EOG channels.

In previous BCI experiments, I always placed additional electrodes near the eyes to explicitly model and remove EOG activity.

In this case:

  • Is it appropriate to apply ICA for blink removal without EOG channels?

  • Is ICA reliable with only 19 channels?

  • Are there recommended best practices in MNE for this scenario?

Any advice or references would be greatly appreciated.

Thank you very much in advance!

1 Like

Hi! Welcome to the forum.

I’d really recommend checking out mne-report first. It generates a single HTML file that lets you scroll through Power Spectral Density (PSD) plots and sensor layouts for all subjects in one go—it’s perfect for spotting ‘severely corrupted’ data quickly.

For the actual cleaning, autoreject world work. It automatically calculates thresholds to find bad epochs and interpolate bad channels, which solves your problem of applying consistent criteria across your whole group.

typical question for a newer like me :rofl: mark and wait for excellent answer

Thank you very much, @PragnyaKhandelwal!

I looked into both mne-report and AutoReject as you suggested, and I also tried applying them to my own dataset.

I’ve been trying to go through various examples, tutorials, API documentation, and many posts on the MNE forum related to preprocessing. However, I’m still not entirely sure what the most appropriate preprocessing pipeline would be for my data. It’s quite challenging!

Because of that, I wrote a new post to ask more detailed questions about designing a consistent preprocessing pipeline. (Questions about building a consistent EEG preprocessing pipeline (resting-state))

If you happen to have time to take a look and share your thoughts, I would really appreciate it.

Thanks again for your helpful suggestion!

1 Like

Haha thanks! @Yijie_Huang Glad I’m not the only one wondering about this.

For understanding artifact removal process and identification with ICA I strongly recommend checking this test SCCN: Independent Component Labeling . After that and some manual trying out the method, I propose trying using ICLabel MNE-ICALabel — MNE-ICALabel and compare the manual labeling. Anyway there is a quite high chance of non-physiologist to remove some informative data, so consulting a specialist is also a good choice.

Taking into account that you are using dry electrodes — which tend to introduce more high-frequency artifacts (muscle noise, contact noise) compared to wet electrodes — you will probably want to apply a low-frequency filter before running ICA to improve component separation and reduce the chance of artifact contamination in your components of interest.

1 Like

Well @Contamior’s suggestion about mne-icalabel is a good call—I didn’t have that on my radar, but it’s a perfect fit for keeping your pipeline consistent @Ananta. Thanks for the tip, @Contamior!

@Ananta, if you add that into the mix, it’ll definitely take a lot of the guesswork out of your ICA.

@Contamior Thank you very much for the helpful suggestions!

Currently, I am using ICLabel with a threshold (around 0.6–0.7) to automatically classify components. I’ve also been studying the SCCN resources you mentioned to better understand ICA-based artifact identification.

Following examples that combine ICLabel and AutoReject, I am currently applying a 1 Hz high-pass filter before fitting ICA, which seems to be a commonly recommended approach.

I also have one additional question related to ICA in my dataset.

Since my recordings contain 19 EEG channels, I sometimes observe that ICA decomposes the data into a very small number of components (e.g., 3 or 5 components) for some subjects.

Do you have any recommendations regarding what would be a reasonable number of components when applying ICA to 19-channel EEG data?

In particular, if ICA results in such a small number of components, would that indicate poor data quality, and should those datasets potentially be excluded from further analysis?

Thanks again for your advice—I really appreciate it!

Thank you for the reply! @PragnyaKhandelwal

At the moment, I am analyzing the data using a preprocessing pipeline that combines AutoReject and ICLabel, as suggested.

If I may ask one more question: since my dataset contains 19 EEG channels, I sometimes observe that ICA decomposes the data into a very small number of components (e.g., 3 or 5 components) for some subjects.

Do you have any advice on what would be a reasonable number of components when applying ICA to 19-channel EEG data?

In particular, if ICA produces such a small number of components, would that indicate poor data quality, and should those datasets potentially be excluded from further analysis?

Thanks again for your help!! I really appreciate it!

Hey @Ananta, I’m still getting the hang of the ICA logic myself, but 3-5 components for 19 channels definitely sounds like a red flag.

I was just looking at the mne.preprocessing.ICA docs for my own work, and it seems like if n_components is None, the PCA step might just be tossing out anything that doesn’t have enough variance. Since you’re on dry electrodes, maybe there’s just too much noise or drift for the ICA to ‘find’ the actual neural signals?

I’d probably trust your gut—if the raw signal looks ‘off’ to you, it might just be a quality issue with those specific subjects. Maybe try checking the PSD plots to see if the noise is just too much to handle?

1 Like

Thanks for your reply!! @PragnyaKhandelwal and sorry for late response!

After going through more MNE documentation and taking a closer look at my data, I’ve come to the conclusion that I probably won’t be able to obtain the results I was hoping for with this dataset.

It’s quite unfortunate, but I think the data quality might just be too limited for my purposes.

Thanks again for your help—I really appreciate it!

1 Like