This is a collaborative space. In order to contribute, send an email to maximilien.chaumon@icm-institute.org
On any page, type the letter L on your keyboard to add a "Label" to the page, which will make search easier.

Ica neuromag blink2

Introduction

L'Analyse en Composantes Indépendantes (ICA) est une technique du traitement du signal qui, à partir de la représentation originale des données, calcule une nouvelle représentation, complètement équivalente, mais présentant des propriétés statistiques particulières: l'indépendance.

Une des applications de l'ICA est la correction des artéfacts.

Pour une première approche simple à la compréhension de l'ICA (décomposition et correction d'artéfacts), lire ici

L'exemple ci-dessous présente une utilisation de l'ICA appliquée à la correction des artéfacts de mouvements occulaires sur des données MEG Neuromag (magnétomètres et gradiomètres) de repos, les yeux ouverts (YO).
L'iCA peut aussi s'appliquer très bien et de manière similaire à la correction des artéfacts cardiaques...

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 (sauts de capteurs, capteurs bruités, ...).

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).

La premiere chose a faire est d ajouter le path de fieldtrip dans matlab:

>> addpath /lena13/home_users/users/lemarechal/cluster_data/fieldtrip/fieldtrip
>> ft_defaults

Références :

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

La Décomposition du signal en Composantes Indépendantes : nombre de composantes PCA et convergence


Le script do_ica.m permet de calculer l'ICA sur un fichier en spécifiant les capteurs à utiliser (ici, les magnétomètres et les gradiomètres simultanément) et le nombre de composantes PCA à garder avant de faire l'ICA.
Le nombre de composantes PCA à garder avant de faire l'ICA est très important car il permet de garantir la convergence de la Décomposition en Composantes Indépendantes.

Error rendering macro 'code': Invalid value specified for parameter 'lang'
[ comp, output_filename ] = do_ica( input_filename, channels, components, output_directory )

input_filename correspond au nom du fichier d'entree.
channels correspond aux canaux sur lesquels on va travailler, specifies comme dans fieldtrip: http://fieldtrip.fcdonders.nl/reference/ft_channelselection\\

   'MEG'     is replaced by all MEG channels (works for CTF, 4D, Neuromag and Yokogawa)
   'MEGREF'  is replaced by all MEG reference channels (works for CTF and 4D)
   'MEGGRAD' is replaced by all MEG gradiometer channels (works for Yokogawa and Neuromag-306)
   'MEGMAG'  is replaced by all MEG magnetometer channels (works for Yokogawa and Neuromag-306)
   'EEG'     is replaced by all recognized EEG channels (this is system dependent)

components correspond au nombre de composantes PCA a garder avant de faire l'ICA.
output_directory correspond au repertoire dans lequel seront mis les resutlats de l'ICA.

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.

Attention, 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\\

Plus le nombre de composantes PCA à garder, spécifié en entrée du script, est faible, plus on réduit la dimensionnalité des données en entrée, et plus l'ICA a des chances de converger.

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

function check_convergence( input_filename, channels, output_directory, minimum_components )

Pour une utilisation simultanée des magnétomètres et des gradiomètres, l'ICA converge avec les données de cet exemple en gardant les 86 premières composantes de la PCA (l'ICA ne converge pas si on en garde plus).
80 peut donc être considéré comme une valeur indicative (un peu sévère) de départ mais dans le cas où l'ICA échoue à converger, il faut diminuer cette valeur.
Cette valeur reste indicative car elle peut changer :

  • en fonction du fichier en entrée (rang des données, notamment affaibli par la procédure tsss)
  • en recalculant l'ICA sur un même fichier avec les mêmes paramètres (l'algo n'est pas déterministe)

Une fois l'ICA calculée avec le script do_ica.m et assurée d'avoir convergé avec le script check_convergence.m, on dispose d'un fichier contenant les topographies et les décours temporels des composantes:

  • YO_tsss_st_10000_MEG_ft_componentanalysis_runica_pca_86_components.mat

Etude des composantes ICA : visualisation (décours temporel et topographie), sélection, correction et comparaison avec les données originales

Le but est de corriger les artéfacts dus aux mouvements occulaires (clignements, saccades)

Visualisation et sélection des composantes ICA (#86)

Dans le but de corriger les mouvements occulaires, on identifie les composantes 17 et 52, considérées comme sources d'artéfacts occulaires, et repérées sur les décours temporels par comparaison directe avec les signaux occulaires originaux BIO001 et BIO002 et validées par les topographies associées (plus ou moins "caractéristiques" de mouvements occulaires).

Correction des données et comparaison avec les données originales

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

Error rendering macro 'code': Invalid value specified for parameter 'lang'
[ 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 ):

Error rendering macro 'code': Invalid value specified for parameter 'lang'
>>
>> 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

Comparaison données originales / corrigées :

Des tests

Sur cette page est testée l'influence de la séparation des types de capteurs (magnétomètres/gradiomètres) dans l'ICA