J'ai essayé de reproduire certaines recherches (à l'aide de PCA) à partir de SPSS en R. Dans mon expérience, la principal()
fonction de package psych
était la seule fonction qui se rapprochait (ou si ma mémoire est parfaite) pour correspondre à la sortie. Pour obtenir les mêmes résultats que dans SPSS, je devais utiliser le paramètre principal(..., rotate = "varimax")
. J'ai vu des articles parler de leur expérience de la PCA, mais si l'on se base sur les résultats de SPSS et sur l'utilisation de la rotation, cela ressemble davantage à une analyse factorielle.
Question: PCA, même après rotation (utilisation varimax
), est-il toujours PCA? J'avais l'impression qu'il s'agissait peut-être d'une analyse factorielle ... Dans le cas contraire, quels sont les détails qui me manquent?
la source
principal
fonction sur laquelle vous avez posé la question. Si sa réponse a bien répondu à votre question, alors peut-être que votre question n’est pas formulée correctement; envisageriez-vous l'édition? Sinon, je trouve que la réponse de ce doctorat est beaucoup plus proche de la réponse à votre question. Notez que vous pouvez modifier la réponse acceptée à tout moment.Réponses:
Cette question concerne en grande partie les définitions de PCA / FA, les opinions peuvent donc différer. Mon opinion est que PCA + varimax ne devrait pas être appelé PCA ou FA, mais plutôt explicitement désigné, par exemple, comme "PCA à rotation Varimax".
Je devrais ajouter que c'est un sujet assez déroutant. Dans cette réponse , je veux expliquer ce qu'est une rotation en fait est ; cela nécessitera quelques mathématiques. Un lecteur occasionnel peut passer directement à l'illustration. Ce n’est qu’alors que nous pourrons discuter de la question de savoir si la rotation de la PCA + doit ou non être appelée "PCA".
Une référence est l'ouvrage de Jolliffe "Analyse en composantes principales", section 11.1 "Rotation des composantes principales", mais j'estime que cela pourrait être plus clair.
Soit une matrice de données que nous supposons centrée. PCA correspond ( voir ma réponse ici ) à une décomposition en valeurs singulières: . Il existe deux vues équivalentes mais complémentaires sur cette décomposition: une vue "projection" de style plus PCA et une vue "variables latentes" de style plus FA. n × p X = U S V ⊤X n×p X=USV⊤
Selon la vue PCA-style, nous avons trouvé un tas de directions orthogonales (ce sont des vecteurs propres de la matrice de covariance, également appelée "directions principales" ou "axes"), et "composantes principales" ( également appelés «scores» de la composante principale) sont des projections des données sur ces directions. Les composantes principales ne sont pas corrélées, la première a une variance maximale possible, etc. On peut écrire:U S X = U S ⋅ V ⊤ = Scores ⋅ __gVirt_NP_NNS_NNPS<__ directions principales .V US
Selon la vue de type FA, nous avons trouvé des "facteurs latents" de variance unitaire non corrélés qui génèrent les variables observées via des "chargements". En effet, sont des composantes principales normalisées (non corrélées et avec variance unitaire), et si nous définissons les chargements comme suit: , puis (Notez que .) Les deux vues sont équivalentes. Notez que les chargements sont des vecteurs propres mis à l'échelle par les valeurs propres respectives ( sont des valeurs propres de la matrice de covariance).L=VS/ √U˜=n−1−−−−−√U X= √L=VS/n−1−−−−−√ S ⊤=SS/ √
(Je devrais ajouter entre parenthèses que PCA FA≠ ; FA vise explicitement à trouver des facteurs latents mappés linéairement aux variables observées via des chargements; il est plus souple que PCA et donne des chargements différents. C’est pourquoi je préfère appeler cela plus haut. "Vue de style FA sur PCA" et non pas FA, même si certaines personnes le considèrent comme l’une des méthodes FA.)
Maintenant, que fait une rotation? Par exemple, une rotation orthogonale, telle que varimax. Premièrement, elle ne considère que composants, c.-à-d.:Ensuite, il faut un carré orthogonal matrice , et branche dans cette décomposition: où les rotations sont données park<p
Notez que ce qui est en rotation sont: (1) les scores standardisés, (2) les chargements. Mais pas les scores bruts et pas les directions principales! Donc, la rotation a lieu dans l' espace latent , pas dans l'espace d'origine. C'est absolument crucial.
Du point de vue de la FA, il ne s'est pas passé grand chose. (A) Les facteurs latents ne sont toujours pas corrélés et standardisés. (B) Ils sont toujours mappés sur les variables observées via des chargements (en rotation). (C) La quantité de variance capturée par chaque composante / facteur est donnée par la somme des valeurs au carré de la colonne de chargements correspondante dans . (D) Géométriquement, les chargements couvrent toujours le même sous-espace dimensionnel dans (le sous-espace recouvert par les premiers vecteurs propres PCA). (E) L’approximation de et l’erreur de reconstruction n’ont pas changé du tout. (F) La matrice de covariance est toujours aussi approchée: k R p k X Σ≈ L k L ⊤ k = L r o t L ⊤ r o t .Lrot k Rp k X
Mais le point de vue de la PCA s'est pratiquement effondré. Les chargements pivotés ne correspondent plus aux directions / axes orthogonaux dans , c'est-à-dire que les colonnes de ne sont pas orthogonales! Pire, si vous projetez [orthogonalement] les données dans les directions données par les chargements pivotés, vous obtiendrez des projections corrélées (!) Et ne pourrez pas récupérer les scores. [Au lieu de cela, pour calculer les scores normalisés après rotation, il faut multiplier la matrice de données avec le pseudo-inverse des chargements . Alternativement, on peut simplement faire pivoter les partitions standardisées originales avec la matrice de rotation:L r o tRp Lrot U˜rot=X(L+rot)⊤ U˜rot=U˜T ] De plus, les composants pivotés ne capturent pas successivement la quantité maximale de variance: la variance est redistribuée entre les composants (même bien que toutes les composantes tournées capturent exactement la même variance que toutes les composantes principales originales).k k
Voici une illustration. Les données sont une ellipse 2D étendue le long de la diagonale principale. La première direction principale est la diagonale principale, la seconde lui est orthogonale. Les vecteurs de chargement PCA (vecteurs propres mis à l'échelle par les valeurs propres) sont indiqués en rouge - pointant dans les deux sens et également étirés d'un facteur de visibilité constant. Ensuite, j'ai appliqué une rotation orthogonale de aux chargements. Les vecteurs de charge résultants sont affichés en magenta. Notez comme ils ne sont pas orthogonaux (!).30∘
Une intuition de style FA est la suivante: imaginez un "espace latent" où les points remplissent un petit cercle (proviennent d’un gaussien 2D avec des variances unitaires). Cette distribution de points est ensuite étirée le long des chargements PCA (en rouge) pour devenir l'ellipse de données que nous voyons sur cette figure. Cependant, la même distribution de points peut être pivotée puis étirée le long des chargements PCA pivotés (magenta) pour devenir la même ellipse de données .
[Pour voir réellement qu'une rotation orthogonale de chargements est une rotation , il faut regarder un biplot PCA; là, les vecteurs / rayons correspondant aux variables d’origine se déplaceront simplement.]
Résumons. Après une rotation orthogonale (telle que varimax), les axes "rotation principale" ne sont pas orthogonaux et leur projection orthogonale n’a aucun sens. Il faut donc laisser tomber ce point de vue des axes / projections. Il serait étrange de l’appeler encore PCA (ce qui est tout à propos de projections avec variance maximale, etc.).
Du point de vue de FA, nous avons simplement fait pivoter nos facteurs latents (normalisés et non corrélés), ce qui est une opération valide. Il n'y a pas de "projections" dans FA; au lieu de cela, les facteurs latents génèrent les variables observées via des chargements. Cette logique est encore préservée. Cependant, nous avons commencé avec les composantes principales, qui ne sont pas réellement des facteurs (l’ACP n’est pas identique à l’AC). Il serait donc étrange d'appeler cela aussi FA.
Au lieu de débattre de la question de savoir si un "devrait" plutôt appeler PCA ou FA, je suggérerais d’être méticuleux pour spécifier la procédure exacte utilisée: "PCA suivie d’une rotation varimax".
Post Scriptum. Il est possible de considérer une autre procédure de rotation, où est inséré entre et . Cela ferait tourner les scores bruts et les vecteurs propres (au lieu des scores et des chargements standardisés). Le plus gros problème de cette approche est qu’après une telle "rotation", les scores ne seront plus décorrélés, ce qui est assez fatal pour PCA. On peut le faire, mais ce n’est pas ainsi que les rotations sont généralement comprises et appliquées.TT⊤ US V⊤
la source
PCA loading vectors... are shown in red
,stretched along the rotated PCA loadings (magenta)
. Je me demande comment des "chargements" ou leur "vecteur" pourraient être représentés sous forme d'axes sur le diagramme de dispersion des données. Pouvez-vous, s'il vous plaît, le rendre plus clair? Et l'idée de "stretching"? Merci.L'analyse en composantes principales (ACP) et l'analyse factorielle commune (CFA) sont des méthodes distinctes. Souvent, ils produisent des résultats similaires et la PCA est utilisée comme méthode d'extraction par défaut dans les routines d'analyse de facteur SPSS. Cela entraîne sans aucun doute une grande confusion quant à la distinction entre les deux.
En bout de ligne, ce sont deux modèles différents, conceptuellement. En ACP, les composants sont des combinaisons linéaires orthogonales réelles qui maximisent la variance totale. En FA, les facteurs sont des combinaisons linéaires qui maximisent la partie partagée de la variance - "constructions latentes" sous-jacentes. C’est pourquoi on appelle souvent l’analyse «analyse factorielle commune». FA utilise diverses routines d’optimisation et le résultat, contrairement à PCA, dépend de la routine d’optimisation utilisée et des points de départ de ces routines. Simplement il n'y a pas une solution unique unique.
Dans R, la fonction factanal () fournit à CFA une extraction du maximum de vraisemblance. Vous ne devez donc pas vous attendre à ce qu'il reproduise un résultat SPSS basé sur une extraction PCA. Ce n'est tout simplement pas le même modèle ou la même logique. Je ne suis pas sûr que vous obtiendriez le même résultat si vous utilisiez l'extraction du maximum de vraisemblance de SPSS, car ils pourraient ne pas utiliser le même algorithme.
Pour le meilleur ou pour le pire dans R, vous pouvez toutefois reproduire "l'analyse factorielle" confondue fournie par SPSS par défaut. Voici le processus décrit dans R. Avec ce code, je suis en mesure de reproduire le résultat "Analyse factorielle" de la composante principale de SPSS à l'aide de cet ensemble de données. (À l'exception du signe, qui est indéterminant). Vous pouvez également faire pivoter ce résultat en utilisant l’une des méthodes de rotation disponibles.
la source
prcomp
ou queprincomp
faire par rapport à l'approche mélangée de SPSS? Que fait réellement SPSS par extraction?zz <- scale(attitude,T,T)
etpc1 <- zz %*% solve(cor(attitude),lamba[,1])
. Où lambda est le résultat de la dernière ligne de l'exemple de @Brett Magills.Cette réponse consiste à présenter, sous forme de diagramme de trajectoire, des choses sur lesquelles @amoeba a motivé sa réponse profonde (mais légèrement compliquée) sur ce fil (je suis en quelque sorte d’accord avec elle à 95%) et comment elles me paraissent. .
La PCA, dans sa forme propre et minimale, correspond à la rotation orthogonale spécifique des données corrélées à sa forme non corrélée, les principales composantes réduisant progressivement la variabilité globale de façon séquentielle. Si la réduction de la dimensionnalité est tout ce que nous souhaitons, nous ne calculons généralement pas les chargements et tout ce qu'ils traînent après eux. Nous sommes heureux avec les (premières) scores des composantes principales . [Veuillez noter que les notations sur le graphique ne suivent pas précisément celles de @ amoeba - je m'en tiens à ce que j'adopte dans certaines de mes autres réponses.]P
Sur le graphique, je prends un exemple simple de deux variables
p=2
et utilise les deux composantes principales extraites. Bien que nous ne gardions habituellement que quelques premiersm<p
composants, pour la question théorique que nous examinons ("PCA avec rotation est-il un PCA ou quoi?"), Cela ne fait aucune différence si vous les conservezm
tous ou tousp
; au moins dans ma réponse particulière.L'astuce des charges est de tirer l' échelle (magnitude, variabilité, inertie ) au large des composants (scores bruts) et sur les coefficients (vecteurs propres) en laissant le premier à être « cadre » nu (pr standard .) (les scores des composants) et ceux-ci doivent être charnus (charges). Vous restaurez les données également avec . Mais les chargements ouvrent des perspectives: (i) pour interpréter les composants; (ii) faire l'objet d'une rotation; (iii) restaurer les corrélations / covariances des variables. Tout cela est dû au fait que la variabilité des données a été écrite dans des chargements, tout comme leur chargement.L V Pz A X=PV′=PzA′
Et ils peuvent renvoyer cette charge aux points de données à tout moment, maintenant ou après la rotation . Si nous concevons une rotation orthogonale telle que varimax, cela signifie que nous voulons que les composants restent non corrélés après la rotation. Seules les données avec la matrice de covariance sphérique, lorsqu'elles sont pivotées orthogonalement, préservent le caractère non corrélé. Et voila, les composants principaux normalisés (qui dans l'apprentissage machine sont souvent appelés "données blanchies en PCA") sont que les données magiques ( sont en réalité proportionnelles à la gauche, c'est-à-dire que les vecteurs propres des lignes). Alors que nous sommes à la recherche de la matrice de rotation varimaxPz Pz Q pour faciliter l'interprétation des chargements, les points de données nous attendent passivement dans leur sphère et identité chaste (ou "blancheur").
Après que soit trouvé, la rotation de par elle équivaut au calcul habituel des scores normalisés des composantes principales via l'inverse généralisé de la matrice de chargement, - cette fois, des chargements pivotés , (voir le graphique ). Les composants principaux résultant en rotation varimax, sont pas corrélés, comme nous le voulions, plus les données sont restaurées par eux aussi bien qu'avant la rotation: . Nous pouvons alors leur redonner leur échelle déposé (et tourné en conséquence) dans - les unstandardize: .P z A r C z X = P z A ' = C z A ' r A r CQ Pz Ar Cz X=PzA′=CzA′r Ar C
Nous devons être conscients que les "composants principaux à rotation variable" ne sont plus des composants principaux : j’ai utilisé la notation Cz, C au lieu de Pz, P, pour le souligner. Ce ne sont que des "composants". Les composants principaux sont uniques, mais ils peuvent être nombreux. Des rotations autres que varimax donneront d’autres nouvelles variables appelées aussi composants et non corrélées, en plus de celles .C
On peut également dire que les composantes principales varimax-tournées (ou autrement tournées orthogonalement) (maintenant juste des "composants"), bien qu'elles restent non corrélées, orthogonales, n'impliquent pas que leurs chargements sont également orthogonaux. Les colonnes de sont orthogonales (comme l'étaient les vecteurs propres ), mais pas les colonnes de (voir aussi la note de bas de page ici ).V A rA V Ar
Et enfin - la rotation des composants principaux bruts avec notre n'est pas une action utile. Nous obtiendrons des variables corrélées avec un sens problématique. est apparu pour optimiser (d'une manière spécifique) la configuration des charges qui avaient absorbé toute l'échelle dans les . n'a jamais été entraîné à faire pivoter des points de données avec toute l'échelle laissée dessus. La rotation de avec sera équivalente à la rotation de vecteurs propres avec (dansQ " C " Q Q P Q V Q V r " C " = X V rP Q "C" Q Q P Q V Q Vr ) puis en calculant les scores bruts de composants sous la forme . Ces "chemins" notés par @amoeba dans leur post-scriptum."C"=XVr
Ces dernières actions (inutiles pour la plupart) nous rappellent que les vecteurs propres, et pas seulement les chargements, pourraient faire l’objet d’une rotation, en général. Par exemple, la procédure varimax pourrait leur être appliquée pour simplifier leur structure. Mais comme les vecteurs propres ne sont pas aussi utiles pour interpréter la signification des composants que les chargements, la rotation des vecteurs propres est rarement effectuée.
Ainsi, une ACP avec une rotation ultérieure de varimax (ou autre) est
Je n'ai pas fait référence à l'analyse factorielle dans cette réponse. Il me semble que l'utilisation du mot "espace latent" par @ amoeba est un peu risquée dans le contexte de la question posée. Je conviens toutefois que la rotation analytique de PCA + pourrait être appelée " vue de type FA sur PCA".
la source
En
psych::principal()
vous pouvez faire différents types de rotations / transformations 'PC' votre extrait en composantes principales (s) ou '' en utilisant l'rotate=
argument, comme:"none"
,"varimax"
(par défaut),"quatimax"
,"promax"
,"oblimin"
,"simplimax"
et"cluster"
. Vous devez décider de manière empirique lequel vous convient le mieux dans votre cas, si nécessaire, en fonction de votre propre évaluation et de votre connaissance du sujet à l'étude. Une question clé qui pourrait vous donner un indice: laquelle est la plus interprétable (encore si nécessaire)?Dans l’aide, les éléments suivants pourraient également vous être utiles:
la source
À ma connaissance, la distinction entre l'analyse PCA et l'analyse factorielle consiste principalement à déterminer s'il existe un terme d'erreur. Ainsi, PCA peut représenter fidèlement les données et le fera, alors que l'analyse factorielle est moins fidèle aux données sur lesquelles elle est formée, mais tente de représenter les tendances sous-jacentes ou la communauté dans les données. Dans une approche standard, l’ACP n’est pas soumise à une rotation, mais il est mathématiquement possible de le faire, alors les gens le font de temps en temps. Je suis d’accord avec les commentateurs en ce sens que le "sens" de ces méthodes est quelque peu à gagner et qu’il est probablement sage de s’assurer que la fonction que vous utilisez fait ce que vous voulez - par exemple, comme vous le remarquez, R a des fonctions qui remplissent un type d’ACP différent de celui des utilisateurs de SPSS.
la source
Grâce au chaos dans les définitions des deux, ils sont effectivement synonymes. Ne croyez pas les mots et cherchez au fond des docks pour trouver les équations.
la source
Bien que cette question ait déjà été acceptée, j'aimerais ajouter quelque chose au point de la question.
"PCA" - si je me souviens bien - signifie "analyse en composantes principales"; aussi longtemps que vous analysez les composantes principales, que ce soit sans rotation ou avec rotation, nous en sommes toujours à l’analyse des "composantes principales" (qui ont été trouvées par la décomposition initiale de la matrice appropriée).
Je formulerais qu'après la "varimax" -rotation sur les deux premiers composants principaux, nous avons la "solution-varimax des deux premiers ordinateurs" (ou quelque chose d'autre), mais restons dans le cadre de l'analyse des composants principaux, ou plus courtes, sont dans le cadre de "pca".
Pour être encore plus clair: je ne pense pas que la simple question de la rotation pose le problème de la distinction entre EPT et CFA (ce dernier mentionné / introduit dans le problème, par exemple dans la réponse de Brett).
la source
J'ai trouvé cela le plus utile possible: Abdi & Williams, 2010, Analyse en composantes principales .
(voir le papier pour la définition de Q).
la source