5  Exploratorische Faktorenanalyse (EFA)

5.1 Setup

pacman::p_load(tidyverse, ggplot2, ggthemes, psych, haven, EFAutilities, knitr)

Wir können wieder die im einführenden Kapitel zur Exploratorischen Datenreduktion bereits bereinigten Daten zur Lebenszufriedenheit einlesen, entweder aus dem data Ordner oder auch direkt von GitHub:

# Aus dem lokalen Datenordner
# ls_clean <- read_csv("data/ls_clean.csv")

# Aus GitHub
ls_clean <- read_csv("https://raw.githubusercontent.com/methodenlehre/data/master/statistik_IV/ls_clean.csv")

5.2 Parallelanalyse

Zuerst führen wir eine Parallelanalyse durch. Weil wir die Parallelanalyse jetzt für die Faktorenanalyse berechnen (und nicht wie im vorigen Kapitel für die Hauptkomponentenanalyse), spezifizieren wir jetzt fa = "fa". Ausserdem benutzen wir das Argument fm = "ml", damit die Parallelanalyse auf einer Maximum-Likelihood-Faktorenanalyse basiert.

parallelAnalyse <- fa.parallel(ls_clean,
  n.iter = 1000, fa = "fa",
  fm = "ml", quant = 0.5
)

Parallel analysis suggests that the number of factors =  3  and the number of components =  NA 

Die Parallelanalyse zur ML-EFA zeigt, dass auch hier drei Faktoren extrahiert werden sollten. Der Eigenwert des vierten Faktors liegt knapp unter dem Median der 1000 simulierten vierten Eigenwerte einer Zufallsmatrix.

5.3 ML-EFA mit drei unrotierten Faktoren

