Procédure recommandée pour l'analyse factorielle sur des données dichotomiques avec R

10

Je dois effectuer une analyse factorielle sur un ensemble de données composé de variables dichotomiques (0 = oui, 1 = non) et je ne sais pas si je suis sur la bonne voie.

En utilisant tetrachoric()je crée une matrice de corrélation, sur laquelle je cours fa(data,factors=1). Le résultat est assez proche des résultats que je reçois lorsque j'utilise MixFactor , mais ce n'est pas la même chose.

  1. Est-ce correct ou recommanderiez-vous une autre procédure?
  2. Pourquoi fa()fonctionne et factanal()produit une erreur? ( Fehler in solve.default(cv) : System ist für den Rechner singulär: reziproke Konditionszahl = 4.22612e-18)
cada
la source
1
Je ne parle pas (allemand?) Mais l'erreur semble être due au fait que la matrice tétrachorique est singulière (non inversible). Même avec un échantillon de bonne taille, certaines estimations des matrices de corrélation polychoriques peuvent ne pas être des matrices de corrélation appropriées. Mon intuition est que fa () utilise les principaux composants et factanal () fait FA avec une probabilité maximale, mais ce n'est pas évident pour moi dans la documentation de fa ().
JMS
@cada Combien d'articles / sujets avez-vous? Et quelle méthode est implémentée dans MixFactor?
chl
1
@cada pourquoi exécutez-vous l'analyse factorielle? Si vous visez à estimer la capacité des participants, l'IRT peut être une meilleure approche. en ce qui concerne fa versus factanal, fa utilise le minimum résiduel par défaut, tandis que factanal utilise une méthode ML.
richiemorrisroe
@chl: trop peu! Je viens de commencer l'enquête et maintenant il n'y a que 45 sujets. Je ne peux pas collecter de nouvelles données en ce moment et c'est pourquoi j'essaie de faire autant de code r que possible ...
cada
1
@cada Un CFA avec 45 sujets serait surréaliste :-) J'essaierai d'ajouter mes réflexions plus tard.
chl

Réponses:

12

Pour résumer, avec n = 45 sujets, vous vous retrouvez avec des approches descriptives basées sur la corrélation et multivariées. Cependant, comme ce questionnaire est censé être unidimensionnel, c'est toujours un bon début.

Ce que je ferais:

  • Calculez les corrélations par paires pour vos 22 éléments; rapportez la plage et la médiane - cela donnera une indication de la cohérence relative des réponses des éléments observés (les corrélations supérieures à 0,3 sont généralement considérées comme indicatives d'une bonne validité convergente, mais bien sûr, la précision de cette estimation dépend de la taille de l'échantillon) ; une autre façon d'étudier la cohérence interne du questionnaire serait de calculer l' alpha de Cronbach , bien qu'avec n = 45 l'intervalle de confiance associé (utilisez le bootstrap pour cela) sera relativement grand.
  • Calculer la corrélation bisériale ponctuelle entre les éléments et le score d'échelle sommé; il vous donnera une idée du pouvoir discriminant de chaque article (comme les chargements en FA), où des valeurs supérieures à 0,3 indiquent une relation satisfaisante entre chaque article et leur échelle correspondante.
  • Utilisez une ACP pour résumer la matrice de corrélation (elle donne une interprétation équivalente à ce qui serait obtenu à partir d'une analyse de correspondance multiple dans le cas d'éléments notés de manière dichotomique). Si votre instrument se comporte comme une échelle unidimensionnelle pour votre échantillon, vous devez observer un axe de variation dominant (tel que reflété par la première valeur propre).

Si vous souhaitez utiliser R, vous trouverez des fonctions utiles dans le package ltm et psych ; parcourez la vue des tâches de CRAN Psychometrics pour plus de packages. Si vous obtenez 100 sujets, vous pouvez essayer une analyse CFA ou SEM avec un intervalle de confiance bootstrap. (Gardez à l'esprit que les charges doivent être très importantes pour considérer qu'il existe une corrélation significative entre tout élément et son facteur, car elle devrait être au moins deux fois l'erreur standard d'un coefficient de corrélation fiable, .)2(1r2)/(n)

chl
la source
Merci beaucoup! Votre réponse est si détaillée et vraiment vraiment utile! Je vous remercie!
cada
3

Ce fil a une bonne position Google pour l'erreur "System ist für den Rechner singulär: reziproke Konditionszahl" en utilisant factanal (en anglais: "system is computationally singular: reciprocal condition number") - donc j'ajouterai un commentaire:

Lorsque la matrice de corrélation est calculée a priori (par exemple, pour supprimer par paires les valeurs manquantes), assurez-vous que factanal () ne pense pas que la matrice est les données à analyser (https://stat.ethz.ch/pipermail/r- aide / 2007-octobre / 142567.html).

PREVIOUS: matrix = cor(data, use="pairwise.complete.obs")  # For example
WRONG: factanal(matrix, 3, rotation="varimax")
RIGHT: factanal(covmat=matrix, factors=3, rotation="varimax")

BurninLeo

BurninLeo
la source