MARA algorithm and other ICA-noise-component rejection methods

MNE has a couple of methods to automatically select noise-related components from ICA decomposition, based on correlation and thresholding. For EEG, I’m using both EOG and ECG methods to remove up to 2 components for EOG, and up to one component for ECG.

I recently learn about MARA, which is basically an algo to select noise-related components from EEG signal based on a machine learning model trained on 1290 labeled datasets. (What kind of algo, what kind of label, how reliable it is… I don’t know, I haven’t looked in-depth yet). It looks nice as it targets not only EOG/ECG-related components but potentially other noise-related components.

Question: Does anyone has some experience with MARA or other similar algorithms to select noise-related components from ICA decomposition of EEG signals? What do you think about it?
I feel a bit restricted by the rejection performed with the methods ica.find_bad_eXg, do you know of any other approach/pipeline that removes reliably noise components from signal?

MARA’s approach using a trained model on a labeled dataset seems very interesting to me, but it’s in Matlab. Do you know of a similar project in Python?

1 Like

ICALabel project by the EEGLAB people might also interest you: paper, github repo.
They’ve trained a deep convolutional network (IIRC) to classify components (I think they use at least 4 classes like blink, muscle, heart etc.). The trained network should be available in the repo, but it would require some work to load it into keras/pytorch and use in python.

Thanks, indeed very interesting as MARA is using a simple linear classifier.