Como fazer análise fatorial quando a matriz de covariância não é definida positivamente?

11

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,1r=10.1

Quando estou tentando executar a análise fatorial usando o factoranMatlab 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:

insira a descrição da imagem aqui

Vasek
fonte
3
Eu acho que é o contrário da baixa dependência mútua que é um problema aqui. Você provavelmente tem algumas variáveis ​​que são linearmente dependentes entre si e isso faz com que sua matriz de covariância seja semi-definida (ou seja, possui alguns autovalores zero).
precisa saber é o seguinte
3
Para as pessoas que votam abaixo a pergunta para encerrar: Por que uma pergunta sobre a definição positiva da matriz de covariância da amostra seria fora de tópico aqui? O usuário está preocupado porque um aplicativo padrão da Análise Fatorial não funciona. Peça mais informações, se quiser!
usεr11852
2
Você pode calcular e apresentar os autovalores da matriz de covariância da amostra? (por exemplo eig(cov(Z2))). Eu suspeito fortemente que alguns deles sejam muito pequenos.
usεr11852
3
Concordo com @ usεr11852: parece que esta pergunta foi encerrada incorretamente como off-topic (votei para fechá-la eu mesmo). Parecia uma questão de programação, mas na verdade é uma pergunta perfeitamente sobre tópico e razoável. Eu editei e votei para reabrir. Pena que o OP parece ter desaparecido.
Ameba diz Reinstate Monica
3
Eu argumentaria que pode haver conteúdo estatístico para essa pergunta que a comunidade Matlab não poderá ajudar. Como você calcula sua Z2matriz? 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.
Stask

Respostas:

1

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=QDQ1,
QC
D=(λ1000λ2λn00000)
Q0 . Por outro lado, é o grau de .nC

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,...=1015.
C~=QD~Q1,
D~=(λ1000λ2λn10150001015)

No Matlab, é possível obter usando o comando:Q,D

[Q,D] = eig(C)

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.CC~

Jonas
fonte
0

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

Romain Reboulleau
fonte
As entradas diagonais já parecem bastante dominantes. Você acha que isso ajudaria?
Jonas
Estou preocupado com as entradas 8 e 10, se algumas são linearmente dependentes, devem ser essas duas. Não sei o suficiente sobre o cálculo real da decomposição de eigen, mas acho que essa solução poderia funcionar: adicionar 1e-10 à diagonal não faz muito a respeito da dependência linear, mas pode apenas adicionar o que for necessário numericamente para que o o cálculo dos valores próprios é fixo (ou seja, não há valor próprio 0). No entanto, se minha solução não funcionar, acho a sua bastante elegante.
Romain Reboulleau
-2

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.

PickleRick
fonte
Estou perplexo com esta resposta. Qual é o sentido de fazer uma FA de dados não correlacionados?
Ttnphns 24/05
@ttnphns Acho que você está certo! Não faz sentido aplicar a FA em dados correlacionados! Minha sugestão vem de um tipo específico de FA, em que o PCA foi aplicado em um pré-processamento de criação de representações vetoriais a partir de dados, no qual você aplicará a FA. Os dados originais são geralmente projetados pelo PCA antes de serem transformados na representação vetorial. E a FA é aplicada na representação vetorial, e não nos dados projetados pelo PCA. Foi mal! Vou atualizar minha resposta. Embora, em alguns casos, um PCA probabilístico possa funcionar tão bem quanto a FA se o modelo da FA não convergir. Você não concorda?
PickleRick