[Mne_analysis] Applying ICA with No Components Selected out but Signal Changes Using Default Parameters

Rockhill, Alexander P. AROCKHILL at mgh.harvard.edu
Sat Jul 6 15:55:00 EDT 2019
Search archives:

Thanks Alex and Mainak,

    I’ll try changing the number of components and interpolating a larger section of the data to abolish the stim artifact (the data I sent was TMS-EEG data).

Alex

Translational NeuroEngineering Laboratory
Division of Neurotherapeutics, Department of Psychiatry
Massachusetts General Hospital, Martinos Center
149 13th St Charlestown #2301, Boston, MA 02129
________________________________
From: mne_analysis-bounces at nmr.mgh.harvard.edu <mne_analysis-bounces at nmr.mgh.harvard.edu> on behalf of Mainak Jas <mainakjas at gmail.com>
Sent: Wednesday, July 3, 2019 4:41 PM
To: Discussion and support forum for the users of MNE Software
Subject: Re: [Mne_analysis] Applying ICA with No Components Selected out but Signal Changes Using Default Parameters


        External Email - Use Caution

I can confirm what Alex said. Here’s a simpler script to play with:

import mnefrom mne.preprocessing import ICAfrom numpy.testing import assert_array_equalepochs = mne.read_epochs('test-epo.fif', preload=True)epochs.pick_types(meg=False, eeg=True)epochs.crop(0.2, None)epochs2 = epochs.copy()reject = dict(eeg=200e-6)ica = ICA(method='fastica', random_state=42, max_iter=500, n_components=0.95)ica.fit(epochs.copy().drop_bad(reject=reject), decim=10)ica.apply(epochs2, exclude=[])epochs.average().plot()epochs2.average().plot()# from mne import combine_evoked# evoked_diff = combine_evoked([epochs.average(), -epochs2.average()], 'equal')# evoked_diff.plot()assert_array_equal(epochs.get_data(), epochs2.get_data())

Using n_components=0.95 vs n_components=1.0 actually seems to make a huge difference, perhaps for the reasons that Alex outlines. Ultimately, what you reconstruct depends on the quality of your decomposition -- and it's not perfect.

Best,
Mainak

On Wed, Jul 3, 2019 at 4:23 PM Alexandre Gramfort <alexandre.gramfort at inria.fr<mailto:alexandre.gramfort at inria.fr>> wrote:
        External Email - Use Caution

Hi Alex,

I could replicate the pb and start to investigate.

You have a strong transient artifact in your data (stim artifact I suspect)
and this affects the conditioning of the mixing matrix. So when computing
the pinv here: https://github.com/mne-tools/mne-python/blob/master/mne/preprocessing/ica.py#L677
the mixing is not numerically the inverse of the unmixing matrix.

I don't know exactly how to fix this but that's a starting point.
He someone can look into this it's great.

Alex

