Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Cette page présente un exemple d'utilisation de l'ICA (Independant Component Analysis) sur des données MEG Neuromag (magnetometres et gradiometres) de repos yeux ouverts (YO).

Les données ont d'abord été pré-traitées avec MaxFilter (tsss) et inspectées visuellement pour s'assurer de l'absence de "gros" artéfacts.

Le calcul et le rejet des composantes d'ICA est réalisé avec Fieldtrip (version 20140424), l'inspection visuelle des données originales, des composantes d'ICA et des données corrigées est faite avec muse (lecture des fichiers .mat).

Références :

Tous les scripts utilisés se trouvent ici : /export/home/jeandidier.lemarecha/data/tests/ica/fieldtrip

2 paramètres ont été testés:

...


Le script do_ica.m permet de calculer l'ICA sur un fichier en spécifiant les capteurs à utiliser et le nombre de composantes PCA à garder avant de faire l'ICA:

Code Block
matlab
matlab

function [ comp, output_filename ] = do_ica( input_filename, channels, components, output_directory )

Cette fonction calcule les composantes ICA (la topographie et le décours temporel) et écrit les résultats dans le fichier input_filename+channels+ft_componentanalysis_runica_pca_components.mat dans le répertoire output_directory.

La convergence de l'ICA n'est pas garantie et dépend de la dimensionnalité des données en entrée : http://fieldtrip.fcdonders.nl/faq/why_does_my_ica_output_contain_complex_numbers\\
Pour tester la convergence de l'ICA sur nos données, on va tester différentes valeurs pour le nombre de composantes PCA à garder avant l'ICA: en commençant par tout garder (égal au nombre de capteurs), puis en en enlevant 10, 20, 30, ... jusqu'à en garder 40 au minimum.
Pour l'ICA utilisant simultanément les magnetometres et les gradiometres (306 capteurs), on garde d'abord 306 composantes PCA, puis 296, 286, 276, ... , 46.
Pour l'ICA sur les magnetometres (102 capteurs), on garde d'abord 102 composantes PCA, puis 92, 82, 72, ... , 42.
Pour l'ICA sur les gradiometres (204 capteurs), on garde d'abord 204 composantes PCA, puis 194, 184, 174, ... , 44.

Le script check_components.m permet de vérifier la convergence de l'ICA:

  • l'ICA converge en utilisant simultanément les magnetometres et les gradiometres en gardant seulement 86 composantes PCA (pas de convergence pour 96)
  • l'ICA converge en utilisant uniquement les magnetometres en gardant seulement 72 composantes PCA (pas de convergence pour 82)
  • l'ICA converge en utilisant uniquement les gradiometres en gardant seulement 104 composantes PCA (pas de convergence pour 114)

...

Pour corriger les données, on utilise le script reject_components.m :

Code Block
matlab
matlab

function [ data_corrected, output_filename ] = reject_components( input_filename, components_filename, components_to_remove )

Ce script prend en argument le fichier des données originales, le fichier contenant le calcul des composantes ICA et une liste de composantes à enlever.
Il retourne les données corrigées ( format FieldTrip ) et le fichier dans lequel ces nouvelles données sont sauvées ( format FIF ):

Code Block
matlab
matlab

>> addpath /lena13/home_users/users/lemarechal/dev/dev/Install/fieldtrip/fieldtrip-20140424
>> input_filename='/export/home/jeandidier.lemarecha/data/tests/data/hafeza_hafeza/140402/YO_tsss_st_10000.fif';
>> components_filename='/lena13/home_users/users/lemarechal/cluster_data/tests/ica/fieldtrip/results/test1/YO_tsss_st_10000_MEG_ft_componentanalysis_runica_pca_86_components.mat';
>> components_to_remove=[ 17, 52 ];
>> [ data_corrected, output_filename ] = reject_components( input_filename, components_filename, components_to_remove )
>> ...
data_corrected =

           hdr: [1x1 struct]
         label: {326x1 cell}
          time: {[1x191000 double]}
         trial: {[326x191000 double]}
       fsample: 1000
    sampleinfo: [1 191000]
          grad: [1x1 struct]
           cfg: [1x1 struct]


output_filename =

/lena13/home_users/users/lemarechal/cluster_data/tests/ica/fieldtrip/results/test1/YO_tsss_st_10000_MEG_ft_componentanalysis_runica_pca_86_components_corrected_17_52

