How to treat ocular artifacts for visual tasks

Hello everyone,

I have been working on an MNE pipeline for MEG data, and I found something I wasn’t expecting when preprocessing the localizer data: if I removed ocular artifacts during the ICA step, the SNR of the data would, on average, decrease. I calculated the SNR by getting all channel/timepoint pairs within epochs, and then calculating the mean signal across all epochs divided by the standard error.

The task is visual, and the events that the epochs track are stimulus onsets and some type of response. I was told that ocular artifacts increasing SNR (especially for the onset epochs) is actually not that surprising, given the visual nature of the events in the task. However, I understand it is probably not principled to leave them in. Other than removing the ocular artifacts, is there something I should be doing with them? I have heard about using them as spatial filters, but I am not sure how that works or if it is relevant in my situation.

For reference, my current preprocessing pipeline goes as follows:

  1. bandpass filer (1-40hz)
  2. interactive bad channel removal
  3. Empty room projection: PCA on empty room recording, projectors applied to data to remove environmental noise
  4. ICA: fit on the PCA-projected data. So far, I’ve only been removing heartbeats and other ecg artifacts.
  5. AutoReject for some final cleanup.

Thank you very much in advance for your thoughts and feedback!

A decrease in this SNR after ocular ICA removal does not necessarily mean that the cleaned data are worse.

With a mean-across-epochs divided by the standard error, any signal that is consistently time-locked to the event — including a blink or saccade — may increase the apparent SNR. This can be especially relevant in a visual task.

I would check:

  • the SNR separately by sensor and time point rather than averaging all channel–time pairs;
  • the EOG channel and candidate ICA component epoched around stimulus onset;
  • the component topography and its time course;
  • the expected neural response before and after removing the component.

For example, if the component has a frontal/orbital topography and follows the EOG signal, removing it is probably appropriate even if the global SNR decreases. If it also contains a plausible occipital response, the ICA separation may be incomplete and the component should be inspected more carefully.

SSP is an alternative spatial correction method, not something I would automatically add after ICA. Depending on the experiment, rejecting trials with large eye movements or using eye-tracking/fixation criteria may also be useful.

Thank you very much @viranovskaya for the advice! Yes, I think I will start removing ocular artifacts. Are the following components, 000 & 005, examples of ocular artifacts that should be removed? I am confident about 000, but less sure about 005. Thank you very much again for the help!

Both ICA000 and ICA005 look like plausible ocular components. ICA000 appears more lateralized and may reflect horizontal eye movements or saccades, whereas ICA005 has a broader, more symmetric anterior pattern that may reflect blinks or vertical eye movements.

I would confirm both using their EOG correlations and component properties before excluding them. If EOG channels were recorded, I would check:

eog_inds, eog_scores = ica.find_bads_eog(raw)
ica.plot_scores(eog_scores)
ica.plot_properties(raw, picks=[0, 5])

eog_epochs = mne.preprocessing.create_eog_epochs(raw)
ica.plot_sources(eog_epochs.average())

I would also compare the event-related response after excluding ICA000 alone and after excluding both ICA000 and ICA005. If ICA005 correlates strongly with EOG activity and is consistently expressed around detected eye events, excluding it is reasonable. If it is weakly related to EOG or contains a plausible task-related response, I would inspect it further before removal.

The component sign and topomap colours themselves are arbitrary, so the spatial pattern, time course and relationship with the EOG signal are more informative than polarity alone.

I agree with @viranovskaya.

ICA000’s timecourse looks like your classic eye blinks and ICA005’s timecourse looks like your classic saccades. Their topomaps seem reversed, with ICA000’s map looking like saccades and ICA005’s looking like blinks, strange… At any rate, I would definitely classify them as eye-related signals. ANd by the way, ICA004 seems to capture the heartbeat, which you could also discard if it helps the signal.

You could also classify ICs using ICLabel. I’ve recently included a Numpy-only implementation in MNExtend, feel free to try it on your data.

Thank you very much!