Um artigo menciona uma "simulação de Monte Carlo para determinar o número de componentes principais"; como funciona?

10

Estou fazendo uma análise do Matlab sobre dados de ressonância magnética, onde realizei o PCA em uma matriz de 10304x236, em que 10304 é o número de voxels (pense neles como pixels) e 236 é o número de pontos no tempo. O PCA fornece 236 autovalores e seus coeficientes relacionados. Está tudo bem. No entanto, quando chegar a hora de decidir quantos componentes serão retidos, o artigo que estou replicando diz o seguinte (informe-me se houver algum esclarecimento necessário, pois essa é apenas uma pequena parte do artigo inteiro):

Em seguida, realizamos simulações de Monte Carlo para determinar o número de componentes principais (PCs) a serem extraídos dos dados de ROI incômodos para cada varredura. Uma distribuição nula dos autovalores esperados foi gerada separadamente para os dados de codificação e repouso de cada sujeito, executando PCA em dados normalmente distribuídos de igual classificação para os dados de ROI de codificação e incômodo de repouso. Os PCs a partir dos dados reais de ROI incômodos foram então selecionados para um determinado repouso ou varredura de codificação se seus valores próprios associados excederem o 99º intervalo de confiança dos valores próprios das simulações de Monte Carlo.

Tambini & Davachi, PNAS 2013, A persistência de padrões multivoxel no hipocampo no descanso pós-codificação está relacionada à memória .

Não tenho absolutamente nenhuma idéia do que fazer aqui. Estou acostumado a escolher componentes com base na variação acumulada explicada. Meu pensamento é o seguinte:

Em seguida, realizamos simulações de Monte Carlo para determinar o número de componentes principais (PCs) a serem extraídos dos dados de ROI incômodos para cada varredura.

Os sims de Monte Carlo apenas pretendem fazer as seguintes 1000 vezes, certo?

Uma distribuição nula dos valores próprios esperados foi gerada executando PCA em dados normalmente distribuídos de classificação igual aos dados ROI de codificação e incômodo de descanso.

Em primeiro lugar, estou assumindo que 'classificação igual' significará basicamente que vou criar uma matriz do mesmo tamanho que o original (10304x236). Em termos de 'dados normalmente distribuídos de igual classificação' ... isso significa que eu deveria criar uma matriz 10304x236 de números aleatórios a partir da distribuição normal? O Matlab possui uma função chamada 'normrnd' que faz isso, mas requer uma entrada mu e sigma. Eu usaria o mesmo mu e sigma daqueles derivados do conjunto de dados inicial? É isso mais ou menos o que se entende por 'autovalores esperados', pois não tenho idéia de como seria uma distribuição de autovalores ESPERADOS.

Eu acho que meu problema é mais ou menos que eu não sei como fazer uma 'distribuição nula' de autovalores.

chainhomelow
fonte

Respostas:

6

Um termo relacionado a esta pergunta é "Análise Paralela".

Em termos simples, a simulação de monte carlo geraria 1000 matrizes 10304x236 de dados aleatórios normalmente distribuídos (isso pressupõe, é claro, que os dados que você analisa são normalmente distribuídos; se seus dados fossem distribuídos de maneira diferente, você usaria um distribuição aleatória diferente). Você então extrairia os autovalores para cada conjunto de dados criado e calcularia a média de cada autovalor em todas as 1000 (ou tais) réplicas enquanto cria intervalos de confiança. Em seguida, você compara os valores próprios do seu conjunto de dados com os valores próprios médios da sua simulação.

Onde quer que os valores próprios do seu conjunto de dados excedam o 99º intervalo de confiança dos valores próprios da simulação de monte carlo, esse é o número de fatores que a análise sugere manter.

Por exemplo, se o 25º autovalor dos seus dados for 2,10 e o 26º for 1,97, e o 99º intervalo de confiança dos 25º autovalores dos 1000 (ou tal) conjuntos de dados aleatórios for 2,04 e o 26º for 2,01, isso sugere que você reter 25 componentes.

Existem funções criadas para fazer isso por você. Um link para o Matlab é este:

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

Eu encontrei esse pesquisando no Google "Parallel Analysis in Matlab".

maxwelldeux
fonte
+1. Isso é muito claro e o link vai me ajudar muito! Eu havia codificado corretamente a extração dos autovalores distribuídos aleatoriamente, mas não estava utilizando intervalos de confiança da maneira correta. Muito obrigado pela sua resposta.
chainhomelow
Feliz por ajudar! Ainda bem que foi útil para você.
Maxwelldeux