knitr::opts_chunk$set(echo = TRUE)
library(learnr) # package to generate interactive HTML library(gradethis) # grade Code from input in HTML library(shiny) # nice appearance in R library(fontawesome) # nice fonts library(corrplot) # Korrelationsmatrix grafisch darstellen library(psych) # EFA durchführen library(GPArotation) # EFA Lösung rotieren data(Big5, package = 'PsyMSc1') knitr::opts_chunk$set(exercise.checker = gradethis::grade_learnr)
Am besten beginnen Sie mit dem Laden der nötigen R-Pakete:
library(psych) # EFA durchführen library(GPArotation) # EFA Lösung rotieren
Im Datensatz Big5.rda befinden sich 15 Items aus dem Big-5 Persönlichkeits Fragebogen. Der Itemwortlaut der verwendeten Items ist
library(htmlTable) output <- c(c("E1", "I am the life of the party.", "E2", "I don't talk a lot.", "E3", "I feel comfortable around people.", "N1", "I get stressed out easily.", "N2", "I am relaxed most of the time.", "N3", "I worry about things.", "A1", "I feel little concern for others.", "A2", "I am interested in people.", "A3", "I insult people.", "C1", "I am always prepared.", "C2", "I leave my belongings around.", "C3", "I pay attention to details.", "O1", "I have a rich vocabulary.", "O2", "I have difficulty understanding abstract ideas.", "O3", "I have a vivid imagination.")) output <- matrix(output, ncol = 2, nrow = 3*5, byrow = T) htmlTable(output, header = paste(c("Item Nr.", "Item")), caption="Itemwortlaut", align = "cl")
Die Kürzung des vollen Datensatzes lässt sich in der zugehörigen Sitzung nachvollziehen.
Nun müssen Sie zunächst die Daten laden. Das machen Sie mit Hilfe des Paketes "PsyMSc1". Mit data("Big5", package = "PsyMSc1") laden Sie die Daten ein.
# Datensatz laden data(Big5, package = 'PsyMSc1') # shortend Big 5 Questionnaire Data Set head(Big5, n = 10) # gebe die ersten 10 Zeilen aus
Um zu prüfen, ob dies geklappt hat, können Sie folgende Zeile ausführen und den Output vergleichen:
Big5[100, ]
18 1 2 US 3 3 4 4 3 4 2 5 2 4 2 5 3 1 5
Es handelt sich also um eine 18-jährige Person aus den USA.
Das Ziel dieser Übung ist es, Daten von Personen (deskriptiv) zu vergleichen die in Deutschland oder in den Vereinigten Emiraten leben und für beide Ländern eine EFA mit den Persönlichkeitsitems durchzuführen. Die Kürzel hierfür sind "AE" (Emirates) und "DE" (Deutschland). Speichern Sie zwei neue Datensätze ab: data_Emirates_full und data_Germany_full. Entfernen Sie aus diesen Datensätzen die Spalte mit den Länderkürzeln. Es sollten anschließend nur noch drei demografische Informationen über die Personen in Ihrem Datensatz enthalten sein - neben den 15 Persönlichkeitsitems.
In dieser Aufgabe wollen wir prüfen, ob die Daten richtig eingeladen wurden und ein paar deskriptive Kennwerte zwischen den Stichproben vergleichen.
Wie sehen die Dimensionen Ihrer Datensätze aus?
### Erstellen der länderspezifischen Datensätze data_France_full <- Big5[Big5$country == "FR", -4] # zum Vergleich nochmals einlesen data_Emirates_full <- Big5[Big5$country == "AE", -4] data_Germany_full <- Big5[Big5$country == "DE", -4] dim(data_Emirates_full) dim(data_Germany_full) # Mittelwertevergleich round(rbind(apply(data_France_full, 2, mean), apply(data_Emirates_full, 2, mean), apply(data_Germany_full, 2, mean)),2) # Vergleiche Mittelwerte mean(data_Emirates_full$age) mean(data_Germany_full$age) ### Demografische Daten löschen data_France <- data_France_full[,-c(1:3)] data_Emirates <- data_Emirates_full[,-c(1:3)] data_Germany <- data_Germany_full[,-c(1:3)] head(data_Emirates, 1) head(data_Germany, 1)
Der Datensatz data_Emirates_full hat 18 Spalten und N = 100 Zeilen. Der Datensatz data_Germany_full hat 18 Spalten und N = 191 Zeilen. Wir wollen ein paar Mitelwerte vergleichen: Der Altersdurchschnitt der arabischen Stichprobe liegt bei 47.51 während der der deutschen Stichprobe bei 27.80 liegt. Unterscheiden sich die Stichproben voraussichtlich im Alter (rein deskriptiv gesehen)? Was erwarten Sie? Antwort (ja/nein): ja.
Kürzen Sie nun alle demografischen Daten aus den beiden Datensätzen. Dies dient der Vorbereitung für die EFAs. Speichern Sie die neuen Datensätze, welche nur noch die Persönlichkeitsitems enthalten als data_Emirates und data_Germany ab. Prüfen Sie mit dem "head" Befehl, ob Sie die richtigen Datensätze haben. Die ersten Zeilen der beiden Datensätze sollten sein (mit Hilfe von head(..., 1)):
Emirates
1 2 4 5 1 5 5 5 4 4 4 5 1 1 3
Deutschland
1 3 2 4 3 4 1 4 2 4 5 4 4 2 2
Nachdem Sie nun die Daten eingelesen und als "data_Emirates" und "data_Germany" benannt haben, sollen Sie nun angeben, mit welchen Befehlen Sie eine Auswahl über die mögliche Anzahl an Faktoren in einer EFA treffen können. Mit welchem Code-Schnipsel können Sie die Anzahl an Faktoren für die deutsche Stichprobe untersuchen?
fa.parallel(x = data_France) fa.parallel(x = data_Germany) fa.parallel(x = data_Emirates)
Was entnehmen Sie den Prallelanalyseplots? Nach Parallelanalyse sind es 5 Faktoren der Persönlichkeit für die deutsche Stichprobe. Für die arabische Stichprobe sind es 4 Faktoren.
Führen Sie unabhängig von der Anzahl an vorgeschlagenen Faktoren eine ML-EFA mit fünf Faktoren und obliquer Rotation durch. Die Argumente, die zum gewünschten Ergebnis führen, lauten fm = "ml"
, nfactors = 5
und rotate = "oblimin"
.
Speichern Sie sich für jedes Land ein eigenes Objekt ab und nennen Sie diese five_factor_ML_Germany und five_factor_ML_Emirates.
five_factor_ML_Germany <- fa(data_Germany, nfactors = 5, rotate = "oblimin", fm = "ml") five_factor_ML_Germany five_factor_ML_Emirates <- fa(data_Emirates, nfactors = 5, rotate = "oblimin", fm = "ml") five_factor_ML_Emirates
Wenn Sie sich die Outputs dieser Objekte ansehen, wie groß sind die Eigenwerte? Der größte Eigenwert der deutschen Stichprobe ist r round(five_factor_ML_Germany$Vaccounted[1,1], 2)
und der zweitgrößte Eigenwert liegt bei r round(five_factor_ML_Germany$Vaccounted[1,2], 2)
. Für die andere Stichprobe ist der größte Eigenwert r round(five_factor_ML_Emirates$Vaccounted[1,1], 2)
und der zweitgrößte Eigenwert liegt bei r round(five_factor_ML_Emirates$Vaccounted[1,2], 2)
.
Schauen Sie sich nun die Faktorladungen an.
five_factor_ML_Germany$loadings five_factor_ML_Emirates$loadings
Geben Sie dem ersten Faktor (demjenigen Faktor mit dem größten Eigenwert nach Rotation) in der deutschen Stichprobe einen Namen (falls uneindeutig, schreiben Sie "uneindeutig"): Extraversion oder uneindeutig. Geben Sie auch dem ersten Faktor in der arabischen Stichprobe einen Namen: uneindeutig oder Neurotizismus.
Um bei einer EFA zu entscheiden, welche Faktorstruktur (also wie viele Faktoren ausreichen) am besten zu den Daten passt, müssen wir zunächst den Modell-Fit (die Modell-Anpassung zu den Daten) unseres Ausgangsmodells prüfen (hier das fünffaktorielle Modell). Bitte runden Sie im Folgenden auf drei Nachkommastellen. Wir schauen uns den Modell-Fit für beide Stichproben hintereinander an:
five_factor_ML_Germany$STATISTIC five_factor_ML_Germany$PVAL five_factor_ML_Emirates$STATISTIC five_factor_ML_Emirates$PVAL
Germany:
Der $\chi^2$-Wert liegt bei r round(five_factor_ML_Germany$STATISTIC, 3)
. Der zugehörige p-Wert liegt bei r round(five_factor_ML_Germany$PVAL, 3)
. Somit wird die $H_0$-Hypthese verworfen.
Emirates:
Der $\chi^2$-Wert liegt bei r round(five_factor_ML_Emirates$STATISTIC, 3)
. Der zugehörige p-Wert liegt bei r round(five_factor_ML_Emirates$PVAL, 3)
. Somit wird die $H_0$-Hypthese nicht verworfen.
Diese Aufgaben werden in OLAT im Feedback zum zugehörigen Test diskutiert.
Führen Sie nun Modell-Tests zum Vergleich der Modelle durch. Für welches der folgenden Modelle entscheiden Sie sich in den beiden Datensätzen: vierfaktoriell, fünffaktoriell oder sechsfaktoriell?
four_factor_ML_Germany <- fa(data_Germany, nfactors = 4, rotate = "oblimin", fm = "ml") six_factor_ML_Germany <- fa(data_Germany, nfactors = 6, rotate = "oblimin", fm = "ml") anova(four_factor_ML_Germany, five_factor_ML_Germany) # sig anova(five_factor_ML_Germany, six_factor_ML_Germany) # sig
Hier entscheide ich mich für 6 Faktoren.
Der Modell-Test in der deutschen Stichprobe zwischen der fünf- und der vierfaktoriellen Lösung ist signifikant. Somit wird das vierfaktorielle verworfen. Nach Vergleich mit dem sechsfaktoriellen wird auch das fünffaktorielle verworfen. Zwischen diesen drei Modell entscheiden wir uns für das sechsfaktorielle Modell:
six_factor_ML_Germany$loadings # Lsg
Nun zu der arabischen Stichprobe:
four_factor_ML_Emirates <- fa(data_Emirates, nfactors = 4, rotate = "oblimin", fm = "ml") six_factor_ML_Emirates <- fa(data_Emirates, nfactors = 6, rotate = "oblimin", fm = "ml") anova(four_factor_ML_Emirates, five_factor_ML_Emirates) # ns anova(five_factor_ML_Emirates, six_factor_ML_Emirates) # ns
Hier entscheide ich mich für 4 Faktoren.
Der Modell-Test in der arabischen Stichprobe zwischen der fünf- und der vierfaktoriellen Lösung ist nicht signifikant. Somit entscheiden wir uns auf Grund der Sparsamkeit für das restriktivere Modell mit vier Faktoren:
four_factor_ML_Emirates$loadings # Lsg
Folglich wurden in beiden Stichproben das durch die Theorie angenommene fünffaktorielle Modell verworfen. Allerdings ist die EFA zur "Bestätigung" einer Theorie die deutlich weniger geeignet im Vergleich zur CFA.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.