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).
Lorsque j'essaie d'exécuter l'analyse factorielle à l'aide factoran
de 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:
eig(cov(Z2))
). Je soupçonne fortement que certains d'entre eux sont très petits.Z2
matrice? 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.Réponses:
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=QDQ−1, Q C D=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜λ10⋮⋮⋮⋮00λ2⋱⋯⋯⋱⋱⋱⋯⋯⋱λn⋱⋯⋯⋱0⋱⋯⋯⋱⋱00⋮⋮⋮⋮00⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟ Q 0 . De plus est le rang de .n C
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,...=10−15. C~=QD~Q−1, D~=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜λ10⋮⋮⋮⋮00λ2⋱⋯⋯⋱⋱⋱⋯⋯⋱λn⋱⋯⋯⋱10−15⋱⋯⋯⋱⋱00⋮⋮⋮⋮010−15⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
Dans Matlab, on peut obtenir utilisant la commande:Q,D
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.C C~
la source
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.
la source
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.
la source