Un article mentionne une «simulation de Monte Carlo pour déterminer le nombre de composants principaux»; Comment ça marche?

10

Je fais une analyse Matlab sur des données d'IRM où j'ai effectué l'ACP sur une matrice de taille 10304x236 où 10304 est le nombre de voxels (pensez-y comme pixels) et 236 est le nombre de points temporels. L'ACP me donne 236 valeurs propres et leurs coefficients associés. Tout va bien. Cependant, quand vient le temps de décider du nombre de composants à conserver, le papier que je reproduis dit ce qui suit (veuillez me faire savoir si des clarifications sont nécessaires car ce n'est qu'une courte partie de tout le papier):

Nous avons ensuite effectué des simulations Monte Carlo pour déterminer le nombre de composants principaux (PC) à extraire des données ROI nuisibles pour chaque scan. Une distribution nulle des valeurs propres attendues a été générée séparément pour les données de codage et de repos pour chaque sujet en effectuant l'ACP sur des données normalement distribuées de rang égal aux données de ROI de codage et de nuisance au repos. Les PC des véritables données de ROI nuisibles ont ensuite été sélectionnés pour un repos ou un balayage d'encodage donné si leurs valeurs propres associées dépassaient le 99e intervalle de confiance des valeurs propres des simulations de Monte Carlo.

Tambini & Davachi, PNAS 2013, Persistance des modèles multivoxels hippocampiques dans le repos post-encodage est liée à la mémoire .

Je ne sais absolument pas quoi faire ici. J'ai l'habitude de choisir des composants en fonction de la variance cumulée expliquée. Ma pensée est la suivante, cependant:

Nous avons ensuite effectué des simulations de Monte Carlo pour déterminer le nombre de composants principaux (PC) à extraire des données ROI nuisibles pour chaque scan.

Les simulations de Monte-Carlo signifient simplement de faire les 1000 (ou autres) temps suivants, non?

Une distribution nulle des valeurs propres attendues a été générée en effectuant l'ACP sur des données normalement distribuées de rang égal aux données de ROI d'encodage et de nuisance au repos.

Tout d'abord, je suppose que «rang égal» signifie essentiellement que je vais créer une matrice de la même taille que l'original (10304x236). En termes de «données normalement distribuées de rang égal» ... cela signifie-t-il que je devrais créer une matrice 10304x236 de nombres aléatoires à partir de la distribution normale? Matlab a une fonction appelée «normrnd» qui fait cela mais nécessite une entrée mu et sigma. Est-ce que j'utiliserais les mêmes mu et sigma que ceux dérivés du jeu de données initial? Est-ce plus ou moins ce que l'on entend par «valeurs propres attendues», car je n'ai aucune idée de ce à quoi ressemblerait une distribution des valeurs propres attendues.

Je suppose que mon problème est plus ou moins que je ne sais pas comment faire une «distribution nulle» des valeurs propres.

chainhomelow
la source

Réponses:

6

Un terme connexe à cette question est «Analyse parallèle».

En termes simples, la simulation de monte-carlo générerait 1000 (ou similaires) matrices 10304x236 de données aléatoires normalement distribuées (cela suppose, bien sûr, que les données que vous analysez sont normalement distribuées; si vos données étaient distribuées différemment, vous utiliseriez un distribution aléatoire différente). Vous devez ensuite extraire les valeurs propres pour chaque ensemble de données que vous avez créé et faire la moyenne de chaque valeur propre sur l'ensemble des 1000 (ou de telles) réplications tout en créant également des intervalles de confiance. Vous comparez ensuite les valeurs propres de votre ensemble de données aux valeurs propres moyennes de votre simulation.

Partout où les valeurs propres de votre ensemble de données dépassent le 99e intervalle de confiance des valeurs propres de la simulation de monte-carlo, c'est le nombre de facteurs que l'analyse suggère de conserver.

Par exemple, si la 25e valeur propre de vos données est 2,10 et la 26e est 1,97, et que le 99e intervalle de confiance des 25e valeurs propres des 1000 (ou autres) ensembles de données aléatoires est 2,04 et la 26e est 2,01, cela suggère que vous conserver 25 composants.

Il existe des fonctions conçues pour le faire pour vous. Un lien pour Matlab est le suivant:

http://www.mathworks.com/matlabcentral/fileexchange/44996-parallel-analysis--pa--to-for-determining-the-number-of-components-to-retain-from-pca/content/pa_test. m

J'ai trouvé celui-là en recherchant "Analyse parallèle dans Matlab".

maxwelldeux
la source
+1. C'est très clair et le lien m'aidera beaucoup! J'avais codé correctement l'extraction des valeurs propres distribuées au hasard, mais je n'utilisais pas correctement les intervalles de confiance. Merci beaucoup pour votre réponse.
chainhomelow
Heureux d'aider! Heureux que cela vous ait été utile.
maxwelldeux