Je suis un étudiant diplômé en informatique. J'ai fait une analyse factorielle exploratoire pour un projet de recherche. Mes collègues (qui dirigent le projet) utilisent SPSS, alors que je préfère utiliser R. Cela n'a pas d'importance jusqu'à ce que nous découvrions une divergence majeure entre les deux progiciels statistiques.
Nous utilisons la factorisation des axes principaux comme méthode d'extraction (veuillez noter que je suis bien conscient de la différence entre l'ACP et l'analyse factorielle, et que nous n'utilisons pas l'ACP , du moins pas intentionnellement). D'après ce que j'ai lu, cela devrait correspondre à la méthode « de l' axe principal » dans R, et soit « affacturage axe principal » ou « moindres carrés non pondérés » dans SPSS, d' après la documentation R . Nous utilisons une méthode de rotation oblique (spécifiquement, promax ) parce que nous attendons des facteurs corrélés et interprétons la matrice du modèle .
L'exécution des deux procédures dans R et SPSS, il existe des différences majeures. La matrice de motifs donne différents chargements. Bien que cela donne plus ou moins le même facteur aux relations variables, il existe jusqu'à une différence de 0,15 entre les chargements correspondants, ce qui semble plus que prévu par une implémentation différente de la méthode d'extraction et des rotations promax. Cependant, ce n'est pas la différence la plus surprenante.
La variance cumulée expliquée par les facteurs est d'environ 40% dans les résultats SPSS et 31% dans les résultats R. C'est une énorme différence, et cela a amené mes collègues à vouloir utiliser SPSS au lieu de R. Je n'ai aucun problème avec cela, mais une différence aussi grande me fait penser que nous pourrions interpréter quelque chose de manière incorrecte, ce qui est un problème.
Muddying les eaux encore plus, SPSS signale différents types de variance expliquée lorsque nous exécutons l'affacturage des moindres carrés non pondéré. La proportion de la variance expliquée par les valeurs propres initiales est de 40%, tandis que la proportion de la variance expliquée des sommes d'extraction des charges au carré (SSL) est de 33%. Cela m'amène à penser que les valeurs propres initiales ne sont pas le nombre approprié à regarder (je soupçonne que c'est la variance expliquée avant la rotation, bien qu'elle soit si grande me dépasse). Encore plus déroutant, SPSS affiche également Rotation SSL, mais ne calcule pas le pourcentage de variance expliquée (SPSS me dit que le fait d'avoir des facteurs corrélés signifie que je ne peux pas ajouter de SSL pour trouver la variance totale, ce qui est logique avec les calculs que j'ai vus). Les SSL signalés par R ne correspondent à aucun de ceux-ci, et R me dit qu'il décrit 31% de la variance totale. Les SSL de R correspondent le plus étroitement aux SSL de rotation. Les valeurs propres de R de la matrice de corrélation d'origine correspondent aux valeurs propres initiales de SPSS.
Veuillez également noter que j'ai joué avec différentes méthodes et que les ULS et PAF de SPSS semblent correspondre à la méthode de PA de R la plus proche.
Mes questions spécifiques:
- Quelle différence dois-je attendre entre R et SPSS avec les implémentations d'analyse factorielle?
- Laquelle des sommes des charges carrées de SPSS dois-je interpréter, valeurs propres initiales, extraction ou rotation?
- Y a-t-il d'autres problèmes que j'aurais pu ignorer?
Mes appels à SPSS et R sont les suivants:
SPSS:
FACTOR
/VARIABLES <variables>
/MISSING PAIRWISE
/ANALYSIS <variables>
/PRINT INITIAL KMO AIC EXTRACTION ROTATION
/FORMAT BLANK(.35)
/CRITERIA FACTORS(6) ITERATE(25)
/EXTRACTION ULS
/CRITERIA ITERATE(25)
/ROTATION PROMAX(4).
R:
library(psych)
fa.results <- fa(data, nfactors=6, rotate="promax",
scores=TRUE, fm="pa", oblique.scores=FALSE, max.iter=25)
la source
Réponses:
Tout d'abord, j'appuie la recommandation ttnphns de regarder la solution avant la rotation. L'analyse factorielle telle qu'elle est implémentée dans SPSS est une procédure complexe en plusieurs étapes, la comparaison du résultat de chacune de ces étapes devrait vous aider à identifier le problème.
Plus précisément, vous pouvez exécuter
pour voir la matrice de corrélation que SPSS utilise pour effectuer l'analyse factorielle. Ensuite, dans R, préparez vous-même la matrice de corrélation en exécutant
Toute divergence dans la façon dont les valeurs manquantes sont traitées doit être évidente à ce stade. Une fois que vous avez vérifié que la matrice de corrélation est la même, vous pouvez l'alimenter à la fonction fa et relancer votre analyse:
Si vous obtenez toujours des résultats différents dans SPSS et R, le problème ne manque pas de valeurs liées.
Ensuite, vous pouvez comparer les résultats de la méthode d'analyse factorielle / d'extraction elle-même.
et
Encore une fois, comparez les matrices factorielles / les communautés / la somme des charges au carré. Ici, vous pouvez vous attendre à de minuscules différences mais certainement pas de l'ampleur que vous décrivez. Tout cela vous donnerait une idée plus claire de ce qui se passe.
Maintenant, pour répondre directement à vos trois questions:
la source
fa
fonction dans R provient dupsych
package. Lafactanal
fonction du package de base devrait fonctionner de la même manière, maispsych
vaut quand même la peine d'être utilisée à d'autres fins. En fait, comme il s'agit de données Likert, il serait judicieux d'utiliser lespsych
packages à lafa.poly
place: voir la documentation d'aide .Récemment, j'ai constaté que la plupart des écarts d'analyse factorielle entre SPSS et R (avec le package Psych) disparaissent lorsque les données sont traitées dans le sens de la liste manquante dans chaque programme, la matrice de corrélation apparaît exactement la même dans chacun, et aucune rotation oblique n'est utilisée.
Une divergence qui subsiste est dans la série de valeurs qui apparaissent dans le tracé d'éboulis indiquant les valeurs propres après l'extraction. Dans «éboulis (cor (mydata))» de R, ces «facteurs» ne correspondent pas à ceux répertoriés dans le tableau des écarts expliqués de SPSS sous «Somme d'extraction des charges au carré». Notez que les "composants" du tracé d'aperçu R correspondent au tracé d'aperçu de SPSS, qui correspond également aux "valeurs propres initiales" de sa table Variance Explained.
J'ai également constaté que le "Var de la proportion" expliqué par chaque facteur est, dans R, parfois rapporté comme (la proportion pour un facteur donné) / (le montant expliqué par tous les facteurs), tandis qu'à d'autres moments il l'est (la proportion pour un facteur donné) (le nombre d'éléments dans l'analyse). Donc, si vous obtenez le premier, il est, bien qu'il ne s'agisse pas d'une correspondance, au moins proportionnel et dérivable de ce que SPSS rapporte sous «Somme d'extraction des charges au carré ...% de variance».
L'introduction de la rotation oblimin dans chaque programme, cependant, crée des écarts importants dans le chargement des articles ou la variance des facteurs a expliqué que je n'ai pas été en mesure de résoudre.
la source
La méthode de rotation par défaut dans R est oblimin, donc cela causera probablement la différence. En tant que test, exécutez un PAF / oblimin dans SPSS et R et vous trouverez des résultats presque identiques.
la source
Je ne sais pas ce qui cause les différences dans les chargements de modèle, mais je suppose que la différence en% de la variance expliquée est due à: - interprétez-vous peut-être la première partie (de 2 ou 3) du tableau de variance expliquée SPSS qui montre réellement résultats de l'analyse en composantes principales. La deuxième partie présente les résultats des résultats de l'analyse factorielle non tournée et les troisièmes résultats après rotation (si utilisés). - le fait que la fonction fa (ou plus précisément sa méthode d'impression) calcule incorrectement SSL pour les facteurs obliques. Pour obtenir le% de la variance totale expliqué par facteur, vous devez calculer la somme des charges structurelles au carré par facteur et diviser cela par le nombre de variables. Cependant, vous ne pouvez pas les résumer (en cas de rotations obliques) pour obtenir le% de variance expliqué par tous les facteurs. Pour l'obtenir,
la source
Cette réponse s'ajoute à celles ci-dessus. Comme l'a suggéré Gala dans sa réponse, il faut d'abord déterminer si les solutions fournies par R (par exemple fa en psych) et SPSS sont différentes avant la rotation. S'ils sont identiques, examinez les paramètres de rotation de chaque programme. (Pour SPSS, vous pouvez trouver tous les paramètres dans l'entrée de manuel de référence pour FACTOR).
Un paramètre important à rechercher est la normalisation de Kaiser . Par défaut, SPSS effectue la normalisation de Kaiser pendant la rotation, contrairement à certaines fonctions R comme «fa». Vous pouvez contrôler ce paramètre dans SPSS en spécifiant / CRITERIA = NOKAISER / KAISER, pour vérifier s'il élimine les écarts entre les résultats avec chaque programme.
la source