...

  • time course des magnétometres gauches MEG0111, MEG0121 MEG0131 MEG0141 et droits MEG1411 MEG1421 MEG1441
  • topo des magnétometres
  • Wiki Markup
    [time course des gradiometres|http://megfront.meg.chups.jussieu.fr/MEEG_softwares/jd/ica/screenshots/meg/muse_meg_trial_grad_corrected.png] gauches MEG011\[2-3], MEG012\[2-3] MEG013\[2-3] MEG014\[2-3] et droits MEG141\[2-3] MEG142\[2-3] MEG144\[2-3]

  • topo des gradiometres

...

Pour corriger les données, on utilise le script reject_components.m :

Code Block
matlab
matlab

function [ data_corrected, output_filename ] = reject_components( input_filename, components_filename, components_to_remove )

Ce script prend en argument le fichier des données originales, le fichier contenant le calcul des composantes ICA et une liste de composantes à enlever.
Il retourne les données corrigées ( format FieldTrip ) et le fichier dans lequel ces nouvelles données sont sauvées ( format FIF ):

Code Block
matlab
matlab

>> addpath /lena13/home_users/users/lemarechal/dev/dev/Install/fieldtrip/fieldtrip-20140424
>> input_filename='/export/home/jeandidier.lemarecha/data/tests/data/hafeza_hafeza/140402/YO_tsss_st_10000.fif';
>> components_filename='/lena13/home_users/users/lemarechal/cluster_data/tests/ica/fieldtrip/results/test1/YO_tsss_st_10000_MEGMAG_ft_componentanalysis_runica_pca_72_components.mat';
>> components_to_remove=[ 8, 30 ];
>> [ data_corrected, output_filename ] = reject_components( input_filename, components_filename, components_to_remove )
>> ...
data_corrected =

           hdr: [1x1 struct]
         label: {326x1 cell}
          time: {[1x191000 double]}
         trial: {[326x191000 double]}
       fsample: 1000
    sampleinfo: [1 191000]
          grad: [1x1 struct]
           cfg: [1x1 struct]


output_filename =

/lena13/home_users/users/lemarechal/cluster_data/tests/ica/fieldtrip/results/test1/YO_tsss_st_10000_MEGMAG_ft_componentanalysis_runica_pca_72_components_corrected_8_30

...

Pour corriger les données, on utilise le script reject_components.m :

Code Block
matlab
matlab

function [ data_corrected, output_filename ] = reject_components( input_filename, components_filename, components_to_remove )

Ce script prend en argument le fichier des données originales, le fichier contenant le calcul des composantes ICA et une liste de composantes à enlever.
Il retourne les données corrigées ( format FieldTrip ) et le fichier dans lequel ces nouvelles données sont sauvées ( format FIF ):

Code Block
matlab
matlab

>> addpath /lena13/home_users/users/lemarechal/dev/dev/Install/fieldtrip/fieldtrip-20140424
>> input_filename='/export/home/jeandidier.lemarecha/data/tests/data/hafeza_hafeza/140402/YO_tsss_st_10000.fif';
>> components_filename='/lena13/home_users/users/lemarechal/cluster_data/tests/ica/fieldtrip/results/test1/YO_tsss_st_10000_MEGGRAD_ft_componentanalysis_runica_pca_104_components.mat';
>> components_to_remove=[ 16, 48 ];
>> [ data_corrected, output_filename ] = reject_components( input_filename, components_filename, components_to_remove )
>> ...
data_corrected =

           hdr: [1x1 struct]
         label: {326x1 cell}
          time: {[1x191000 double]}
         trial: {[326x191000 double]}
       fsample: 1000
    sampleinfo: [1 191000]
          grad: [1x1 struct]
           cfg: [1x1 struct]


output_filename =

/lena13/home_users/users/lemarechal/cluster_data/tests/ica/fieldtrip/results/test1/YO_tsss_st_10000_MEGGRAD_ft_componentanalysis_runica_pca_104_components_corrected_16_48

Comparaison données originales / corrigées :

  • Wiki Markup
    [time course des gradiometres|http://megfront.meg.chups.jussieu.fr/MEEG_softwares/jd/ica/screenshots/meggrad/muse_grad_corrected_trial.png] gauches MEG011\[2-3], MEG012\[2-3] MEG013\[2-3] MEG014\[2-3] et droits MEG141\[2-3] MEG142\[2-3] MEG144\[2-3]

  • topo des gradiometres

Conclusion

...