Comment faire une analyse factorielle lorsque la matrice de covariance n'est pas définie positive?


11

J'ai un ensemble de données qui comprend 717 observations (lignes) qui sont décrites par 33 variables (colonnes). Les données sont normalisées par z-score de toutes les variables. Il n'y a pas deux variables dépendantes linéairement ( ). J'ai également supprimé toutes les variables avec une très faible variance (inférieure à ). La figure ci-dessous montre la matrice de corrélation correspondante (en valeurs absolues).r=10.1

Lorsque j'essaie d'exécuter l'analyse factorielle à l'aide factorande Matlab comme suit:

[Loadings1,specVar1,T,stats] = factoran(Z2,1);

Je reçois l'erreur suivante:

The data X must have a covariance matrix that is positive definite.

Pourriez-vous s'il vous plaît me dire où est le problème? Est-ce dû à une faible dépendance mutuelle entre les variables utilisées? De plus, que puis-je faire à ce sujet?


Ma matrice de corrélation:

entrez la description de l'image ici


3
Je pense que c'est le contraire d'une faible dépendance mutuelle qui pose problème ici. Vous avez probablement certaines variables qui sont linéairement dépendantes entre elles et cela fait que votre matrice de covariance est semi-définie (c.-à-d. Que vous avez des valeurs propres nulles).
usεr11852

3
Aux personnes qui votent contre la question à clore: pourquoi une question sur le caractère définitif positif de la matrice de covariance de l'échantillon serait -elle hors sujet ici? L'utilisateur se demande pourquoi une application standard de l'analyse factorielle ne fonctionne pas. Demandez plus d'informations si vous le souhaitez!
usεr11852

2
Pouvez-vous calculer et présenter les valeurs propres de la matrice de covariance échantillon? (par exemple. eig(cov(Z2))). Je soupçonne fortement que certains d'entre eux sont très petits.
usεr11852

3
Je suis d'accord avec @ usεr11852: il semble que cette question ait été à tort clôturée comme hors sujet (j'ai voté pour la fermer moi-même). Cela ressemblait à une question de programmation, mais c'est en fait une question parfaitement pertinente et raisonnable. Je l'ai édité et j'ai voté pour la réouverture. Dommage que l'OP semble avoir disparu cependant.
amibe dit Réintégrer Monica

3
Je dirais qu'il peut y avoir un contenu statistique à cette question que la communauté Matlab ne pourra pas vous aider. Comment calculez-vous votre Z2matrice? Si des valeurs manquent dans vos données, la suppression par paire peut conduire la matrice à devenir non inversible lorsque les différentes corrélations de cette matrice sont calculées à l'aide de différents sous-échantillons des données.
StasK

Réponses:


1

Définissons la matrice de corrélation par . Comme il est semi-défini positif, mais pas défini positif, sa décomposition spectrale ressemble à où les colonnes de sont constituées de vecteurs propres orthonormés de et 0 \ end {pmatrix} est une matrice diagonale contenant les valeurs propres correspondant aux vecteurs propres de . Certains d'entre eux sontC

C=QDQ1,
QC
D=(λ1000λ2λn00000)
Q0 . De plus est le rang de .nC

Un moyen simple de restaurer une définition positive consiste à définir les valeurs propres à une valeur numériquement non nulle, par exemplePar conséquent, ensemble où Ensuite,0

λn+1,λn+2,...=1015.
C~=QD~Q1,
D~=(λ1000λ2λn10150001015)

Dans Matlab, on peut obtenir utilisant la commande:Q,D

[Q,D] = eig(C)

La construction de n'est alors que de simples manipulations matricielles.C~

Remarque: Il serait cependant difficile de dire comment cela influence l'analyse factorielle; par conséquent, il faut probablement être prudent avec cette méthode. De plus, même s'il s'agit d'un est une matrice de corrélation, pourrait bien ne pas l'être. Par conséquent, une autre normalisation des entrées pourrait être nécessaire.CC~


0

Il est possible que vous rencontriez des problèmes numériques avec votre matrice. Il est peut-être en fait positif, mais le calcul numérique dit le contraire.

Une solution très courante, dans ce cas, consiste à ajouter une valeur très faible (1.E-10 par exemple) à tous les éléments diagonaux. Si cela ne résout pas le problème, essayez d'augmenter progressivement cette valeur.


Les entrées en diagonale semblent déjà assez dominantes. Pensez-vous que cela aiderait?
Jonas

Je suis inquiet pour les 8e et 10e entrées, si certaines sont linéairement dépendantes, ce doit être ces deux-là. Je ne connais pas assez le calcul de décomposition propre, mais je pense que cette solution pourrait fonctionner: l'ajout de 1e-10 à la diagonale ne fait pas grand-chose sur la dépendance linéaire, mais cela pourrait simplement ajouter tout ce qui est numériquement nécessaire pour que le le calcul des valeurs propres est fixe (c'est-à-dire pas de valeur propre 0). Pourtant, si ma solution ne fonctionne pas, je trouve la vôtre assez élégante.
Romain Reboulleau

-2

FA fonctionne mieux lorsque vos données sont gaussiennes, vous pouvez donc essayer certaines approches de prétraitement pour avoir des données plus gaussiennes.


Je suis déconcerté par cette réponse. Quel est le sens de faire une FA de données non corrélées?
ttnphns

@ttnphns Je pense que vous avez raison! Cela n'a aucun sens d'appliquer l'AF sur les données décorrélées! Ma suggestion vient d'un type spécifique de FA, où l'ACP a appliqué un prétraitement de création de représentations vectorielles à partir de données, dans lequel vous appliquerez FA. Les données originales sont généralement projetées par l'ACP avant d'être transformées en représentation vectorielle. Et le FA est appliqué sur la représentation vectorielle, et non sur les données projetées PCA. Ma faute! Je mettrai à jour ma réponse. Bien que, dans certains cas, une ACP probabiliste puisse fonctionner aussi bien que FA si le modèle FA ne parvient pas à converger. Tu n'es pas d'accord?
PickleRick
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.