Eu tenho um conjunto de dados que consiste em 717 observações (linhas) que são descritas por 33 variáveis (colunas). Os dados são padronizados pela z-scoring de todas as variáveis. Não há duas variáveis linearmente dependentes ( ). Também removi todas as variáveis com variação muito baixa (menor que ). A figura abaixo mostra a matriz de correlação correspondente (em valores absolutos).0,1
Quando estou tentando executar a análise fatorial usando o factoran
Matlab da seguinte maneira:
[Loadings1,specVar1,T,stats] = factoran(Z2,1);
Eu recebo o seguinte erro:
The data X must have a covariance matrix that is positive definite.
Você poderia me dizer onde está o problema? É devido à baixa dependência mútua entre as variáveis utilizadas? Além disso, o que posso fazer sobre isso?
Minha matriz de correlação:
eig(cov(Z2))
). Eu suspeito fortemente que alguns deles sejam muito pequenos.Z2
matriz? Se houver valores ausentes nos seus dados, a exclusão em pares poderá levar a matriz a não ser inversível quando as diferentes correlações nessa matriz forem computadas usando diferentes subamostras dos dados.Respostas:
Vamos definir a matriz de correlação por . Como é semi-definido positivo, mas não positivo, sua decomposição espectral se parece com onde as colunas de consistem em vetores de e 0 \ final {pmatrix} é uma matriz diagonal contendo os valores próprios correspondentes para os vectores próprios em . Alguns desses sãoC C=QDQ−1, Q C D=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜λ10⋮⋮⋮⋮00λ2⋱⋯⋯⋱⋱⋱⋯⋯⋱λn⋱⋯⋯⋱0⋱⋯⋯⋱⋱00⋮⋮⋮⋮00⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟ Q 0 . Por outro lado, é o grau de .n C
Uma maneira simples de restaurar a definição positiva é definir os valores- próprios para algum valor numericamente diferente de zero, por exemplo,Portanto, defina onde Então,0 λn+1,λn+2,...=10−15. C~=QD~Q−1, D~=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜λ10⋮⋮⋮⋮00λ2⋱⋯⋯⋱⋱⋱⋯⋯⋱λn⋱⋯⋯⋱10−15⋱⋯⋯⋱⋱00⋮⋮⋮⋮010−15⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
No Matlab, é possível obter usando o comando:Q,D
Construir é então apenas manipulações simples de matriz.C~
Observação: Seria difícil dizer como isso influencia a análise fatorial; portanto, deve-se provavelmente ter cuidado com esse método. Além disso, mesmo que este seja um é uma matriz de correlação, pode não ser. Portanto, outra normalização das entradas pode ser necessária.C C~
fonte
É possível que você esteja enfrentando problemas numéricos com sua matriz. É possivelmente realmente positivo, mas a computação numérica diz o contrário.
Uma solução muito comum, nesse caso, é adicionar um valor muito baixo (1.E-10, por exemplo) a todos os elementos diagonais. Se isso não resolver o problema, tente aumentar progressivamente esse valor.
fonte
A FA funciona melhor quando seus dados são gaussianos; portanto, você pode tentar algumas abordagens de pré-processamento para obter dados mais semelhantes aos gaussianos.
fonte