# Unrotierte EFA mit 3 Faktoren
efa.3.unrotiert <- fa(ls_clean, fm = "ml", nfactors = 3, rotate = "none")
print.psych(efa.3.unrotiert, sort = TRUE)
Factor Analysis using method =  ml
Call: fa(r = ls_clean, nfactors = 3, rotate = "none", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                item  ML1   ML2   ML3   h2   u2 com
leben4_schule      3 0.83 -0.42 -0.07 0.87 0.13 1.5
leben3_schule      2 0.55 -0.22 -0.11 0.36 0.64 1.4
leben1_schule      1 0.43  0.00 -0.01 0.18 0.82 1.0
leben10_familie   10 0.41  0.33  0.06 0.28 0.72 2.0
leben9_familie     9 0.48  0.73 -0.20 0.81 0.19 1.9
leben8_familie     8 0.43  0.57 -0.04 0.51 0.49 1.9
leben6_selbst      5 0.27  0.20  0.70 0.60 0.40 1.5
leben2_selbst      4 0.27  0.06  0.59 0.43 0.57 1.4
leben5_freunde     6 0.37  0.14  0.40 0.32 0.68 2.2
leben7_freunde     7 0.23  0.16  0.30 0.17 0.83 2.5

                       ML1  ML2  ML3
SS loadings           2.09 1.29 1.15
Proportion Var        0.21 0.13 0.12
Cumulative Var        0.21 0.34 0.45
Proportion Explained  0.46 0.28 0.25
Cumulative Proportion 0.46 0.75 1.00

Mean item complexity =  1.7
Test of the hypothesis that 3 factors are sufficient.

df null model =  45  with the objective function =  2.29 with Chi Square =  571.23
df of  the model are 18  and the objective function was  0.16 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.06 

The harmonic n.obs is  255 with the empirical chi square  36.34  with prob <  0.0064 
The total n.obs was  255  with Likelihood Chi Square =  39.98  with prob <  0.0021 

Tucker Lewis Index of factoring reliability =  0.895
RMSEA index =  0.069  and the 90 % confidence intervals are  0.04 0.098
BIC =  -59.76
Fit based upon off diagonal values = 0.97
Measures of factor score adequacy             
                                                   ML1  ML2  ML3
Correlation of (regression) scores with factors   0.95 0.92 0.84
Multiple R square of scores with factors          0.89 0.84 0.71
Minimum correlation of possible factor scores     0.79 0.68 0.42

Insgesamt können mit drei Faktoren 45 % der Gesamtvarianz erklärt werden. Die Eigenwerte entsprechen (anders als bei der PCA) hier übrigens nicht denen der Parallelanalyse. Das hängt damit zusammen, dass die Eigenwerte in der EFA auch von der Anzahl der extrahierten Faktoren abhängen, in der PCA dagegen nicht.

Der Anpassungstest für das Modell (“Test of the hypothesis that 3 factors are sufficient.”) zeigt ein \(\chi^2 = 39.98, p = 0.002\). Somit muss die Nullhypothese, dass drei Faktoren ausreichen, um die Korrelationen zwischen den Items vollständig zu erklären, abgelehnt werden. Auch die weiteren Fit-Indizes, die wir erst bei der CFA genauer kennenlernen werden, zeigen keinen besonders guten Fit an. Aus diesem Grund werden wir weiter unten auch noch eine 4-Faktor-Lösung betrachten.

5.4 ML-EFA mit drei rotierten Faktoren

Zunächst betrachten wir aber eine rotierte Lösung für drei Faktoren. Eine orthogonale Rotation lassen wir diesmal aus und betrachten gleich eine schiefwinklige Rotation. Anders als oben bei der PCA benutzen wir hier keine Oblimin-Rotation, sondern eine oblique Geomin-Rotation. Der Grund ist, dass die Oblimin-Rotation im Package EFAutilities, das uns weiter unten die ML-geschätzten Standardfehler und Konfidenzintervalle der Ladungen und Faktorkorrelationen liefern soll, nicht enthalten ist. Die oblique Geomin-Rotation liefert aber sehr ähnliche Ergebnisse wie eine Oblimin-Rotation.

# Rotierte EFA mit 3 Faktoren
efa.3.rotiert <- fa(ls_clean, fm = "ml", nfactors = 3, rotate = "geominQ")
print.psych(efa.3.rotiert, sort = TRUE)
Factor Analysis using method =  ml
Call: fa(r = ls_clean, nfactors = 3, rotate = "geominQ", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                item   ML2   ML3   ML1   h2   u2 com
leben9_familie     9  0.92 -0.06 -0.02 0.81 0.19 1.0
leben8_familie     8  0.69  0.08  0.00 0.51 0.49 1.0
leben10_familie   10  0.43  0.16  0.10 0.28 0.72 1.4
leben6_selbst      5  0.01  0.79 -0.09 0.60 0.40 1.0
leben2_selbst      4 -0.08  0.67  0.03 0.43 0.57 1.0
leben5_freunde     6  0.10  0.49  0.10 0.32 0.68 1.2
leben7_freunde     7  0.11  0.36  0.01 0.17 0.83 1.2
leben4_schule      3 -0.04  0.01  0.94 0.87 0.13 1.0
leben3_schule      2  0.05 -0.05  0.60 0.36 0.64 1.0
leben1_schule      1  0.16  0.06  0.34 0.18 0.82 1.5

                       ML2  ML3  ML1
SS loadings           1.61 1.52 1.40
Proportion Var        0.16 0.15 0.14
Cumulative Var        0.16 0.31 0.45
Proportion Explained  0.36 0.33 0.31
Cumulative Proportion 0.36 0.69 1.00

 With factor correlations of 
     ML2  ML3  ML1
ML2 1.00 0.28 0.19
ML3 0.28 1.00 0.23
ML1 0.19 0.23 1.00

Mean item complexity =  1.1
Test of the hypothesis that 3 factors are sufficient.

df null model =  45  with the objective function =  2.29 with Chi Square =  571.23
df of  the model are 18  and the objective function was  0.16 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.06 

The harmonic n.obs is  255 with the empirical chi square  36.34  with prob <  0.0064 
The total n.obs was  255  with Likelihood Chi Square =  39.98  with prob <  0.0021 

Tucker Lewis Index of factoring reliability =  0.895
RMSEA index =  0.069  and the 90 % confidence intervals are  0.04 0.098
BIC =  -59.76
Fit based upon off diagonal values = 0.97
Measures of factor score adequacy             
                                                   ML2  ML3  ML1
Correlation of (regression) scores with factors   0.92 0.87 0.94
Multiple R square of scores with factors          0.86 0.75 0.88
Minimum correlation of possible factor scores     0.71 0.50 0.77

Wie bei der PCA ergeben sich hier ein Familien-Faktor (ML2), eine Selbst- und Freunde-Faktor (ML3) und ein Schul-Faktor (ML1). Die Faktorkorrelationen sind ähnlich wie bei der PCA relativ gleichmässig: \((r_{ML_1ML_2} = 0.19, r_{ML_1ML_3} = 0.23, r_{ML_2ML_3} = 0.28)\).

5.4.1 Konfidenzintervalle und Standardfehler

Mit der Funktion fa() aus psych ist es nicht möglich, Standardfehler und Konfidenzintervalle für die Ladungen einer Maximum-Likelihood-EFA zu berechnen. Mit der Funktion efa() aus dem Package EFAutilities ist dies dagegen möglich. Wie oben werden mit der ML-Methode (fm = "ml") 3 Faktoren (factors = 3) extrahiert und dann eine oblique Geomin-Rotation durchgeführt (rtype = "oblique", rotation = "geomin"). Ausserdem werden mit LConfid = c(.95, .90) zwei Konfidenzkoeffizienten spezifiziert: der erste (0.95) bezieht sich auf die Konfidenzintervalle der Faktorladungen und -korrelationen, der zweite (0.90) ausschliesslich auf den Fit-Index RMSEA, den wir erst beim Thema CFA genauer betrachten. Alle uns hier interessierenden Konfidenzintervalle sind also 95 %-Konfidenzintervalle.

Da der Output von EFAutilities::efa() unübersichtlich ist und wir uns hier nur für das Feature “Standardfehler und CIs” der Ladungen interessieren, haben wir den Output so formatiert, dass eine Tabelle mit den Ladungen zusammen mit ihren Standardfehlern (SEs) sowie eine weitere mit den Ladungen zusammen mit ihren Konfidenzintervallen (CIs) ausgegeben wird:

efa.ci.rotated <- EFAutilities::efa(ls_clean,
  fm = "ml", factors = 3,
  rtype = "oblique",
  rotation = "geomin",
  LConfid = c(.95, .90)
)
Ladungen mit Standardfehlern
F1 F2 F3
leben1_schule 0.34 [se=0.07] 0.16 [se=0.08] 0.06 [se=0.07]
leben3_schule 0.6 [se=0.09] 0.05 [se=0.06] -0.05 [se=0.06]
leben4_schule 0.94 [se=0.11] -0.04 [se=0.02] 0.01 [se=0.02]
leben2_selbst 0.03 [se=0.04] -0.08 [se=0.06] 0.67 [se=0.06]
leben6_selbst -0.09 [se=0.05] 0.01 [se=0.02] 0.79 [se=0.06]
leben5_freunde 0.1 [se=0.06] 0.1 [se=0.07] 0.49 [se=0.08]
leben7_freunde 0.01 [se=0.06] 0.11 [se=0.08] 0.36 [se=0.09]
leben8_familie 0 [se=0.04] 0.69 [se=0.07] 0.08 [se=0.06]
leben9_familie -0.02 [se=0.03] 0.92 [se=0.07] -0.06 [se=0.03]
leben10_familie 0.1 [se=0.06] 0.43 [se=0.06] 0.16 [se=0.07]
Ladungen mit Konfidenzintervallen
F1 F2 F3
leben1_schule 0.34 [0.197; 0.484] 0.16 [0.009; 0.319] 0.06 [-0.087; 0.199]
leben3_schule 0.6 [0.418; 0.777] 0.05 [-0.056; 0.162] -0.05 [-0.167; 0.063]
leben4_schule 0.94 [0.725; 1.148] -0.04 [-0.081; 0.007] 0.01 [-0.035; 0.059]
leben2_selbst 0.03 [-0.039; 0.099] -0.08 [-0.195; 0.027] 0.67 [0.552; 0.785]
leben6_selbst -0.09 [-0.195; 0.013] 0.01 [-0.032; 0.043] 0.79 [0.666; 0.914]
leben5_freunde 0.1 [-0.018; 0.226] 0.1 [-0.039; 0.237] 0.49 [0.331; 0.652]
leben7_freunde 0.01 [-0.12; 0.133] 0.11 [-0.043; 0.263] 0.36 [0.192; 0.532]
leben8_familie 0 [-0.078; 0.069] 0.69 [0.548; 0.833] 0.08 [-0.044; 0.197]
leben9_familie -0.02 [-0.07; 0.032] 0.92 [0.788; 1.052] -0.06 [-0.114; -0.01]
leben10_familie 0.1 [-0.019; 0.224] 0.43 [0.307; 0.545] 0.16 [0.013; 0.303]

In beiden Tabelle ist jetzt F1 der Schul-Faktor, F2 der Familien-Faktor, und F3 der Selbst- und Freunde-Faktor. Die Konfidenzintervalle aller Ladungen von Items auf einem zugehörigen Faktor sollten den Wert 0 nicht beinhalten und damit signifikant sein, während die Konfidenzintervalle aller Ladungen von Items auf einem nicht zugehörigen Faktor den Wert 0 möglichst beinhalten sollten und damit nicht signifikant sein. Das ist auch weitgehend der Fall: Ausnahmen sind nur die Querladungen von leben1_schule auf F2 (Familie), leben10_familie auf F3 (Selbst und Freunde) sowie die sehr kleine (und negative) Querladung von leben9_familie auf F3 (Selbst und Freunde). Die CIs dieser Ladungen beinhalten den Wert 0 nicht, sind daher also als signifikant zu werten.

Die folgende Tabelle stellt die Faktorkorrelationen mit den zugehörigen Konfidenzintervallen dar. Alle Faktorkorrelationen sind signifikant, da das CI den Wert 0 jeweils nicht enthält.

Anmerkung: Wegen der Darstellung in Matrixform sind 1) alle Korrelationen der Faktoren F1, F2, und F3 untereinander doppelt enthalten; sowie 2) die Korrelationen der Faktoren mit sich selbst enthalten (alle gleich 1, mit CIs [1; 1]).

