Applying ICA without PCA first

According to the ICA tutorial, ICA is applied following a PCA step. I assume the reason is to reduce the dimensionality and speed up the ICA fitting.

However, according to this paper, applying a PCA before the ICA can harm the data quality and the subsequent ICA, even if only 1% of the total variance is removed.

What are your thoughts about this, and is there a way to apply an ICA only directly in MNE; or do I have to retrieve the data matrix and perform the ICA with scikit-learn?


you are correct in that in MNE-Python, PCA is always conducted before the actual ICA step. This is slightly different than e.g. in EEGLAB.

In MNE 0.23, this PCA step is not used to reduce dimensionality of the data prior to ICA.

How many PCA components will be retained during signal reconstruction can be controlled via the n_pca_components parameter of ICA.apply(). Since MNE-Python 0.23, all PCA components are kept, even if the number differs from the number of ICA components.

So to answer your question, in MNE 0.23, no dimensionality reduction is performed via PCA, neither before ICA, nor during signal reconstruction, at least as long as you use the defaults.

1 Like

@richard Alright. Indeed now I remember that the remaining PCA components are added back to avoid dimensionality reduction. But then why is PCA even applied?

To allow users to only use a subset of PCA components for signal reconstruction, as a means to improve SNR – at least that’s how I understand it. @Denis probably knows more :slight_smile:

It depends a bit on the algorithm, ICA is often implemented on top of PCA and usually you do not see that as a user. Here it is explicit as it gives more fine-grained control of the preprocessing and component handling.