On Wed, Jul 3, 2019 at 3:33 PM Rockhill, Alexander P.
<AROCKHILL at mgh.harvard.edu<mailto:AROCKHILL at mgh.harvard.edu>> wrote:
>
> Hi Alex and Mainak,
>
>     The n_components argument is given None which yields 57 components and there are 64 channels with 7 bad channels which are not included so no I don't think it's because of the dimensionality reduction. Maybe it's some whitening.
>
> To see something similar to what I'm looking at as far as scaling you can use the script below but I haven't been able to replicate the changes after ICA with sample data. I filedropped you both test epochs to the emails you responded to the thread with that does show that.
>
> from time import time
> import matplotlib.pyplot as plt
> import mne
> from mne.preprocessing import ICA
> from mne.datasets import sample
>
> '''data_path = sample.data_path()
> raw_fname = data_path + '/MEG/sample/sample_audvis-raw.fif'
>
> raw = mne.io.Raw(raw_fname, preload=True)
> events = mne.find_events(raw)
> epochs = mne.Epochs(raw, events, preload=True)
>
> '''
> epochs = mne.read_epochs('test-epo.fif', preload=True)
>
> epochs = epochs.pick_types(meg=False, eeg=True)
>
> fig, (ax0, ax1) = plt.subplots(1,2)
> epochs.average().plot(axes=ax0, show=False)
>
> ica = ICA(method='fastica', random_state=0)
> t0 = time()
> ica.fit(epochs)
> fit_time = time() - t0
> epochs = ica.apply(epochs, exclude=ica.exclude)
> epochs.average().plot(axes=ax1, show=False)
> ica.plot_sources(epochs)
>
> Thanks,
>
> Alex
>
> Translational NeuroEngineering Laboratory
> Division of Neurotherapeutics, Department of Psychiatry
> Massachusetts General Hospital, Martinos Center
> 149 13th St Charlestown #2301, Boston, MA 02129
> ________________________________
> From: mne_analysis-bounces at nmr.mgh.harvard.edu<mailto:mne_analysis-bounces at nmr.mgh.harvard.edu> <mne_analysis-bounces at nmr.mgh.harvard.edu<mailto:mne_analysis-bounces at nmr.mgh.harvard.edu>> on behalf of Alexandre Gramfort <alexandre.gramfort at inria.fr<mailto:alexandre.gramfort at inria.fr>>
> Sent: Wednesday, July 3, 2019 2:30 AM
> To: Discussion and support forum for the users of MNE Software
> Subject: Re: [Mne_analysis] Applying ICA with No Components Selected out but Signal Changes Using Default Parameters
>
>
>         External Email - Use Caution
>
> hi,
>
> can you check that the number of components you fit is equal to the number of channels?
> If it's less you have a dimensionality reduction step.
>
> Alex
>
>
> On Tue, Jul 2, 2019 at 11:28 PM Mainak Jas <mainakjas at gmail.com<mailto:mainakjas at gmail.com>> wrote:
>
>         External Email - Use Caution
>
> Hi Alex,
>
> Could you provide us a full script on the MNE sample data that we can run?
>
> Mainak
>
> On Tue, Jul 2, 2019 at 5:14 PM Rockhill, Alexander P. <AROCKHILL at mgh.harvard.edu<mailto:AROCKHILL at mgh.harvard.edu>> wrote:
>
> Also, of note the ica scale is off by quite a lot in the plot_sources plot, it is way too zoomed in.
>
> Alex
>
> Translational NeuroEngineering Laboratory
> Division of Neurotherapeutics, Department of Psychiatry
> Massachusetts General Hospital, Martinos Center
> 149 13th St Charlestown #2301, Boston, MA 02129
> ________________________________
> From: mne_analysis-bounces at nmr.mgh.harvard.edu<mailto:mne_analysis-bounces at nmr.mgh.harvard.edu> <mne_analysis-bounces at nmr.mgh.harvard.edu<mailto:mne_analysis-bounces at nmr.mgh.harvard.edu>> on behalf of Rockhill, Alexander P. <AROCKHILL at mgh.harvard.edu<mailto:AROCKHILL at mgh.harvard.edu>>
> Sent: Tuesday, July 2, 2019 3:25 PM
> To: mne_analysis at nmr.mgh.harvard.edu<mailto:mne_analysis at nmr.mgh.harvard.edu>
> Subject: [Mne_analysis] Applying ICA with No Components Selected out but Signal Changes Using Default Parameters
>
> Hi,
>
>     In an analysis, I am running:
>
> ica = ICA(method='fastica', n_components=n_components,  # n_components=None
>           random_state=seed)
> ica.fit(inst2)
> ...
> inst2 = ica.apply(inst2, exclude=ica.exclude)
>
>     and when I skip all intermediate steps and just fit the ICA and apply it with an empty list for ica.exclude the signal still changes, quite a bit. I thought if no components were selected out and all the max PCA components were used the signal would be unchanged or basically unchanged. Is this a bug or something with my implementation?
>
> Thanks,
>
> Alex
>
> Translational NeuroEngineering Laboratory
> Division of Neurotherapeutics, Department of Psychiatry
> Massachusetts General Hospital, Martinos Center
> 149 13th St Charlestown #2301, Boston, MA 02129
> _______________________________________________
> Mne_analysis mailing list
> Mne_analysis at nmr.mgh.harvard.edu<mailto:Mne_analysis at nmr.mgh.harvard.edu>
> https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis
>
> _______________________________________________
> Mne_analysis mailing list
> Mne_analysis at nmr.mgh.harvard.edu<mailto:Mne_analysis at nmr.mgh.harvard.edu>
> https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis
>
> _______________________________________________
> Mne_analysis mailing list
> Mne_analysis at nmr.mgh.harvard.edu<mailto:Mne_analysis at nmr.mgh.harvard.edu>
> https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis

_______________________________________________
Mne_analysis mailing list
Mne_analysis at nmr.mgh.harvard.edu<mailto:Mne_analysis at nmr.mgh.harvard.edu>
https://mail.nmr.mgh.harvard.edu/mailman/listinfo/mne_analysis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20190706/fe780ad3/attachment-0001.html 


More information about the Mne_analysis mailing list