Faktor-Korrelationen mit Konfidenzintervallen
F1 F2 F3
F1 1 [1; 1] 0.19 [0.052; 0.329] 0.23 [0.083; 0.375]
F2 0.19 [0.052; 0.329] 1 [1; 1] 0.28 [0.13; 0.412]
F3 0.23 [0.083; 0.375] 0.28 [0.13; 0.412] 1 [1; 1]

Die direkte Ausgabe der Standardfehler sowie der Unter- und Obergrenzen der Konfidenzintervalle der Faktorladungen und -korrelationen erhält man folgendermassen:

efa.ci.rotated$rotatedse # Standardfehler der rotierten Ladungen
             F1         F2         F3
MV1  0.07322925 0.07896132 0.07279394
MV2  0.09158254 0.05556995 0.05878668
MV3  0.10781420 0.02245943 0.02412229
MV4  0.03522439 0.05666002 0.05938832
MV5  0.05311097 0.01920832 0.06309359
MV6  0.06231396 0.07030498 0.08196264
MV7  0.06442031 0.07815176 0.08697391
MV8  0.03744332 0.07262968 0.06157890
MV9  0.02606280 0.06726622 0.02650468
MV10 0.06193894 0.06048535 0.07405768
efa.ci.rotated$rotatedlow # Untere Grenzen CIs der rotierten Ladungen
              F1           F2          F3
MV1   0.19675217  0.009496331 -0.08670199
MV2   0.41832029 -0.056311732 -0.16718688
MV3   0.72500130 -0.081479750 -0.03539173
MV4  -0.03940005 -0.194650796  0.55190779
MV5  -0.19524252 -0.031850036  0.66623579
MV6  -0.01838313 -0.038736759  0.33080644
MV7  -0.11986428 -0.043244800  0.19156349
MV8  -0.07784860  0.548350898 -0.04430343
MV9  -0.06986948  0.788388881 -0.11380196
MV10 -0.01853209  0.307440634  0.01287587
efa.ci.rotated$rotatedupper # Obere Grenzen CIs der rotierten Ladungen
             F1          F2           F3
MV1  0.48380557 0.319019031  0.198645004
MV2  0.77731724 0.161518474  0.063252651
MV3  1.14762521 0.006559603  0.059165916
MV4  0.09867702 0.027452411  0.784705714
MV5  0.01294867 0.043445197  0.913558108
MV6  0.22588310 0.236853697  0.652094087
MV7  0.13265870 0.263104455  0.532494952
MV8  0.06892652 0.833054008  0.197081434
MV9  0.03229484 1.052067604 -0.009905539
MV10 0.22426411 0.544538866  0.303176660
efa.ci.rotated$Philow # Untere Grenzen CIs der Faktorkorrelationen
           F1         F2         F3
