ica.get_explained_variance_ratio for individual ICA components

You can do something like this:

# %%
import pandas as pd

import mne
from mne.preprocessing import ICA

sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = (
    sample_data_folder / "MEG" / "sample" / "sample_audvis_filt-0-40_raw.fif"
)
raw = (
    mne.io.read_raw_fif(sample_data_raw_file)
    .crop(tmax=60.0)
    .pick(picks=["mag", "eeg", "stim", "eog"])
)
raw.load_data()

filt_raw = raw.copy().filter(l_freq=1.0, h_freq=None)

ica = ICA(random_state=97)
ica.fit(filt_raw)

# %%
ch_types = ("mag", "eeg")
var_explained = pd.DataFrame(
    columns=ch_types, index=pd.RangeIndex(ica.n_components_, name="Component")
)
for component_idx in range(ica.n_components_):
    ratios = ica.get_explained_variance_ratio(filt_raw, components=component_idx)
    for ch_type, ratio in ratios.items():
        var_explained.loc[component_idx, ch_type] = ratio


var_explained

Produces this output:

Best wishes,
Richard

1 Like