implement eeglab runica informax with mne

  • MNE version: 1.10
  • operating system: Windows 11

I am working on achieve the runica infomax of eeglab with mne in python. I have calculated the component number using pca cntNumCompForICA, and run EEG = pop_runica(EEG,‘icatype’,‘runica’,‘extended’,0,‘pca’,cntNumCompForICA,‘interupt’,‘off’,‘verbose’,‘off’); the result icaweight is (n_component, n_channels) and icasphere is a unit matrix. so the W = icaweight * icasphere is actually equals to icaweight.

But with mne, I do the following

ica = mne.preprocessing.ICA(
n_components=cntNumCompForICA, # ‘pca’, cntNumCompForICA
method=“infomax”,
fit_params={
“extended”: False,
“max_iter”: 200,
“l_rate”: None,
},
random_state=42,
verbose=False
)

ica.fit(raw, verbose=False)

with the same n_components and eeg data as input, but the result ica.unmixing_matrix_ is (n_component, n_component), and it is not equals to the ica.weight * ica.sphere in eeglab, where is the problem?

The MNE-Python ICA object performs unmixing by first applying whitenings (ica.pre_whitener), then removing offsets (ica.pca_mean_), then applying PCA (ica.pca_components_) and then finally applying the unmixing matrix (ica.unmixing_matrix_). This series of operations cannot be captured by a single matrix multiplication. See the source code of ica.transform_ for details.