F1 1.00000000 0.05173599 0.08306654
F2 0.05173599 1.00000000 0.13040290
F3 0.08306654 0.13040290 1.00000000
efa.ci.rotated$Phiupper # Obere Grenzen CIs der Faktorkorrelationen
          F1        F2        F3
F1 1.0000000 0.3293454 0.3748065
F2 0.3293454 1.0000000 0.4117479
F3 0.3748065 0.4117479 1.0000000

Visualisierung:

Welche Items laden auf welche Faktoren? Hier sieht man auch die Korrelationen zwischen den Faktoren:

fa.diagram(efa.3.rotiert, cut = 0)

5.5 ML-EFA mit vier unrotierten Faktoren

Unrotierte exploratorische Faktorenanalyse mit 4 Faktoren:

efa.4.unrotiert <- fa(ls_clean, fm = "ml", nfactors = 4, rotate = "none")
print.psych(efa.4.unrotiert, sort = TRUE)
Factor Analysis using method =  ml
Call: fa(r = ls_clean, nfactors = 4, rotate = "none", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                item  ML1   ML3   ML4   ML2   h2    u2 com
leben5_freunde     6 0.83 -0.01  0.00  0.56 1.00 0.005 1.8
leben6_selbst      5 0.83  0.00  0.00 -0.56 1.00 0.005 1.8
leben2_selbst      4 0.52  0.01  0.11 -0.16 0.31 0.687 1.3
leben7_freunde     7 0.42  0.07 -0.04  0.13 0.20 0.799 1.3
leben9_familie     9 0.21  0.77 -0.42  0.06 0.81 0.188 1.7
leben8_familie     8 0.25  0.60 -0.29 -0.01 0.51 0.492 1.8
leben10_familie   10 0.28  0.44 -0.09 -0.03 0.28 0.723 1.8
leben1_schule      1 0.19  0.33  0.21  0.03 0.19 0.808 2.4
leben4_schule      3 0.19  0.47  0.73  0.12 0.80 0.198 2.0
leben3_schule      2 0.06  0.40  0.48  0.06 0.39 0.605 2.0

                       ML1  ML3  ML4  ML2
SS loadings           2.08 1.64 1.08 0.69
Proportion Var        0.21 0.16 0.11 0.07
Cumulative Var        0.21 0.37 0.48 0.55
Proportion Explained  0.38 0.30 0.20 0.13
Cumulative Proportion 0.38 0.68 0.87 1.00

Mean item complexity =  1.8
Test of the hypothesis that 4 factors are sufficient.

df null model =  45  with the objective function =  2.29 with Chi Square =  571.23
df of  the model are 11  and the objective function was  0.06 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.05 

The harmonic n.obs is  255 with the empirical chi square  12.53  with prob <  0.33 
The total n.obs was  255  with Likelihood Chi Square =  14.32  with prob <  0.22 

Tucker Lewis Index of factoring reliability =  0.974
RMSEA index =  0.034  and the 90 % confidence intervals are  0 0.079
BIC =  -46.63
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   ML1  ML3  ML4  ML2
Correlation of (regression) scores with factors   1.00 0.92 0.90 1.00
Multiple R square of scores with factors          1.00 0.85 0.81 0.99
Minimum correlation of possible factor scores     0.99 0.70 0.62 0.98

Insgesamt können mit vier Faktoren 55 % der Gesamtvarianz erklärt werden. Der Anpassungstest für das Modell (“Test of the hypothesis that 4 factors are sufficient.”) zeigt ein \(\chi^2 = 14.32, p = 0.22\). Somit kann die Nullhypothese, dass vier Faktoren ausreichen, beibehalten werden. Auch die weiteren Fit-Indizes sind deutlich besser als bei der 3-Faktor-Lösung.

Allerdings zeigt sich hier ein sogenannter “Heywood case”. Als solcher wird eine negative geschätzte Varianz oder eine geschätzte Korrelation > 1 bezeichnet, die bei instabilen Faktorstrukturen auftreten können. Instabile Faktorstrukturen können sich in der EFA insbesondere dann ergeben, wenn einer oder mehrere Faktoren nur durch zwei Items repräsentiert sind. Das ist hier der Fall (s.u.).

5.5.1 ML-EFA mit vier rotierten Faktoren

Geomin-rotierte exploratorische Faktorenanalyse mit 4 Faktoren:

efa.4.rotiert <- fa(ls_clean, fm = "ml", nfactors = 4, rotate = "geominQ")
print.psych(efa.4.rotiert, sort = TRUE)
Factor Analysis using method =  ml
Call: fa(r = ls_clean, nfactors = 4, rotate = "geominQ", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
                item   ML3   ML4   ML1   ML2   h2    u2 com
leben9_familie     9  0.92 -0.02 -0.07  0.00 0.81 0.188 1.0
leben8_familie     8  0.70  0.01  0.05  0.00 0.51 0.492 1.0
leben10_familie   10  0.43  0.12  0.13  0.02 0.28 0.723 1.4
leben4_schule      3 -0.04  0.90  0.00  0.03 0.80 0.198 1.0
leben3_schule      2  0.05  0.63 -0.04 -0.06 0.39 0.605 1.0
leben1_schule      1  0.16  0.35  0.06  0.03 0.19 0.808 1.5
leben6_selbst      5  0.02 -0.03  1.00 -0.02 1.00 0.005 1.0
leben2_selbst      4 -0.04  0.09  0.47  0.15 0.31 0.687 1.3
leben5_freunde     6  0.00  0.00 -0.01  1.00 1.00 0.005 1.0
leben7_freunde     7  0.09 -0.01  0.12  0.35 0.20 0.799 1.4

                       ML3  ML4  ML1  ML2
SS loadings           1.59 1.37 1.32 1.20
Proportion Var        0.16 0.14 0.13 0.12
Cumulative Var        0.16 0.30 0.43 0.55
Proportion Explained  0.29 0.25 0.24 0.22
Cumulative Proportion 0.29 0.54 0.78 1.00

 With factor correlations of 
     ML3  ML4  ML1  ML2
ML3 1.00 0.20 0.21 0.25
ML4 0.20 1.00 0.13 0.23
ML1 0.21 0.13 1.00 0.40
ML2 0.25 0.23 0.40 1.00

Mean item complexity =  1.2
Test of the hypothesis that 4 factors are sufficient.

df null model =  45  with the objective function =  2.29 with Chi Square =  571.23
df of  the model are 11  and the objective function was  0.06 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.05 

The harmonic n.obs is  255 with the empirical chi square  12.53  with prob <  0.33 
The total n.obs was  255  with Likelihood Chi Square =  14.32  with prob <  0.22 

Tucker Lewis Index of factoring reliability =  0.974
RMSEA index =  0.034  and the 90 % confidence intervals are  0 0.079
BIC =  -46.63
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                   ML3  ML4  ML1  ML2
Correlation of (regression) scores with factors   0.92 0.91 1.00 1.00
Multiple R square of scores with factors          0.85 0.83 0.99 1.00
Minimum correlation of possible factor scores     0.71 0.67 0.99 0.99

Die Lösung zeigt eine klare Einfachstruktur. Keine Ladung auf einem nicht-zugehörigen Faktor ist > 0.16. Die Einfachstruktur deckt sich auch mit der inhaltlichen Ausrichtung der Lebenszufriedenheitsbereiche: jetzt haben alle Bereiche (Familie, Schule, Selbst, Freunde) ihren eigenen Faktor.

Die Faktorkorrelationen der vier Faktoren sind jetzt nicht mehr so gleichmässig wie noch bei der 3-Komponenten-Lösung: die grösste Korrelation zeigt sich zwischen dem Selbst- und dem Freunde-Faktor: \(r_{ML_1ML_2} = 0.40\) und die geringste zwischen dem Selbst- und dem Schul-Faktor: \(r_{ML_1ML_4} = 0.13\).

Auf die zusätzliche Berechnung von Standardfehlern und Konfidenzintervallen mit EFAutilities::efa() verzichten wir hier.

Visualisierung:

Faktorladung je Item graphisch dargestellt:

factor.plot(efa.4.rotiert)

\(~\)

Welche Items laden auf welche Faktoren?

fa.diagram(efa.4.rotiert, cut = 0)

5.6 Zusammenfassung ML-EFA

In der ML-EFA zeigten sich laut Parallelanalyse auch drei Faktoren. Allerdings ist der Chi-Quadrat-Test zur Frage, ob drei Faktoren ausreichen, signifikant. Dies spricht für eine 4-Faktor-Lösung, bei der sich der Selbst-Freunde-Faktor in zwei Faktoren aufspaltet, die die Inhaltsbereiche Selbst und Freunde repräsentieren. Obwohl sich Selbst- und Freunde-Items also viel Varianz teilen und die Parallelanalyse deren Gruppierung auf einem Faktor bevorzugt, müssen diese Inhaltsbereiche im Sinne einer vollständigen Repräsentation der Zusammenhänge separat betrachtet werden.

5.7 Übung

Datenframe mit 25 Persönlichkeits-Items und die drei Variablen gender (Geschlecht), education (Ausbildung) und age (Alter). Die Daten sind im Package psych gespeichert und können mit folgendem Chunk geladen werden:

data("bfi", package = "psych")
head(bfi)
      A1 A2 A3 A4 A5 C1 C2 C3 C4 C5 E1 E2 E3 E4 E5 N1 N2 N3 N4 N5 O1 O2 O3 O4
61617  2  4  3  4  4  2  3  3  4  4  3  3  3  4  4  3  4  2  2  3  3  6  3  4
61618  2  4  5  2  5  5  4  4  3  4  1  1  6  4  3  3  3  3  5  5  4  2  4  3
61620  5  4  5  4  4  4  5  4  2  5  2  4  4  4  5  4  5  4  2  3  4  2  5  5
61621  4  4  6  5  5  4  4  3  5  5  5  3  4  4  4  2  5  2  4  1  3  3  4  3
61622  2  3  3  4  5  4  4  5  3  2  2  2  5  4  5  2  3  4  4  3  3  3  4  3
61623  6  6  5  6  5  6  6  6  1  3  2  1  6  5  6  3  5  2  2  3  4  3  5  6
      O5 gender education age
61617  3      1        NA  16
61618  3      2        NA  18
61620  2      2        NA  17
61621  5      2        NA  17
61622  3      1        NA  17
61623  1      2         3  21

Nehmen wir an, wir hätten vergessen, wie viele und welche Persönlichkeitsdimensionen mit dem Persönlichkeitstest abgefragt wurden. Oder noch besser: Wir stellen uns vor, wir wären die Entwicklerinnen und Entwickler eines neuen Persönlichkeitsmodells und hätten uns diese 25 Items einfallen lassen, deren Dimensionaliät wir nun gerne mit einer exploratorische Faktorenanalyse untersuchen möchten.

Wir haben natürlich eine gewisse inhaltliche Vorstellung (und haben den Items deshalb verschiedene Präfixe - A, C, E, N, O für die Variablennamen verordnet) und nehmen an, dass die Items durch weniger zugrunde liegende Dimensionen repräsentiert werden können. Mit anderen Worten: dass die Interkorrelationen der Items auf ihre Zugehörigkeit zu weniger Dimensionen (als Items) zurückgeführt werden können (evtl. 5?).

Aufgabe 1

  1. Wir haben genügend theoretischen Hintergrund anzunehmen, dass eine EFA mit diesen Daten angebracht ist. Testen Sie trotzdem erst auf Sphärizität und berechnen Sie das Kaiser-Meyer-Olkin Measure of Sampling Adequacy (KMO-MSA). Interpretieren Sie die Resultate. Tipp: Verwenden Sie nur die 25 Columns der Persönlichkeits-Items.

Bartlett Test und KMO-MSA

# Zuerst speichern wir ein neues Datenframe mit den 25 Items
bfi25 <- bfi %>%
  select(-gender, -education, -age)
cortest.bartlett(bfi25)
R was not square, finding R from data
$chisq
[1] 20163.79

$p.value
[1] 0

$df
[1] 300
KMO(bfi25)
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = bfi25)
Overall MSA =  0.85
MSA for each item = 
  A1   A2   A3   A4   A5   C1   C2   C3   C4   C5   E1   E2   E3   E4   E5   N1 
0.74 0.84 0.87 0.87 0.90 0.83 0.79 0.85 0.82 0.86 0.83 0.88 0.89 0.87 0.89 0.78 
  N2   N3   N4   N5   O1   O2   O3   O4   O5 
0.78 0.86 0.88 0.86 0.85 0.78 0.84 0.76 0.76 

Bartlett’s Test auf Sphärizität deutet stark darauf hin, dass die Items eine Korrelationsstruktur haben. Das Bedeutet, dass sie miteinander zusammenhängen. Mit einem Overall KMO-MSA von 0.85 haben wir eine gute KMO-MSA. Beide Werte deuten darauf hin, dass eine EFA gerechtfertigt ist.

  1. Führen Sie eine Parallelanalyse durch, um zu ermitteln, wie viele Faktoren für die exploratorische Faktorenanalyse benötigt werden, um die Interkorrelationen der Items zu erklären.
fa.parallel(bfi25, fa = "fa", fm = "ml", n.iter = 1000, quant = 0.5)

Parallel analysis suggests that the number of factors =  6  and the number of components =  NA 

Die Ergebnisse der Parallelanalyse zeigen, dass wir 6 latente Faktoren berücksichtigen sollten, die den Interkorrelationen der Items zu Grunde liegen.

Aufgabe 2

Rechnen Sie eine EFA der entsprechenden Anzahl Faktoren (aus Aufgabe b). Berechnen Sie diese gleich mit einer orthogonalen Rotation (eine unrotierte Lösung wird nicht zwingend benötigt). Welche Items werden welchem Faktor zugeordnet?

Visualisieren Sie dazu die EFA mit der Funktion fa.diagram().

Wofür stehen die roten Pfeile im Diagramm?

# Wir wählen als orthogonale Rotation die varimax Rotation
bfi.fa6 <- fa(bfi25, fm = "ml", nfactors = 6, rotate = "varimax")
fa.diagram(bfi.fa6, sort = T)

Die roten Pfeile im Diagramm stehen für inhaltlich umgekehrt formulierte Items. Diese Laden negativ auf dem entsprechenden Faktor. Wir gehen jedenfalls schwer davon aus, dass dem so ist. Streng genommen müssten wir das jetzt noch am Itemwortlaut überprüfen!

Eigenartig: Obwohl die Parallelanalyse 6 Faktoren bevorzugt, weist das Diagramm dem 6. Faktor keine Items zu. Die Voreinstellung von fa.diagram() ist, dass nur die grösste Ladung eines Items (also auf nur einem Faktor) dargestellt wird (simple = TRUE). Wir können dieses Argumente auch aus FALSE setzen, um wenigstens ein bisschen zu sehen, wie die Ladungen auf Faktor 6 aussehen.

fa.diagram(bfi.fa6, sort = TRUE, simple = FALSE)

Das Ergebnis zeigt nun eine Ladung von Faktor 6 an, und zwar auf Item C4. Die anderen Ladungen wurden durch die Voreinstellung cut = 0.3 unterdrückt. Diese Voreinstellung führt dazu, dass grundsätzlich nur Ladungen mit einem Betrag > 0.3 dargestellt werden. Wir könnten nun mit cut = 0 alle Ladungen (aller Items auf allen Faktoren) anzeigen lassen, dann wäre aber kaum mehr etwas zu erkennen (probieren Sie es aus). Stattdessen setzen wir - damit es nicht total unübersichtlich wird - neben simple = FALSE noch cut = 0.2.

fa.diagram(bfi.fa6, sort = TRUE, simple = FALSE, cut = 0.2)

Der Plot soll uns die rotierte Faktorstruktur möglichst im Sinne einer Einfachstruktur darstellen, daher ist simple = TRUE sehr sinnvoll. Es ist aber auch gut zu wissen, dass es nur wenige Querladungen der Faktoren 1-5 auf den anderen Faktoren gibt. Das konnten wir nur mit simple = FALSE veranschaulichen. Der 6. Faktor scheint irgendwie überflüssig zu sein: es gibt nur ein Item, dessen Ladungsbetrag > 0.3 ist (und dieses lädt gerade mal 0.31, wie Sie sehen können, wenn Sie sich die vollständigen Ergebnisse der Analyse ausgeben lassen).

Jetzt fällt uns auch (plötzlich) wieder ein, dass es sich um einen Fragebogen für die Big-5 Persönlichkeitseigenschaften handelt! 😉 Dieser 6. Eigenwert mag zwar in den Daten relativ gross sein, er entspricht aber keinem interpretierbaren Faktor. Bei der EFA (wie bei der PCA) ist die Interpretierbarkeit der (rotierten) Ladungsstruktur ein wichtiges Kriterium für die Anzahl der zu extrahierenden Faktoren, und es kommt nicht selten vor, dass diesem Kriterium Vorrang vor dem Ergebnis der Parallelanalyse gegeben wird. Auch nach dem visuellen Scree-Plot-Kriterium könnte man hier übrigens ggf. für 5 statt für 6 Faktoren plädieren (wegen des relativ grossen Sprungs vom 5. zum 6. Eigenwert).

Aufgabe 3

Für die Aufgabe 3 gehen wir davon aus, dass die Daten auf 5 Faktoren reduzierbar sind.

  1. Ist mit 5 orthogonalen Faktoren eine Einfachstruktur vorhanden?

Wir führen also eine weitere EFA mit nur 5 Faktoren durch. Diesmal lassen wir uns mit print.psych() alle Ergebnissee ausgeben:

bfi.fa5 <- fa(bfi25, fm = "ml", nfactors = 5, rotate = "varimax")
print.psych(bfi.fa5, digits = 3)
Factor Analysis using method =  ml
Call: fa(r = bfi25, nfactors = 5, rotate = "varimax", fm = "ml")
Standardized loadings (pattern matrix) based upon correlation matrix
      ML2    ML1    ML3    ML5    ML4    h2    u2  com
A1  0.113  0.037  0.002 -0.364 -0.058 0.150 0.850 1.27
A2  0.038  0.179  0.151  0.584  0.065 0.401 0.599 1.37
A3  0.019  0.274  0.107  0.648  0.067 0.511 0.489 1.44
A4 -0.052  0.154  0.233  0.441 -0.102 0.286 0.714 1.97
A5 -0.113  0.340  0.078  0.585  0.080 0.483 0.517 1.79
C1 -0.002  0.041  0.523  0.053  0.207 0.321 0.679 1.34
C2  0.076 -0.001  0.621  0.137  0.130 0.427 0.573 1.22
C3 -0.020  0.006  0.547  0.132  0.004 0.317 0.683 1.12
C4  0.230 -0.086 -0.629 -0.021 -0.094 0.465 0.535 1.36
C5  0.276 -0.187 -0.565 -0.061  0.033 0.435 0.565 1.74
E1  0.033 -0.587  0.038 -0.123 -0.079 0.369 0.631 1.14
E2  0.231 -0.679 -0.094 -0.149 -0.054 0.548 0.452 1.39
E3  0.014  0.482  0.063  0.336  0.301 0.441 0.559 2.58
E4 -0.104  0.601  0.084  0.370 -0.045 0.519 0.481 1.80
E5  0.048  0.486  0.314  0.125  0.228 0.405 0.595 2.40
N1  0.800  0.094 -0.037 -0.218 -0.084 0.705 0.295 1.21
N2  0.782  0.052 -0.024 -0.203 -0.025 0.657 0.343 1.15
N3  0.716 -0.078 -0.081 -0.018  0.004 0.525 0.475 1.05
N4  0.558 -0.356 -0.187 -0.012  0.063 0.478 0.522 1.99
N5  0.522 -0.183 -0.048  0.107 -0.135 0.338 0.662 1.51
O1 -0.003  0.180  0.105  0.096  0.521 0.324 0.676 1.40
O2  0.174 -0.011 -0.113  0.112 -0.434 0.244 0.756 1.62
O3  0.016  0.259  0.070  0.165  0.611 0.473 0.527 1.54
O4  0.216 -0.220 -0.024  0.145  0.375 0.257 0.743 2.67
O5  0.085 -0.010 -0.074  0.013 -0.511 0.274 0.726 1.10

                        ML2   ML1   ML3   ML5   ML4
SS loadings           2.668 2.254 1.967 1.947 1.518
Proportion Var        0.107 0.090 0.079 0.078 0.061
Cumulative Var        0.107 0.197 0.276 0.353 0.414
Proportion Explained  0.258 0.218 0.190 0.188 0.147
Cumulative Proportion 0.258 0.475 0.665 0.853 1.000

Mean item complexity =  1.6
Test of the hypothesis that 5 factors are sufficient.

df null model =  300  with the objective function =  7.228 with Chi Square =  20163.79
df of  the model are 185  and the objective function was  0.628 

The root mean square of the residuals (RMSR) is  0.03 
The df corrected root mean square of the residuals is  0.038 

The harmonic n.obs is  2762 with the empirical chi square  1474.696  with prob <  1.29e-199 
The total n.obs was  2800  with Likelihood Chi Square =  1749.883  with prob <  1.39e-252 

Tucker Lewis Index of factoring reliability =  0.8721
RMSEA index =  0.055  and the 90 % confidence intervals are  0.0526 0.0573
BIC =  281.469
Fit based upon off diagonal values = 0.979
Measures of factor score adequacy             
                                                    ML2   ML1   ML3   ML5   ML4
Correlation of (regression) scores with factors   0.927 0.867 0.857 0.845 0.824
Multiple R square of scores with factors          0.859 0.752 0.734 0.714 0.679
Minimum correlation of possible factor scores     0.718 0.504 0.468 0.428 0.358

Und das Diagramm mit Einfachstruktur:

fa.diagram(bfi.fa5, sort = TRUE)

Wie bereits oben korrespondieren die unterschiedlichen Variablen-Präfixe mit jeweils einem Faktor, was auch auf eine klare inhaltliche Strukturierung hinweist (N = Neuroticism, E = Extraversion, C = Conscientiousness, A = Agreeableness, O = Openness). Jetzt schauen wir nochmal mit simple = FALSE, wie häufig substantielle Querladungen (hier via default als > 0.3 definiert) auftreten:

fa.diagram(bfi.fa5, simple = FALSE, sort = TRUE)

Es gibt nur sehr vereinzelte Querladungen und diese liegen alle zwischen 0.3 und 0.4. Letzteres kann man sehen, indem man noch ein Diagramm mit simple = FALSE und cut = 0.4 anfordert - da gibt es dann nämlich keine Querladungen mehr. Alternativ kann man das natürlich auch in der Ladungsmatrix oben sehen.

Korrelationen zwischen den Faktoren werden in den Diagrammen übrigens nicht angezeigt, weil sie wegen der orthogonalen Rotation nicht zugelassen wurden, also per Definition = 0 sind. Eine oblique Rotation würde die Einfachstruktur noch weiter fördern, dann würden sich Korrelationen zwischen den Faktoren ergeben und auch im Diagramm erscheinen. Probieren Sie es aus!

Berechnen Sie ausserdem von Hand folgende Werte:

  1. die Kommunalität des Items C4

Kommunalität von Item C4

## Entweder direkt aus dem Objekt gezogen:
# Zeile 9 aus der Ladungsmatrix ist die Zeile von Item C4
c4 <- bfi.fa5$loadings[9, ] # Ladungen von C4 extrahieren
c4_squared <- c4^2 # Ladungen quadrieren
c4_communality <- sum(c4_squared) # Summe ergibt Kommunalität
round(c4_communality, 3) # vgl. mit h2 aus Output!
[1] 0.465
## Oder von Hand aus dem Output oben:
round(c4, 3) # Ladungen anzeigen
   ML2    ML1    ML3    ML5    ML4 
 0.230 -0.086 -0.629 -0.021 -0.094 
0.230^2 + (-0.086)^2 + (-0.629)^2 + (-0.021)^2 + (-0.094)^2
[1] 0.465214

Die Kommunalität des Items C4 ist 0.465.

  1. die Uniqueness des Items O3

Uniqueness von Item O3

# Uniqueness ist definiert als: 1 - Kommunalität.
## Direkt aus dem Objekt gezogen (zuerst berechnen wir die Kommunalität):
o3 <- bfi.fa5$loadings[23, ]
o3_squared <- o3^2
o3_communality <- sum(o3_squared)

# Jetzt die Uniqueness:
o3_unique <- 1 - o3_communality
round(o3_unique, 3) # vgl. mit u2 aus Output!
[1] 0.527
## Oder von Hand:
round(o3, 3) # Ladungen anzeigen
  ML2   ML1   ML3   ML5   ML4 
0.016 0.259 0.070 0.165 0.611 
1 - (0.016^2 + 0.259^2 + 0.070^2 + 0.165^2 + 0.611^2)
[1] 0.527217

Die Uniqueness des Items O3 ist 0.527.

  1. den (rotierten) Eigenwert von Faktor 3 (ML3)

Eigenwert von Faktor 3 (ML3)

# Eigenwert ist definiert als: Sum of Squared Loadings (eines Faktors)
## Ladungen für MR3 aus dem Objekt gezogen:
ML3 <- bfi.fa5$loadings[, 3]
ML3_squared <- ML3^2
ML3_eigenvalue <- sum(ML3_squared)
round(ML3_eigenvalue, 3) # vgl. mit SS loadings aus Output!
[1] 1.967
## Oder von Hand:
round(ML3, 3) # Ladungen anzeigen
    A1     A2     A3     A4     A5     C1     C2     C3     C4     C5     E1 
 0.002  0.151  0.107  0.233  0.078  0.523  0.621  0.547 -0.629 -0.565  0.038 
    E2     E3     E4     E5     N1     N2     N3     N4     N5     O1     O2 
-0.094  0.063  0.084  0.314 -0.037 -0.024 -0.081 -0.187 -0.048  0.105 -0.113 
    O3     O4     O5 
 0.070 -0.024 -0.074 
0.002^2 + 0.151^2 + 0.107^2 + 0.233^2 + 0.078^2 + 0.523^2 + 0.621^2 +
  0.547^2 + (-0.629)^2 + (-0.565)^2 + 0.038^2 + (-0.094)^2 + 0.063^2 +
  0.084^2 + 0.314^2 + (-0.037)^2 + (-0.024)^2 + (-0.081)^2 + (-0.187)^2 +
  (-0.048)^2 + 0.105^2 + (-0.113)^2 + 0.070^2 + (-0.024)^2 + (-0.074)^2
[1] 1.968298
# Kleiner Rundungsfehler hier!

Der Eigenwert (nach Varimax-Rotation) von Faktor ML3 ist 1.967.

Wichtig

Beachten Sie, dass diese Berechnungen nur dann voll interpretierbar sind, wenn die Faktoren unkorrelliert sind. Dies ist per Definition bei unrotierten und orthogonal rotierten Faktoren der Fall (also auch bei der hier verwendeten Varimax-Rotation).

Während Kommunalität und Uniqueness eines Items sich nicht zwischen unrotierter und orthogonal rotierter Lösung unterscheiden, unterscheiden sich die Eigenwerte der Faktoren in dieser Hinsicht: in der rotierten Lösung sind sich die Eigenwerte viel ähnlicher als in der unrotierten Anfangslösung, die auf sukzessiver Varianzmaximierung beruht. Die Summe der Eigenwerte ist aber invariant zwischen den beiden Lösungen.