Empfohlenes Verfahren zur Faktoranalyse dichotomer Daten mit R.

10

Ich muss eine Faktorenanalyse für einen Datensatz durchführen, der aus dichotomen Variablen besteht (0 = Ja, 1 = Nein), und ich weiß nicht, ob ich auf dem richtigen Weg bin.

Mit tetrachoric()Ich erstelle ich eine Korrelationsmatrix, auf der ich laufe fa(data,factors=1). Das Ergebnis ist ziemlich nahe an den Ergebnissen, die ich bei Verwendung von MixFactor erhalte , aber es ist nicht dasselbe.

  1. Ist das in Ordnung oder würden Sie ein anderes Verfahren empfehlen?
  2. Warum funktioniert fa()und factanal()erzeugt ein Fehler? ( Fehler in solve.default(cv) : System ist für den Rechner singulär: reziproke Konditionszahl = 4.22612e-18)
cada
quelle
1
Ich spreche kein Deutsch, aber der Fehler scheint darauf zurückzuführen zu sein, dass die tetrachorische Matrix singulär (nicht invertierbar) ist. Selbst bei einer Stichprobe guter Größe können einige Schätzungen von polychromen Korrelationsmatrizen keine richtigen Korrelationsmatrizen sein. Meine Vermutung ist, dass fa () Hauptkomponenten verwendet und factanal () FA mit maximaler Wahrscheinlichkeit ausführt, aber das ist mir aus der Dokumentation für fa () nicht ersichtlich.
JMS
@cada Wie viele Artikel / Themen hast du? Und welche Methode ist in MixFactor implementiert?
Chl
1
@cada warum führen Sie die Faktoranalyse durch? Wenn Sie die Fähigkeit der Teilnehmer abschätzen möchten, ist IRT möglicherweise ein besserer Ansatz. In Bezug auf fa versus factanal verwendet fa standardmäßig einen minimalen Rest, während factanal eine ML-Methode verwendet.
Richiemorrisroe
@chl: viel zu wenig! Ich habe gerade mit der Umfrage begonnen und mittlerweile gibt es nur noch 45 Themen. Ich kann im Moment keine neuen Daten sammeln und deshalb versuche ich, so viel wie möglich vom r-Code zu machen ...
cada
1
@cada Ein CFA mit 45 Themen wäre surrealistisch :-) Ich werde später versuchen, meine Gedanken hinzuzufügen.
Chl

Antworten:

12

Zusammenfassend lässt sich sagen, dass bei n = 45 Probanden korrelationsbasierte und multivariate deskriptive Ansätze verbleiben. Da dieser Fragebogen jedoch eindimensional sein soll, ist dies immer ein guter Anfang.

Was ich tun würde:

  • Berechnen Sie paarweise Korrelationen für Ihre 22 Elemente. Geben Sie den Bereich und den Median an - dies gibt einen Hinweis auf die relative Konsistenz der Antworten der beobachteten Elemente (Korrelationen über 0,3 werden im Allgemeinen als Hinweis auf eine gute konvergente Validität angesehen, aber natürlich hängt die Genauigkeit dieser Schätzung von der Stichprobengröße ab). ;; Eine alternative Methode zur Untersuchung der internen Konsistenz des Fragebogens wäre die Berechnung von Cronbachs Alpha , obwohl das zugehörige Konfidenzintervall (verwenden Sie dazu Bootstrap) mit n = 45 relativ groß ist.
  • Berechnen Sie die Punkt-Biserial-Korrelation zwischen Elementen und der summierten Skalenbewertung. Es gibt Ihnen eine Vorstellung von der Unterscheidungskraft jedes Elements (wie Ladungen in FA), wobei Werte über 0,3 eine zufriedenstellende Beziehung zwischen jedem Element und seiner entsprechenden Skala anzeigen.
  • Verwenden Sie eine PCA, um die Korrelationsmatrix zusammenzufassen (sie liefert eine äquivalente Interpretation zu dem, was bei dichotom bewerteten Elementen aus einer Mehrfachkorrespondenzanalyse erhalten würde ). Wenn sich Ihr Instrument als eindimensionale Skala für Ihre Probe verhält, sollten Sie eine dominante Variationsachse beobachten (die sich im ersten Eigenwert widerspiegelt).

2(1- -r2)/.(n)

chl
quelle
Vielen Dank! Ihre Antwort ist so detailliert und wirklich sehr, sehr hilfreich! Vielen Dank!
Cada
3

Dieser Thread hat eine gute Google-Position für den Fehler "System ist für den Rechner singulär: reziproke Konditionszahl" unter Verwendung von factanal (auf Englisch: "System ist rechnerisch singulär: reziproke Bedingungsnummer") - daher werde ich einen Kommentar hinzufügen:

Wenn die Korrelationsmatrix a priori berechnet wird (z. B. um fehlende Werte paarweise zu löschen), stellen Sie sicher, dass factanal () nicht glaubt, dass die Matrix die zu analysierenden Daten sind (https://stat.ethz.ch/pipermail/r- help / 2007-October / 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
quelle