Posts mit dem Label Faktorenanalyse werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Faktorenanalyse werden angezeigt. Alle Posts anzeigen

Samstag, 27. Dezember 2014

Strukturgleichungsmodelle mit R

Auch Strukturgleichungsmodelle mit latenten Variablen lassen sich mit R einfach aufstellen und prüfen. Wir verwenden dazu das Packet "lavaan". Das Paket ist umfassend auf der lavaan-Projekt-Website dokumentiert: http://lavaan.ugent.be/tutorial/index.html

1. Installation


Zunächst wird das lavaan Paket mit folgendem Befehl installiert:
 
R > install.packages("lavaan", dependencies = TRUE)
 
Die Installation kann 2 bis 3 Minuten dauern, da eine Reihe von abhängigen Paketen ebenfalls installiert werden müssen.

Mit

library(lavaan)

wird das Paket geladen und kann nun verwendet werden.

2. Konfirmatorische Faktorenanalyse


Das Paket lavaan erlaubt es auf sehr einfache und effiziente Weise Messmodelle und auch vollständige Strukturmodelle zu erstellen. Ein einfaches Messmodell für eine konfirmatorische Faktoranalyse lautet:

Modell <- 'f1  =~ item1 + item2 + item3 + item4 + item5
f2  =~ item6 + item7 + item8 + item9 + item10
f3  =~ item11 + item12 + item13 + item14 + item15 '


Die Zeichenfolge "=~" wird bei lavaan genutzt, um ein Messmodell zu spezifizieren. In diesem Fall werden drei Faktoren (f1, f2, f3) spezifiziert, die mit jeweils 5 Items gemessen werden.

Durch Aufruf des Befehls

fit <- cfa(Modell, data = Daten)

werden die Parameter berechnet, wobei das Objekt "Daten" die Rohwerte enthält.

Mit

summary(fit, fit.measures = TRUE, modindices = TRUE)

werden Parameterschätzungen, Fit-Statistiken und Mofification-Indizes ausgegeben.

Für einen guten Modellfit sprechen:

  • CFI > .90 (Der CFI vergleicht das spezifizierte Modell mit dem theoretisch schlechtesten Modell)
  • RMSEA < 0,05 (Der RMSEA zeigt an, wie gut sich die Daten mit Hilfe des spezifizierten Modell reproduzieren lassen. Je kleiner die Abweichungen, desto besser)
  • RMSR < 0,10 (ähnlich wie der RMSEA, berücksichtigt jedoch nicht die Stichprobengröße für die Bewertung der Abweichung)

Benötigt man die standardisierten Werte:

standardizedSolution(fit)






Mittwoch, 15. Juni 2011

Faktorenanalyse mit R

Um Faktorenanalysen mit R zu berechnen, wie man sie von SPSS her gewohnt ist, muss man zunächst das Zusatzpaket "Psych" installiert. Das Paket kann bei CRAN heruntergeladen werden: http://cran.r-project.org/web/packages/psych/index.html

In diesem Beispiel sollen die Items eines IQ-Tests faktoranalytisch untersucht werden. Im ersten Schritt erstellen wir ein neues Objekt (Tabelle), das nur die Items enthält.

Items<-IQDaten[c(11:69)]


Erläuterung: In dem Datendatz IQDaten befinden sich neben den Items auch noch weitere Variablen wie Geschlecht und Alter. Mit 11:69 werden die Variablen 1 bis 69 kombiniert, Funktion c, und der neuen Tabelle Items zugewiesen.

Im zweiten Schritt soll ein Screeplot erstellt werden, um zu ermitteln, wie viele Faktoren sich sinnvollerweise extrahieren lassen. Der R-Befehl des Zusatzpakets "psych" lautet fa.parallel. Doch bevor wir diesen Befehl verwenden können, muss das Zusatzpaket zunächst geladen werden:

library("psych")
fa.parallel(Items) 

Als Ergebnis wird ein Screeplot ausgegeben, der gleichzeitig eine Parallelanalyse (siehe Wikipedia) erlaubt. Der Screeplot legt nahe, dass vier Faktoren zu extrahieren sind.


Im dritten Schritt wird die eigentliche Faktorenanalyse gerechnet:

fa(ItemsAll,nfactors=4,rotate="varimax",scores=TRUE,fm="minres")


Mit nfactors wird die Anzahl der Faktoren auf vier festgelegt. Mit rotate="varimax" wird eine rotierte Lösung angefordert, wobei die Faktorladungen ausgegeben werden sollen (scores=TRUE). Zum finden der Lösung werden die Residuen minimiert (minimum residual = minres).

Um die Ergebnisse auch als Grafik anzuzeigen oder die Ladungen zu sortieren, wird zunächst ein neues Objekt mit den Ergebnissen erstellt. Mit Hilfe des Print-Befehls wird die Ausgabe formatiert und der Plot-Befehlt erzeugt eine grafische Darstellung der Faktorladungen

Ergebnis<-fa(ItemsAll,nfactors=4,rotate="varimax",scores=TRUE,fm="minres")
print(Ergebnis,sort=TRUE,digits=2,cutoff=0.01)
plot(Ergebnis)