library(lavaan)
library(semTools)
library(tidyverse)
library(report)
8 Konfirmatorische Faktorenanalyse
Schnauber, A. (2017). Medienselektion im Alltag. Springer Fachmedien Wiesbaden. https://doi.org/10.1007/978-3-658-15441-7
8.1 Pakete und Daten
Wir laden zunächst die notwendigen R-Pakete. Für die konfirmatorische Faktorenanalyse benötigen wir das das lavaan
-Paket, für die Reliabilitätsbestimmung semTools
. Wie immer laden wir außerdem tidyverse
und report
.
Für die konfirmatorische Faktorenanalyse nutzen wir wieder den Excel-Datensatz gewohnheiten.xlsx
.
<- readxl::read_excel("data/gewohnheiten.xlsx")
d_habit d_habit
# A tibble: 791 × 195
id vf_fernseher vf_computer vf_tablet vf_radio vf_zeitung vf_smartphone
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 403074747 1 1 0 1 0 1
2 403087148 1 1 1 1 0 1
3 403129944 1 1 0 1 1 2
4 403143142 1 1 0 0 0 2
5 403200247 1 1 0 1 0 1
# ℹ 786 more rows
# ℹ 188 more variables: i1_fernseher <dbl>, i1_computer <dbl>, i1_tablet <dbl>,
# i1_smartphone <dbl>, i1_radio <dbl>, i1_zeitung <dbl>, vm_ferseher <dbl>,
# vm_computer <dbl>, vm_tablet <dbl>, vm_smartphone <dbl>, vm_radio <dbl>,
# vm_zeitung <dbl>, r_fernseher <dbl>, r_computer <dbl>, r_tablet <dbl>,
# r_smartphone <dbl>, r_radio <dbl>, r_zeitung <dbl>, f_einst1 <dbl>, # f_einst2 <dbl>, f_einst3 <dbl>, f_einst4 <dbl>, f_srhi_r1 <dbl>, …
8.2 Überprüfung der Items
Zunächst machen wir uns wie immer mit den relevanten Variablen vertraut und nutzen dafür die report_table()
-Funktion. Wir nutzen wieder die Skala für die Gewohnheitsstärke bei der Computer-Nutzung (c_srhi_X
), die wir für die weiteren Schnitte ausschneiden und in einem neuen Datensatz speichern.
<- d_habit |>
d_cfa select(c_srhi_r1:c_srhi_c2)
|>
d_cfa ::report_table() report
Variable | n_Obs | Mean | SD | Median | MAD | Min | Max | Skewness | Kurtosis | percentage_Missing
--------------------------------------------------------------------------------------------------------
c_srhi_r1 | 791 | 4.57 | 0.85 | | 0.00 | 1.00 | 5.00 | -2.37 | 5.67 | 2.65
c_srhi_r2 | 791 | 4.31 | 1.04 | | 0.00 | 1.00 | 5.00 | -1.67 | 2.23 | 2.65
c_srhi_r3 | 791 | 4.45 | 0.92 | | 0.00 | 1.00 | 5.00 | -2.02 | 4.02 | 2.65
c_srhi_a1 | 791 | 2.03 | 1.31 | | 0.00 | 1.00 | 5.00 | 1.03 | -0.22 | 2.65
c_srhi_a2 | 791 | 2.49 | 1.38 | | 1.48 | 1.00 | 5.00 | 0.44 | -1.08 | 2.65
c_srhi_a3 | 791 | 1.79 | 1.19 | | 0.00 | 1.00 | 5.00 | 1.40 | 0.79 | 2.65
c_srhi_a4 | 791 | 2.68 | 1.28 | | 1.48 | 1.00 | 5.00 | 0.20 | -1.01 | 2.65
c_srhi_a5 | 791 | 2.46 | 1.41 | | 1.48 | 1.00 | 5.00 | 0.45 | -1.15 | 2.65
c_srhi_a6 | 791 | 1.87 | 1.19 | | 0.00 | 1.00 | 5.00 | 1.25 | 0.47 | 2.65
c_srhi_c1 | 791 | 3.52 | 1.23 | | 1.48 | 1.00 | 5.00 | -0.50 | -0.66 | 2.65 c_srhi_c2 | 791 | 3.89 | 1.25 | | 1.48 | 1.00 | 5.00 | -0.94 | -0.19 | 2.65
Die Ergebnisse der explorativen Faktoranalyse zur Gewohnheitsstärke bei der Computernutzung (Variablen c_srhi_X
) haben drei Faktoren offengelegt: die fehlende Bewusstheit der Computernutzung, den Wiederholungscharakter der Computernutzung und die geringe Kontrollierbarkeit der Computernutzung. Hätten wir uns eingehend mit Gewohnheiten bei der Mediennutzung befasst, hätten wir diese drei Dimensionen auch theoretisch herleiten können vgl. Schnauber, A. (2017). Medienselektion im Alltag. Springer Fachmedien Wiesbaden. https://doi.org/10.1007/978-3-658-15441-7. Mit der konfirmatorischen Faktoranalyse (CFA) testen wir, ob die Items tatsächlich die drei Dimensionen abbilden können, d.h. im Gegensatz zur explorativen Faktorenanalyse wird nicht nur die Anzahl der Faktoren, sondern auch konkret die Zugehörigkeit der Items zu den Faktoren sowie deren Korrelationen untereinander getestet (sog. Messhypothesen).
Grundsätzlich sollten die Items, die wir für eine konfirmatorische Faktoranalyse verwenden wollen, ein metrisches Skalenniveau aufweisen (d.h. mindestens intervallskaliert) oder dichotom sein. Die verwendeten Items sind alle auf einer 5-er Skala erhoben und wenigstens quasi-metrisch.
8.3 Modellschätzung
Für die Modellschätzung (d.h. wir gehen von drei Dimensionen bei der Gewohnheitsstärke aus) nutzen wir das Paket lavaan
, das wir schon aus dem Kapitel zur Pfadanalyse kennen (Messmodelle sind nichts anderes als Strukturgleichungsmodelle). Auch hier wird zunächst das Modell spezifiziert und anschließend mit den empirischen Daten geschätzt.
Wir definieren im lavaan
-Modell jede latente Variable bzw. Faktor mit einem character
-Objekt im folgenden Format:
latente_variable =~ variable1 + variable2 + ... + variable_n
Für unsere CFA mit 3 Faktoren heißt das:
<- "
cfa_model repetition =~ c_srhi_r1 + c_srhi_r2 + c_srhi_r3
automatism =~ c_srhi_a1 + c_srhi_a2 + c_srhi_a3 + c_srhi_a4 + c_srhi_a5 + c_srhi_a6
control =~ c_srhi_c1 + c_srhi_c2
"
Im nächsten Schritt nutzen wir die Funktion cfa() mit unserer Spezifikation, das die latenten Faktoren enthält.
<- lavaan::cfa(cfa_model, data = d_cfa) cfa_results
Sobald das Modell geschätzt wurde, können wir uns mit Hilfe der Funktion summary()
eine Modellzusammenfassung ansehen. Dabei fordern wir sowohl Modellgütemaße als auch vollstandardisierte Koeffizienten (z.B. für Faktorladungen) an.
summary(cfa_results, fit = TRUE, std = TRUE)
lavaan 0.6-18 ended normally after 35 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 25
Used Total
Number of observations 770 791
Model Test User Model:
Test statistic 301.621
Degrees of freedom 41
P-value (Chi-square) 0.000
Model Test Baseline Model:
Test statistic 4345.426
Degrees of freedom 55
P-value 0.000
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.939
Tucker-Lewis Index (TLI) 0.919
Loglikelihood and Information Criteria:
Loglikelihood user model (H0) -11352.785
Loglikelihood unrestricted model (H1) -11201.975
Akaike (AIC) 22755.570
Bayesian (BIC) 22871.730
Sample-size adjusted Bayesian (SABIC) 22792.343
Root Mean Square Error of Approximation:
RMSEA 0.091
90 Percent confidence interval - lower 0.081
90 Percent confidence interval - upper 0.101
P-value H_0: RMSEA <= 0.050 0.000
P-value H_0: RMSEA >= 0.080 0.970
Standardized Root Mean Square Residual:
SRMR 0.069
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
repetition =~
c_srhi_r1 1.000 0.624 0.731
c_srhi_r2 1.427 0.070 20.282 0.000 0.890 0.856
c_srhi_r3 1.106 0.058 18.917 0.000 0.690 0.749
automatism =~
c_srhi_a1 1.000 1.046 0.798
c_srhi_a2 0.881 0.045 19.447 0.000 0.922 0.669
c_srhi_a3 0.984 0.037 26.720 0.000 1.029 0.863
c_srhi_a4 0.622 0.044 14.208 0.000 0.651 0.509
c_srhi_a5 0.948 0.046 20.657 0.000 0.991 0.703
c_srhi_a6 0.992 0.037 27.002 0.000 1.037 0.871
control =~
c_srhi_c1 1.000 1.091 0.885
c_srhi_c2 0.943 0.046 20.362 0.000 1.028 0.820
Covariances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
repetition ~~
automatism 0.028 0.027 1.037 0.300 0.043 0.043
control 0.440 0.037 11.775 0.000 0.647 0.647
automatism ~~
control 0.320 0.049 6.501 0.000 0.281 0.281
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.c_srhi_r1 0.340 0.022 15.304 0.000 0.340 0.466
.c_srhi_r2 0.289 0.030 9.625 0.000 0.289 0.267
.c_srhi_r3 0.372 0.025 14.722 0.000 0.372 0.439
.c_srhi_a1 0.624 0.039 16.081 0.000 0.624 0.363
.c_srhi_a2 1.047 0.058 18.014 0.000 1.047 0.552
.c_srhi_a3 0.362 0.027 13.620 0.000 0.362 0.255
.c_srhi_a4 1.208 0.064 18.933 0.000 1.208 0.740
.c_srhi_a5 1.003 0.057 17.674 0.000 1.003 0.505
.c_srhi_a6 0.342 0.026 13.185 0.000 0.342 0.241
.c_srhi_c1 0.330 0.050 6.551 0.000 0.330 0.217
.c_srhi_c2 0.514 0.050 10.339 0.000 0.514 0.327
repetition 0.389 0.036 10.904 0.000 1.000 1.000
automatism 1.093 0.085 12.938 0.000 1.000 1.000 control 1.190 0.089 13.321 0.000 1.000 1.000
Die Ausgabe besteht aus drei Teilen:
- Die Kopfzeile: Informationen über Lavaan, die Optimierungsmethode, die Anzahl der freien Parameter und die Anzahl der in der Analyse verwendeten Beobachtungen (in diesem Fall n = 770)
- Informationen zum Modellfit: Enthält verschiedene Anpassungsindizes zur Bewertung der Modellanpassung
- Parameter-Schätzunger: Der letzte Abschnitt enthält alle Parameter, die geschätzt wurden (einschließlich der Faktorladungen, Varianzen, Schwellenwerte…)
Zunächst schauen wir, ob das Modell konvergiert ist, dann auf die Fit-Indizes .
Eine signifikante Teststatistik (ein signifikanter Chi-Quadrat-Wert) weist auf eine Diskrepanz zwischen dem vorgeschlagenen Modell und den beobachteten Daten hin (Nullhypothese: die modellimplizierte Kovarianzmatrix entspricht der empirischen Kovarianzmatrix). Der signifikante Chi-Quadrat-Wert zeigt, dass das Modell nicht perfekt zu den Daten passt, was aber bei größeren Stichproben häufig vorkommt, da dort auch kleinere Abweichungen signifikant sind. Daher betrachten wir auch immer eine Reihe von alternativen Fit-Indizes.
CFI (Comparative Fit Index) und TLI (Tucker-Lewis-Index) messen die Verbesserung der Modellanpassung im Vergleich zu einem Basismodell, in dem nichts korreliert. Sie sollten bei guten Modellen >= 0.95 sein.
RMSEA (Root mean Square Error of Approximation) bewertet die Modellpassung zwischen dem Modell und den beobachteten Daten unter Berücksichtigung des Approximationsfehlers, sollte <= 0.05 und nicht signifikant sein.
SRMR (Standardized Root Mean Square Residual): misst die standardisierte Diskrepanz zwischen beobachteten und modellimplzierten Korrelationen zwischen den gemessenen Variablen. Ein kleinerer SRMR-Wert zeigt eine bessere Anpassung an, sollte <= 0.08, besser <= .05 sein.
Im Beispiel ist der Chi-Quadrat-Test signifikant \(\chi^2\)(41) = 301.6, p < .05, CFI und TLI liegen unter 0.95, RMSEA über 0.05, d.h. diese Anpassungsindizes weisen auf einen moderaten bis schlechten Modelfit hin, auch wenn der SRMR befriedigend ist.
Betrachten wir anschließend die standardisierten Faktorladungen, können wir sehen, dass die meisten Items recht hoch auf “ihren” Faktor laden (>= .7). Das bedeutet, dass die latente Variable mindestens 50% der Varianz in den Items erklären kann (\(R^2\) = .7^2 = .49) Kurz, es gibt noch Verbesserungsbedarf, aber die Skala scheint die angenommene dreidimensionale Faktorstruktur zu haben. Die Faktoren Kontrolle und Wiederholung korrelieren sehr stark (r = .648), Wiederholung und Automatismus hingegen fast gar nicht, wie wir im Abschnitt Covariances
des Outputs sehen können.
8.4 Modellverbesserung
Was kann die Ursache für fehlende Modellgüte sein?
- Einige Items gehören zu einem anderen oder auch zu gar keinem der spezifizierten Faktoren, sie sind schlicht keine validen Indikatoren des Konstrukts.
- Einige Items gehören zu mehr als einem spezifizierten Faktor, d.h. es gibt nicht-modellierte Doppelladungen, deren Nicht-Berücksichtigung den Modellfit verschlechtern.
- Die Variablen sind nicht (annähernd) normalverteilt, so dass man mit einem anderen Schätzverfahren arbeiten sollte.
- Die Messhypothesen sind schlicht falsch, d.h. die unterstellte Faktorstruktur stimmt insgesamt nicht
8.4.1 Faktorladungen
Bei den Faktorladungen sehen wir, dass wieder das Item c_srhi_a4
deutlich geringer lädt als die anderen (wie bei der explorativen Faktoranalyse auch). Wir könnten daher versuchen, durch das Weglassen von c_srhi_a4
den Modellfit zu verbessern. Beim Löschen von Items muss allerdings auch der Validitätsaspekt berücksichtigt werden. Eine Skala mit vielen fast identisch formulierten Items wird eine hohe Reliabilität und Items hohe Ladungen haben, allerdings auch nur einen (zu) schmalen Aspekt des theoretischen Konstrukts abdecken, daher muss man überlegen, ob das zu löschende Item aus dieser Perspektive verzichtbar ist.
<- "
cfa_model2 repetition =~ c_srhi_r1 + c_srhi_r2 + c_srhi_r3
automatism =~ c_srhi_a1 + c_srhi_a2 + c_srhi_a3 + c_srhi_a5 + c_srhi_a6
control =~ c_srhi_c1 + c_srhi_c2
"
<- lavaan::cfa(cfa_model2, data = d_cfa)
cfa_results2 summary(cfa_results2, fit = T, std = T)
lavaan 0.6-18 ended normally after 35 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 23
Used Total
Number of observations 770 791
Model Test User Model:
Test statistic 243.463
Degrees of freedom 32
P-value (Chi-square) 0.000
Model Test Baseline Model:
Test statistic 4082.531
Degrees of freedom 45
P-value 0.000
User Model versus Baseline Model:
Comparative Fit Index (CFI) 0.948
Tucker-Lewis Index (TLI) 0.926
Loglikelihood and Information Criteria:
Loglikelihood user model (H0) -10174.154
Loglikelihood unrestricted model (H1) -10052.422
Akaike (AIC) 20394.308
Bayesian (BIC) 20501.174
Sample-size adjusted Bayesian (SABIC) 20428.139
Root Mean Square Error of Approximation:
RMSEA 0.093
90 Percent confidence interval - lower 0.082
90 Percent confidence interval - upper 0.104
P-value H_0: RMSEA <= 0.050 0.000
P-value H_0: RMSEA >= 0.080 0.974
Standardized Root Mean Square Residual:
SRMR 0.071
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
repetition =~
c_srhi_r1 1.000 0.624 0.731
c_srhi_r2 1.425 0.070 20.300 0.000 0.889 0.855
c_srhi_r3 1.106 0.058 18.935 0.000 0.690 0.750
automatism =~
c_srhi_a1 1.000 1.037 0.791
c_srhi_a2 0.869 0.046 18.809 0.000 0.902 0.655
c_srhi_a3 1.004 0.038 26.699 0.000 1.041 0.873
c_srhi_a5 0.943 0.047 20.165 0.000 0.978 0.694
c_srhi_a6 1.008 0.038 26.849 0.000 1.045 0.878
control =~
c_srhi_c1 1.000 1.091 0.885
c_srhi_c2 0.942 0.046 20.361 0.000 1.027 0.820
Covariances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
repetition ~~
automatism 0.018 0.027 0.688 0.491 0.028 0.028
control 0.440 0.037 11.780 0.000 0.647 0.647
automatism ~~
control 0.310 0.049 6.355 0.000 0.274 0.274
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.c_srhi_r1 0.339 0.022 15.293 0.000 0.339 0.465
.c_srhi_r2 0.290 0.030 9.676 0.000 0.290 0.268
.c_srhi_r3 0.371 0.025 14.717 0.000 0.371 0.438
.c_srhi_a1 0.642 0.040 16.206 0.000 0.642 0.374
.c_srhi_a2 1.084 0.060 18.127 0.000 1.084 0.571
.c_srhi_a3 0.338 0.026 12.899 0.000 0.338 0.238
.c_srhi_a5 1.029 0.058 17.760 0.000 1.029 0.518
.c_srhi_a6 0.326 0.026 12.612 0.000 0.326 0.230
.c_srhi_c1 0.329 0.050 6.523 0.000 0.329 0.216
.c_srhi_c2 0.515 0.050 10.365 0.000 0.515 0.328
repetition 0.389 0.036 10.916 0.000 1.000 1.000
automatism 1.075 0.084 12.773 0.000 1.000 1.000 control 1.191 0.089 13.330 0.000 1.000 1.000
Der Chi-Quadrat-Test ist zwar immer noch signifikant, CFI und TLI haben sich verbessert, RMSEA liegt unter 0.05 und SRMR liegt unter 0.08, passt also. Wir könnten also noch weiter versuchen, unser Modell zu verbessern.
8.4.2 Modification Indices
Hierfür könnten wir uns die sog. Modification Indices (MI) des Modells ansehen, die wir mit der entsprechenden Funktion modificationindices()
erhalten. Jeder MI gibt die Verbesserung des Modells (=Reduktion des Chi-Quadrat-Werts) wieder, wenn wir den vorgeschlagenen Parameter (Ladung, Korrelation, etc.) zum Modell hinzufügen würden. Die Spalte mi
im Output-Tibble enthält den eigentlichen Modification Index, d.h. wir können absteigend danach sortieren und uns nur die 5 größten MI ausgeben lassen, die also das Modell am meisten verbessern würden.
::modificationindices(cfa_results2) |>
lavaanarrange(desc(mi)) |>
head(5)
lhs op rhs mi epc sepc.lv sepc.all sepc.nox
1 repetition =~ c_srhi_a5 68.817 0.554 0.345 0.245 0.245
2 c_srhi_a2 ~~ c_srhi_a5 63.061 0.336 0.336 0.318 0.318
3 c_srhi_a3 ~~ c_srhi_a6 52.869 0.209 0.209 0.631 0.631
4 control =~ c_srhi_a5 50.159 0.282 0.307 0.218 0.218 5 repetition =~ c_srhi_a2 24.293 0.334 0.209 0.151 0.151
Wir sehen in den ersten beiden Zeilen das Item c_srhi_a5
: In Zeile 1 wird eine Doppelladung repetition =~ c_srhi_a5
vorgeschlagen, d.h. das Item spiegelt nicht nur den Automatismus-, sondern z.T. auch den Wiederholungsaspekt wider. In Zeile 2 wird vorgeschlagen, doch die Items a2 und a5 korrelieren zu lassen ~~
, was ein Indikator dafür ist, dass beide Items außer dem Automatisierungsaspekt noch eine Gemeinsamkeit haben. Beide MI-Vorschläge würden die gewünschte Einfachstruktur (jedes Item gehört zu genau einem Faktor) der Skala verändern, weshalb wir vielleicht c_srhi_a5
auch entfernen sollten, zumal das Item auch noch auf die Kontrolldimension laden würde, siehe Zeile 4.
8.5 Reliablität
Zum Schluss können wir uns noch die Realiabilität der fertigen Skala ansehen. Neben Cronbachs Alpha werden noch weitere Reliabilitätskoeffizienten ausgegeben (Bollen’s ω (omega), Bentler’s ω (omega2) und McDonald’s ω (omega3)), die auf dem geschätzten CFA-Modell basieren und weniger (falsche) Annahmen über die Faktorstruktur haben als Alpha. Bei einem guten Modell unterscheiden sich die Werte nicht sehr stark, enthält das Modell Items mit niedrigen Faktorladungen, die aber trotzdem klar zu einem Faktor gehörten, weichen die Omega-Werte erheblich von Alpha ab. Alle Werte liegen zwischen 0 und 1, wobei Werte, die näher bei 1 liegen, für eine gute Reliabilität stehen (vgl. das dazugehörige Kapitel in der BA-Statistik). Die letzte Zeile avevar
bezeichnet die Average Variance Extracted, also die durchschnittlichen quadrierten Faktorladungen, die äquivalent zum o.g. \(R^2\) sind, d.h. wieviel Varianz in den Items durch die latente Variable erklärt werden kann. Auch hier sind höhere Werte besser, was bei allen drei Subskalen der Fall ist.
::reliability(cfa_results2) semTools
repetition automatism control
alpha 0.8208750 0.8831898 0.8410305
omega 0.8291862 0.8798391 0.8417930
omega2 0.8291862 0.8798391 0.8417930
omega3 0.8273931 0.8702994 0.8417930 avevar 0.6235352 0.5949607 0.7269868
Das Codebuch für den Datensatz gewohnheiten.xlsx finden Sie hier: Bachelor Kursmaterialien
8.6 Glossar
Funktion | Definition |
---|---|
lavaan::cfa | Konfirmatorische Faktorenanalyse |
lavaan::modificationindices | Verbesserungsfähigkeit des Modells berechnen |
semTools::reliability | Reliabilitätskennwerte berechnen |
8.7 Hausaufgabe
Sie möchten prüfen, ob die Items zur Gewohnheitsstärke auch bei der Smartphonenutzung die drei Dimensionen abbilden. Die Items sind in den elf Variablen s_srhi_X
enthalten. Definieren und schätzen Sie das Modell. Passt das Modell zu den Daten? Wie kann man ggf. das Modell verbessern?