6  Konfirmatorische Faktorenanalyse (CFA)

6.1 Setup

Das Beispieldaten-Setup für die CFA ist identisch mit dem Setup der Kapitel zu PCA und EFA, bis auf eine kleine Änderung der Variablennamen.

Packages laden, Daten einlesen und aufbereiten:

pacman::p_load(tidyverse, ggplot2, ggthemes, psych, haven, EFAutilities, knitr, lavaan, semPlot, psychTools)
# Daten einlesen
data <- read_sav("https://github.com/methodenlehre/data/blob/master/beispieldaten.sav?raw=true")

# Datenframe mit nur den Items zur Lebenszufriedenheit erstellen
ls <- data |>
  select(num_range("leben", 1:10)) |>
  drop_na()

Die Daten der Lebenszufriedenheit bestehen aus 10 Items, welche sich auf verschiedene Aspekte/Bereiche der Lebenszufriedenheit beziehen. Die Jugendlichen wurden gefragt:

“Wie zufrieden bist Du…”

Fragen
leben1 mit deinen Schulnoten?
leben2 mit deinem Aussehen und deiner Erscheinung?
leben3 mit der Beziehung zu deinen Lehrern?
leben4 mit allem, was mit der Schule zu tun hat?
leben5 mit allem, was mit deiner Beziehung zu anderen Menschen zu tun hat?
leben6 mit deiner Person?
leben7 mit der Beziehung zu deinen Freunden?
leben8 mit der Beziehung zu deinen Eltern?
leben9 mit dem Zusammenleben mit den anderen Familienmitgliedern?
leben10 mit dem Lebensstandard und dem Ansehen deiner Familie?

Geantwortet wurde auf einer 7-stufigen Skala von 1 = “überhaupt nicht zufrieden” bis 7 = “sehr zufrieden”.

Die Fragen zur Lebenszufriedenheit können in vier Aspekte/Bereiche gegliedert werden:

Familie: Items 8, 9 und 10

Schule: Items 1, 3 und 4

Selbst: Items 2 und 6

Freunde: Items 7 und 5

Entsprechend ändern wir jetzt die Namen der Variablen, damit die Zuordnung etwas klarer wird. Um die Reihenfolge der Variablen mit ihrer inhaltlichen Ausrichtung in Übereinstimmung zu bringen, ändern wir die Reihenfolge noch mit select().

ls <- ls |>
  rename(
    fam1 = leben8,
    fam2 = leben9,
    fam3 = leben10,
    schule1 = leben1,
    schule2 = leben3,
    schule3 = leben4,
    selbst1 = leben2,
    selbst2 = leben6,
    freund1 = leben5,
    freund2 = leben7
  ) |>
  select(
    schule1, schule2, schule3, selbst1, selbst2,
    freund1, freund2, fam1, fam2, fam3
  )
summary(ls)
    schule1         schule2         schule3         selbst1     
 Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
 1st Qu.:4.000   1st Qu.:4.000   1st Qu.:4.000   1st Qu.:5.000  
 Median :5.000   Median :5.000   Median :5.000   Median :5.000  
 Mean   :4.754   Mean   :4.797   Mean   :4.435   Mean   :5.214  
 3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:5.000   3rd Qu.:6.000  
 Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
    selbst2         freund1         freund2           fam1      
 Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
 1st Qu.:5.000   1st Qu.:5.000   1st Qu.:6.000   1st Qu.:5.000  
 Median :6.000   Median :6.000   Median :6.000   Median :6.000  
 Mean   :5.678   Mean   :5.594   Mean   :6.217   Mean   :5.833  
 3rd Qu.:6.000   3rd Qu.:6.000   3rd Qu.:7.000   3rd Qu.:7.000  
 Max.   :7.000   Max.   :7.000   Max.   :7.000   Max.   :7.000  
      fam2            fam3      
 Min.   :1.000   Min.   :1.000  
 1st Qu.:5.000   1st Qu.:5.000  
 Median :6.000   Median :6.000  
 Mean   :5.627   Mean   :5.808  
 3rd Qu.:6.000   3rd Qu.:7.000  
 Max.   :7.000   Max.   :7.000  

6.1.1 Ausreisser beseitigen

Wie in der Übung zur exploratorischen Faktorenanalyse/Hauptkomponentenanalyse entfernen wir alle Personen aus dem Datensatz, die auf mindestens einer der zehn Lebenszufriedenheitsvariablen einen Wert ausserhalb von +/- 3 SD vom Mittelwert aufweisen. Auch für die ML-Schätzung bei der CFA gilt die Annahme einer multivariaten Normalverteilung, die insbesondere durch starke Ausreisserwerte verletzt werden kann. Durch die Entfernung von Ausreisserwerten wollen wir ausserdem sicherstellen, dass einflussreiche Datenpunkte möglichst keine Rolle für die Faktorlösung spielen.

# Definition einer Funktion `keep`, die nur Datenpunkte auswählt, die zwischen
# +/- 3 Standardabweichungen einer Variablen liegen
keep <- function(x) {
  mx <- mean(x) # Wir speichern den Mittelwert der Variable
  sd3 <- 3 * sd(x) # Hier speichern wir die Standardabweichung * 3
  between(x, left = mx - sd3, right = mx + sd3)
}

# Wir nutzen die Funktion filter(). Wir behalten alle Rows (Personen), die keinen Wert haben,
# der stärker vom Variablen-Mittelwert abweicht als 3 sd's.
ls_clean <- ls |>
  filter(rowMeans(sapply(ls, keep)) == 1)

6.2 lavaan

Lavaan ist ein kostenloses Open-Source-Paket für die latente Variablenmodellierung in R. Man kann Lavaan verwenden, um eine Vielzahl von statistischen Modellen zu schätzen. Zum Beispiel Pfadanalysen, Strukturgleichungsmodelle und eben auch konfirmatorische Faktorenanalysen (CFA).

Der Name lavaan kommt von latent variable analysis.

In dieser Übung beschränken wir uns vor allem auf die cfa()-Funktion von lavaan.

Die Berechnung einer CFA mit lavaan besteht aus zwei Schritten. Zuerst muss ein Modell definiert werden, dann kann das Modell mit der cfa()-Funktion geschätzt werden. Diese Funktion nimmt als Input unsere Daten und unsere Modelldefinition.

6.2.1 Modell definieren

Modelldefinitionen in lavaan folgen alle der selben Syntax.

In der Syntax sind gewisse Zeichen (Operatoren) vordefiniert und es werden auch bestimmte Voreinstellungen vorgenommen, die man ggf. überschreiben muss. Z.B. wird per default die Skalierung der latenten Variablen über die Fixierung (auf den Wert 1) des Ladungsparameters des jeweils ersten Indikators (manifeste Variable) für eine bestimmte latente Variable erreicht. Ausserdem müssen die Ladungsparameter des Modells nicht explizit definiert werden, genauso wenig wie die Varianzparameter der Residualvariablen der manifesten Variablen.

=~ bedeutet, dass die zu bildende latente Variable (hier z.B. Faktor1, Name frei wählbar) links von dem Operator durch alle Variablen rechts davon definiert wird. Die manifesten (gemessenen) Variablen auf der rechten Seite werden mit einem + separiert. Diese müssen im Datenframe vorhanden sein.

Ein Beispiel für sechs Items, welche durch zwei Faktoren (latente Variablen) erklärt werden:

bsp_model <- "
# Die Reihenfolge, mit der die Faktoren definiert werden, spielt keine Rolle.
Faktor1 =~ var1 + var2 + var3
Faktor2 =~ var4 + var5 + var6
# Die Reihenfolge der manifesten Variablen ist nur für die Fixierung einer Ladung
# pro Faktor von Bedeutung. Hier werden die Ladungen von `var1` und `var4` auf
# den Wert 1 fixiert.

# Zudem haben wir Kommentare im String, die von lavaan ignoriert werden.
"

Eine weitere Voreinstellung ist, dass für alle latenten Variablen in einer CFA automatisch eine Faktor-Kovarianz spezifiziert wird. Der Operator für die Spezifikation einer Kovarianz ist ~~. D.h. wir könnten in diesem Beispiel auch noch eine weitere Zeile mit Faktor1 ~~ Faktor2 hinzufügen, ohne dass sich an der Modelldefinition etwas ändern würde.

6.2.2 Modell schätzen

Ein Modell kann mit folgender Syntax geschätzt werden: cfa(model = bsp_model, data = dataframe)

Die direkte Ausführung dieser Syntax ergibt allerdings nur einen sehr begrenzten Output, der nur die Anzahl der geschätzten Parameter, der Anzahl Beobachtungen sowie die Chi-Quadrat-Statistik enthält.

Daher muss das Ergebnis von cfa() zunächst in einem Output-Objekt (z.B. fit_bsp_model) abgespeichert und der ausführliche Output (mit den Parameterschätzern) mit summary(fit_bsp_model) extrahiert werden. Für die summary()-Funktion gibt es einige zusätzliche Argumente: fit.measures = TRUE gibt beispielsweise eine Reihe globaler Fitindizes (z.B. SRMR, RMSEA, CLI, TLI) sowie Informationskriterien (z.B. AIC und BIC) aus, und mit standardized = TRUE erhalten wir neben den unstandardisierten Parameterschätzern auch die standardisierten Parameterschätzer.

6.3 CFA zu Lebenszufriedenheitsbereichen

In diesem Kapitel fitten wir unterschiedlich komplexe CFA-Modelle auf unsere ls-Daten und vergleichen die Modelle anschliessend miteinander. Zunächst schauen wir uns theoriegeleitet ein 4-Faktor-Modell an, dann als Alternative dazu ein (sparsameres, da weniger Parameter schätzendes) 3-Faktor-Modell. In einem Vertiefungsteil schauen wir uns dann noch eine alternative Formulierung des 3-Faktor-Modells an, um zu zeigen, dass das 3-Faktor-Modell im 4-Faktor-Modell genestet ist (und damit ein Modellvergleich mittels LR-Test möglich ist). Die Modelle in diesem Kapitel sind Modelle mit Faktoren erster Ordnung. In Kapitel 6.3.4 betrachten wir dann noch ein Modell mit einem zusätzlichen Gesamt-Lebenszufriedenheitsfaktor zweiter Ordnung.

6.3.1 CFA mit vier Faktoren

Aus theoretischen Gründen schätzen wir zunächst ein Modell mit vier Faktoren. Für jeden inhaltlich definierten Lebenszufriedenheitsbereich (Schule, Selbst, Freunde, Familie) definieren wir einen Faktor. Ausserdem postulieren wir wie üblich eine Einfachstruktur, d.h. alle potentiellen Querladungen werden auf den Wert 0 restringiert (indem manifeste Variablen in der Modelldefinition nur in der Gleichung des zugehörigen Faktor auftauchen).

6.3.1.1 Modell definieren

model_4f <- "
# Der erste Faktor bezieht sich auf den Bereich `schule`
schule =~ schule1 + schule2 + schule3

# Der zweite Faktor bezieht sich auf den Bereich `selbst`
selbst =~ selbst1 + selbst2

# Der dritte Faktor bezieht sich auf den Bereich `freunde`
freunde =~ freund1 + freund2

# Der vierte Faktor bezieht sich auf den Bereich `familie`
familie =~ fam1 + fam2 + fam3
"

Das Modell kann man sich folgendermassen vorstellen:

Typische Aufgabe: Schritt für Schritt

In diesem Abschnitt schauen wir uns zusammen die Struktur des CFA-Modells genauer an. Dabei hilft uns die obige Visualisierung des Modells. Fragen zur Struktur des Modells (e.g. Freiheitsgrade des Modells oder Anzahl latenter Variablen) eignen sich sehr gut, um das Verständnis von CFA-Modellen zu überprüfen.

Wie viele und welche manifeste Variablen hat das Modell?

10 manifeste Variablen: schule1, schule2, schule3, selbst1, selbst2, freund1, freund2, fam1, fam2, fam3

Wie viele Informationen \((n_{Info})\) enthält die Varianz-Kovarianz-Matrix der manifesten Variablen?

\(n_{Info} = \frac{p \cdot (p + 1)}{2} = \frac{10\cdot11}{2} = 55\)

Das könnte man auch ganz einfach zählen, wenn man sich die Varianz-Kovarianz Matrix der manifesten Variablen ansieht und dann die Einträge in dieser Matrix zählt.

Beachte dabei, dass wie immer jeder Kovarianz-Wert doppelt vorkommt (die Matrix ist symmetrisch). Wir dürfen aber nur jeweils einen davon zählen. Hier zählen wir das untere Dreieck der Matrix (und die Diagonale, auf der sich die Varianz-Werte befinden).

        schul1 schul2 schul3 slbst1 slbst2 frend1 frend2 fam1 fam2 fam3
schule1      1                                                         
schule2      2     11                                                  
schule3      3     12     20                                           
selbst1      4     13     21     28                                    
selbst2      5     14     22     29     35                             
freund1      6     15     23     30     36     41                      
freund2      7     16     24     31     37     42     46               
fam1         8     17     25     32     38     43     47   50          
fam2         9     18     26     33     39     44     48   51   53     
fam3        10     19     27     34     40     45     49   52   54   55

Wie viele und welche latenten Variablen hat das Modell?

14 latente Variablen: 4 Faktoren (familie, schule, selbst, freunde) und 10 Residualvariablen der manifesten Variablen (ohne Namen)

Wie viele und welche Parameter müssen geschätzt werden? \((n_{Par})\)

6 Faktorladungen

10 Varianzen der Residualvariablen der manifesten Variablen

4 Varianzen der latenten Faktoren

6 Kovarianzen zwischen den latenten Faktoren

\(n_{Par} = 6 + 10 + 4 + 6 = 26\)

Wie viele Freiheitsgrade besitzt das Modell?

\(df = n_{Info} - n_{Par} = 55 - 26 = 29\)

6.3.1.2 Modell schätzen

fit_mod4f <- cfa(model_4f, data = ls_clean)
summary(fit_mod4f, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6.17 ended normally after 40 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        26

  Number of observations                           255

Model Test User Model:
                                                      
  Test statistic                                51.433
  Degrees of freedom                                29
  P-value (Chi-square)                           0.006

Model Test Baseline Model:

  Test statistic                               583.039
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.958
  Tucker-Lewis Index (TLI)                       0.935

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3427.760
  Loglikelihood unrestricted model (H1)      -3402.044
                                                      
  Akaike (AIC)                                6907.520
  Bayesian (BIC)                              6999.593
  Sample-size adjusted Bayesian (SABIC)       6917.166

Root Mean Square Error of Approximation:

  RMSEA                                          0.055
  90 Percent confidence interval - lower         0.029
  90 Percent confidence interval - upper         0.079
  P-value H_0: RMSEA <= 0.050                    0.341
  P-value H_0: RMSEA >= 0.080                    0.045

Standardized Root Mean Square Residual:

  SRMR                                           0.053

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
  schule =~                                                             
    schule1           1.000                               0.572    0.420
    schule2           1.431    0.257    5.572    0.000    0.819    0.638
    schule3           1.995    0.403    4.947    0.000    1.141    0.858
  selbst =~                                                             
    selbst1           1.000                               0.730    0.669
    selbst2           0.940    0.156    6.028    0.000    0.685    0.784
  freunde =~                                                            
    freund1           1.000                               0.661    0.791
    freund2           0.614    0.117    5.235    0.000    0.406    0.531
  familie =~                                                            
    fam1              1.000                               0.782    0.742
    fam2              1.061    0.129    8.233    0.000    0.830    0.846
    fam3              0.598    0.084    7.136    0.000    0.467    0.510

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  schule ~~                                                             
    selbst            0.075    0.039    1.947    0.052    0.180    0.180
    freunde           0.111    0.039    2.862    0.004    0.293    0.293
    familie           0.098    0.040    2.427    0.015    0.219    0.219
  selbst ~~                                                             
    freunde           0.296    0.059    5.049    0.000    0.614    0.614
    familie           0.142    0.052    2.735    0.006    0.249    0.249
  freunde ~~                                                            
    familie           0.178    0.048    3.700    0.000    0.344    0.344

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .schule1           1.528    0.147   10.414    0.000    1.528    0.824
   .schule2           0.978    0.137    7.130    0.000    0.978    0.593
   .schule3           0.469    0.209    2.245    0.025    0.469    0.265
   .selbst1           0.656    0.100    6.575    0.000    0.656    0.552
   .selbst2           0.295    0.076    3.865    0.000    0.295    0.386
   .freund1           0.262    0.079    3.301    0.001    0.262    0.375
   .freund2           0.419    0.047    8.948    0.000    0.419    0.718
   .fam1              0.498    0.079    6.336    0.000    0.498    0.449
   .fam2              0.274    0.077    3.574    0.000    0.274    0.285
   .fam3              0.622    0.061   10.240    0.000    0.622    0.740
    schule            0.327    0.109    3.001    0.003    1.000    1.000
    selbst            0.532    0.120    4.452    0.000    1.000    1.000
    freunde           0.437    0.095    4.594    0.000    1.000    1.000
    familie           0.611    0.109    5.593    0.000    1.000    1.000

\(~\)

Interpretation des Modells

Eine korrekte Interpretation des R Outputs ist ein wichtiger Bestandteil der Lernziele für die CFA.

Wie sehen die Faktorladungen aus? Sind alle signifikant?

Alle Faktorladungen sind signifikant (\(p < 0.001\)). Die standardisierten Ladungen (Std.all) schwanken zwischen 0.420 (schule =~ schule1) und 0.858 (schule =~ schule3).

Sind die Kovarianzen/Korrelationen zwischen den Faktoren signifikant?

Bis auf schule ~~ selbst (\(p = 0.052\)) sind alle Kovarianzen signifikant. Die stärkste Kovarianz/Korrelation findet sich mit 0.296/0.614 zwischen freunde ~~ selbst, also zwischen den beiden Faktoren, die in der EFA zusammen auf einem Faktor geladen haben.

Sind die Faktorvarianzen sowie Varianzen der Residualvariablen signifikant?

Ja, alle Residualvarianzen sind signifikant (\(p < 0.05\)).

Wie gross sind die Kommunalitäten der manifesten Variablen?

Die Kommunalitäten erhalten wir entweder über eine Quadrierung der zu einer manifesten Variablen gehörenden standardisierten Ladung oder über die Differenz 1 minus die standardisierte Residualvarianz (Uniqueness) einer manifesten Variablen.

Die höchste Kommunalität ist daher die von schule3 mit \(0.858^2 = 1 - 0.265 \approx 0.735\) und die niedrigste die von schule1 mit \(0.420^2 = 1 - 0.824 \approx 0.176\).

6.3.1.3 Modell visualisieren

Wir visualisieren Strukturgleichungsmodelle mit dem Package semPlot.

semPaths(fit_mod4f, "par",
  weighted = FALSE, nCharNodes = 7, shapeMan = "rectangle",
  sizeMan = 8, sizeMan2 = 5
)

6.3.1.4 Lokaler Fit: Vergleich der empirischen mit der vom Modell implizierten Varianz-Kovarianz-Matrix

Lokaler Fit bezieht sich auf die Frage, wie gut das Modell einzelne beobachtete Varianzen und Kovarianzen abbildet/repräsentiert. Wir vergleichen dafür die vom Modell implizierte Varianz-Kovarianz-Matrix mit der empirischen Varianz-Kovarianz-Matrix (der gemessenen Variablen).

Die Funktion lavInspect() aus dem Package lavaan ermöglicht die Extraktion von Informationen aus einem lavaan-Objekt. Mit dem Argument what spezifiziert man, welche Informationen extrahiert werden sollen. Der Wert sampstat dieses Arguments steht für “sample statistics”, also für die empirische Varianz-Kovarianz-Matrix:

lavInspect(fit_mod4f, what = "sampstat")
$cov
        schul1 schul2 schul3 slbst1 slbst2 frend1 frend2  fam1  fam2  fam3
schule1  1.855                                                            
schule2  0.444  1.648                                                     
schule3  0.640  0.944  1.771                                              
selbst1  0.104  0.156  0.235  1.189                                       
selbst2  0.167  0.015  0.105  0.500  0.765                                
freund1  0.193  0.088  0.249  0.312  0.271  0.699                         
freund2  0.043  0.095  0.098  0.151  0.183  0.268  0.584                  
fam1     0.369  0.134  0.159  0.136  0.189  0.170  0.168 1.110            
fam2     0.258  0.162  0.137  0.067  0.118  0.164  0.116 0.656 0.962      
fam3     0.136  0.173  0.242  0.144  0.198  0.160  0.099 0.326 0.394 0.841

Die vom Modell implizierte Varianz-Kovarianz-Matrix erhält man mit what = 'implied':

lavInspect(fit_mod4f, what = "implied")
$cov
        schul1 schul2 schul3 slbst1 slbst2 frend1 frend2  fam1  fam2  fam3
schule1  1.855                                                            
schule2  0.468  1.648                                                     
schule3  0.653  0.934  1.771                                              
selbst1  0.075  0.108  0.150  1.189                                       
selbst2  0.071  0.101  0.141  0.500  0.765                                
freund1  0.111  0.159  0.221  0.296  0.278  0.699                         
freund2  0.068  0.097  0.136  0.182  0.171  0.268  0.584                  
fam1     0.098  0.140  0.196  0.142  0.134  0.178  0.109 1.110            
fam2     0.104  0.149  0.208  0.151  0.142  0.189  0.116 0.649 0.962      
fam3     0.059  0.084  0.117  0.085  0.080  0.106  0.065 0.365 0.388 0.841

Je kleiner die Unterschiede zwischen diesen beiden Matrizen, desto besser passt das Modell auf die Daten, d.h. desto näher kommen die aus den geschätzten Parametern zurückgerechneten Varianzen und Kovarianzen an die empirischen Varianzen und Kovarianzen heran.

# Differenz der Matrizen berechnen und Ergebnis (Residualmatrix)
# in einem Objekt abspeichern
residualmatrix <-
  lavInspect(fit_mod4f, what = "sampstat")$cov -
  lavInspect(fit_mod4f, what = "implied")$cov
residualmatrix
        schul1 schul2 schul3 slbst1 slbst2 frend1 frend2   fam1   fam2   fam3
schule1  0.000                                                               
schule2 -0.024  0.000                                                        
schule3 -0.013  0.009  0.000                                                 
selbst1  0.028  0.049  0.085  0.000                                          
selbst2  0.096 -0.086 -0.036  0.000  0.000                                   
freund1  0.082 -0.070  0.028  0.016 -0.007  0.000                            
freund2 -0.025 -0.002 -0.038 -0.031  0.012  0.000  0.000                     
fam1     0.271 -0.007 -0.037 -0.006  0.055 -0.008  0.059  0.000              
fam2     0.154  0.013 -0.071 -0.084 -0.023 -0.024  0.001  0.007  0.000       
fam3     0.077  0.089  0.125  0.059  0.118  0.054  0.034 -0.040  0.006  0.000

Eine direkte Extraktion der Residualmatrix ist mit dem Argument what = "resid" möglich:

residualmatrix2 <- lavInspect(fit_mod4f, what = "resid")$cov

Um das ganze in diesem Dokument nicht doppelt darzustellen, zeigen wir lediglich, dass der Inhalt der beiden Objekte residualmatrix und residualmatrix2 exakt gleich ist:

all.equal(residualmatrix, residualmatrix2)
[1] TRUE

Für die lokale Fit-Diagnose besonders relevant ist die Varianz-Kovarianz-Matrix der standardisierten Residuen. Diese extrahieren wir nicht mit lavInspect(), sondern direkt mit resid().

resid(fit_mod4f, type = "standardized")$cov
        schul1 schul2 schul3 slbst1 slbst2 frend1 frend2   fam1   fam2   fam3
schule1  0.000                                                               
schule2 -0.640  0.000                                                        
schule3 -1.035  2.314  0.000                                                 
selbst1  0.336  0.698  1.529  0.000                                          
selbst2  1.437 -1.738 -1.196  0.000  0.000                                   
freund1  1.331 -1.659  1.254  1.235 -0.901  0.000                            
freund2 -0.421 -0.044 -0.843 -1.100  0.680  0.000  0.000                     
fam1     3.298 -0.106 -0.764 -0.126  1.645 -0.266  1.560  0.000              
fam2     2.081  0.243 -2.382 -2.080 -1.010 -1.338  0.017  2.679  0.000       
fam3     1.064  1.357  1.960  1.080  2.829  1.386  0.892 -2.809  0.790  0.000

\(~\)

Interpretation der Residuen

Betrachten Sie die Sample-(Ko-)Varianzmatrix und die Implizierte (Ko-)Varianzmatrix. Welches sind die drei stärksten Abweichungen zwischen beiden Matrizen? Werden die ensprechenden Varianzen/Kovarianzen vom Modell unter- oder überschätzt?

Dazu betrachten wir die unstandardisierte Residualmatrix.

fam1 ~~ schule1 = 0.271

fam2 ~~ schule1 = 0.154

fam3 ~~ schule3 = 0.125

Bei den drei grössten Abweichungen sind die empirischen Kovarianzen grösser als die vom Modell implizierten. Sie werden also durch das Modell unterschätzt, daher sind die zugehörigen Residualkovarianzen alle positiv. Inhaltlich erklärbar sind diese Abweichungen dadurch, dass im Modell keine Querladungen zugelassen sind, also z.B. Item schule1 (Schulnoten) nicht auf dem Familien-Faktor laden „darf”.

Welche sind signifikant?

Dazu benötigen wir die standardisierte Residualmatrix. Dort schauen wir, welche Werte (absolut) grösser sind als unsere z-verteilte Prüfgrösse \((\geq 2,58\: \widehat=\: p\leq 0.01)\).

Nämlich:

fam1 ~~ schule1 = 3.298

fam3 ~~ selbst2 = 2.829

fam3 ~~ fam1 = -2.809

fam2 ~~ fam1 = 2.679

Interessanterweise beziehen sich zwei der vier signifikanten Residualkovarianzen auf solche innerhalb des Familien-Faktors!

6.3.1.5 Globaler Fit

\(CFI = 0.958\) und \(NNFI/TLI = 0.935\) (siehe Output unter 3.2) nehmen Werte knapp unter empfohlenen Cut-Off-Kriterien für einen guten Fit von 0.97 bzw. 0.95 an.

Der \(RMSEA = 0.055\) liegt zwar knapp über dem Cut-Off für einen guten Model Fit von 0.05, ist aber nicht signifikant \((p = 0.341)\) grösser als dieser, und gleichzeitig signifikant kleiner als der Cut-off von 0.08, ab dem der Model Fit als schlecht gilt \((p = 0.045)\). Das 90 %-CI des RMSEA von \([0.029; 0.079]\) beinhaltet dementsprechend den Wert 0.05, nicht aber den Wert 0.08.

Auch nach dem \(SRMR = 0.053\) ist der Model Fit als gut (< 0.08) zu beurteilen.

\(~\)

CFI und NNFI/TLI sowie die Informationskriterien AIC und BIC von Hand berechnet

Wie in der Vorlesung erwähnt, sind diese Formeln prüfungsrelevant.

\(\begin{aligned} CFI &= 1-\frac{\chi_{t}^{2}-d f_{t}}{\chi_{i}^{2}-d f_{i}}\\ &= 1-\frac{51.433-29}{583.039 -45}\\ &= 1-\frac{22.433}{538.039}\\ &= 0.958 \end{aligned}\)

\(~\)

\(\begin{aligned} NNFI/TLI &= \left(\frac{\chi_{i}^{2}}{d f_{i}}-\frac{\chi_{t}^{2}}{d f_{t}}\right)/\left({\frac{\chi_{i}^{2}}{d f_{i}}-1}\right) \\ &= \left(\frac{583.039}{45}-\frac{51.433}{29}\right)/\left({\frac{583.039}{45}-1}\right) \\ &= \frac{12.956-1.774}{12.956-1} \\ &= 0.935 \end{aligned}\)

\(~\)

\(\begin{aligned} AIC &=\chi^{2}+2 \cdot t\\ &= 51.433+ 2 \cdot 26 \\ &= 103.433 \end{aligned}\)

\(~\)

\(\begin{aligned} BIC &=\chi^{2}+ \ln (n) \cdot t \\ &=51.433 + 26 \cdot \ln (255)\\ &=51.433+26 \cdot 5.541\\ &= 195.499 \end{aligned}\)

\(~\)

AIC und BIC unterscheiden sich von den von lavaan berechneten Werten, da letztere auf Basis der -2 Log-Likelihood und nicht auf der Basis von Chi-Quadrat berechnet werden. Für Modellvergleiche (s.u.) spielt es aber keine Rolle, welche dieser beiden Model-Fit-Statistiken man als Ausgangspunkt für die Berechnung von AIC und BIC nimmt. Da sich Chi-Quadrat und -2 Log-Likelihood nur um eine zu vernachlässigende Konstante voneinander unterscheiden, weist z.B. der AIC zweier Modelle immer dieselbe Differenz unabhängig von der Berechnungsart auf.

6.3.2 CFA mit drei Faktoren

6.3.2.1 Modell definieren

Wir definieren hier ein Modell mit drei Faktoren, da wir bei der EFA gesehen haben, dass ein solches möglicherweise ein sparsameres Alternativmodell sein könnte.

model_3f <- "
# Der erste Faktor ist `schule`
schule =~ schule1 + schule2 + schule3

# Als zweiten Faktor kombinieren wir jetzt `selbst` und `freunde`
selbstfreunde =~ selbst1 + selbst2 + freund1 + freund2

# Zum Schluss die `familie`
familie =~ fam1 + fam2 + fam3
"

6.3.2.2 Modell schätzen

fit_mod3f <- cfa(model_3f, data = ls_clean)
summary(fit_mod3f, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6.17 ended normally after 39 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        23

  Number of observations                           255

Model Test User Model:
                                                      
  Test statistic                                79.522
  Degrees of freedom                                32
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                               583.039
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.912
  Tucker-Lewis Index (TLI)                       0.876

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3441.804
  Loglikelihood unrestricted model (H1)      -3402.044
                                                      
  Akaike (AIC)                                6929.609
  Bayesian (BIC)                              7011.058
  Sample-size adjusted Bayesian (SABIC)       6938.142

Root Mean Square Error of Approximation:

  RMSEA                                          0.076
  90 Percent confidence interval - lower         0.055
  90 Percent confidence interval - upper         0.098
  P-value H_0: RMSEA <= 0.050                    0.021
  P-value H_0: RMSEA >= 0.080                    0.408

Standardized Root Mean Square Residual:

  SRMR                                           0.064

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
  schule =~                                                             
    schule1           1.000                               0.577    0.424
    schule2           1.436    0.258    5.574    0.000    0.828    0.645
    schule3           1.954    0.393    4.971    0.000    1.127    0.847
  selbstfreunde =~                                                      
    selbst1           1.000                               0.686    0.629
    selbst2           0.889    0.127    7.006    0.000    0.610    0.698
    freund1           0.741    0.110    6.722    0.000    0.509    0.608
    freund2           0.502    0.092    5.465    0.000    0.344    0.450
  familie =~                                                            
    fam1              1.000                               0.787    0.747
    fam2              1.048    0.128    8.191    0.000    0.824    0.840
    fam3              0.596    0.084    7.131    0.000    0.469    0.511

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  schule ~~                                                             
    selbstfreunde     0.103    0.039    2.616    0.009    0.261    0.261
    familie           0.102    0.041    2.468    0.014    0.225    0.225
  selbstfreunde ~~                                                      
    familie           0.178    0.051    3.507    0.000    0.331    0.331

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .schule1           1.522    0.147   10.379    0.000    1.522    0.821
   .schule2           0.962    0.139    6.926    0.000    0.962    0.584
   .schule3           0.501    0.206    2.429    0.015    0.501    0.283
   .selbst1           0.718    0.087    8.236    0.000    0.718    0.604
   .selbst2           0.393    0.057    6.907    0.000    0.393    0.513
   .freund1           0.441    0.051    8.572    0.000    0.441    0.630
   .freund2           0.466    0.046   10.154    0.000    0.466    0.797
   .fam1              0.491    0.079    6.189    0.000    0.491    0.443
   .fam2              0.283    0.077    3.700    0.000    0.283    0.295
   .fam3              0.621    0.061   10.222    0.000    0.621    0.739
    schule            0.333    0.110    3.019    0.003    1.000    1.000
    selbstfreunde     0.470    0.103    4.571    0.000    1.000    1.000
    familie           0.619    0.110    5.607    0.000    1.000    1.000

6.3.2.3 Modell visualisieren

semPaths(fit_mod3f, "par",
  weighted = FALSE, nCharNodes = 7, shapeMan = "rectangle",
  sizeMan = 8, sizeMan2 = 5
)

\(~\)

Und jetzt mit standardisierten Parameterschätzern:

semPaths(fit_mod3f, "std",
  weighted = FALSE, nCharNodes = 7, shapeMan = "rectangle",
  sizeMan = 8, sizeMan2 = 5
)

6.3.2.4 Globaler Fit

\(CFI = 0.912\) und \(NNFI/TLI = 0.876\) sind jetzt deutlich niedriger als die empfohlenen Cut-Off-Kriterien.

Der \(RMSEA = 0.076\) ist jetzt auch signifikant grösser als der Cut-Off von 0.05 \((p = 0.021)\) und nicht mehr signifikant kleiner als 0.08 \((p = 0.408)\). Das 90 %-CI des RMSEA von \([0.055; 0.098]\) beinhaltet dementsprechend den Wert 0.05 nicht, den Wert 0.08 aber schon.

Lediglich nach dem \(SRMR = 0.064\) ist der Model Fit noch als gut (< 0.08) zu beurteilen.

CFI und NNFI/TLI sowie die Informationskriterien AIC und BIC von Hand berechnet

\(\begin{aligned} CFI &= 1-\frac{\chi_{t}^{2}-d f_{t}}{\chi_{i}^{2}-d f_{i}}\\ &= 1-\frac{79.522-32}{583.039 -45}\\ &=1-\frac{47.522}{538.039}\\ &=0.912 \end{aligned}\)

\(~\)

\(\begin{aligned} NNFI/TLI &= \left(\frac{\chi_{i}^{2}}{d f_{i}}-\frac{\chi_{t}^{2}}{d f_{t}}\right)/\left({\frac{\chi_{i}^{2}}{d f_{i}}-1}\right) \\ &= \left(\frac{583.039}{45}-\frac{79.522}{32}\right)/\left({\frac{583.039}{45}-1}\right) \\ &= \frac{12.956-2.485}{12.956-1} \\ &= 0.876 \end{aligned}\)

\(~\)

\(\begin{aligned} AIC &= \chi^{2}+2 \cdot t\\ &= 79.522+ 2 \cdot 23 \\ &= 125.522 \end{aligned}\)

\(~\)

\(\begin{aligned} BIC &= \chi^{2}+t \cdot \ln (n)\\ &=79.522 + 23 \cdot \ln (255)=79.522+23 \cdot 5.541\\ &= 206.965 \end{aligned}\)

\(~\)

Ein 3-Faktor-Modell ist alternativ spezifizierbar, indem bestimmte Parameter des 4-Faktor-Modells restringiert werden. Damit können wir zeigen, dass das 3-Faktor-Modell im 4-Faktor-Modell genestet ist.

Um aus dem 4-Faktor-Modell ein 3-Faktor-Modell mit einem kombinierten Selbst- und Freunde-Faktor zu machen, muss durch Parameterrestriktionen dafür gesorgt werden, dass die Faktoren freunde und selbst sich wie ein einziger Faktor verhalten. Damit diese zwei Faktoren zu einem werden, muss zum einen die Kovarianz zwischen den beiden Faktoren auf den Wert 1 gesetzt werden (Syntax siehe unten). Damit eine Kovarianz von 1 wirklich eine exakte Gleichheit der beiden Faktoren bedeutet, müssen auch die Varianzen der beiden latenten Variablen gleich 1 sein (damit wird dann auch die Korrelation zwischen den latenten Variablen 1). Die einfachste Möglichkeit, um das zu erreichen, ist die Festlegung der Varianzen aller latenten Variablen auf den Wert 1 mit dem cfa()-Argument std.lv = TRUE, das gleichzeitg dafür sorgt, dass auch die Ladungen der ersten manifesten Variablen jedes Faktors frei geschätzt werden. Dieser Aspekt wird also nicht in der Modelldefinition, sondern erst bei der Modellschätzung festgelegt!

Zum anderen müssen die Zusammenhänge der Faktoren mit allen anderen Faktoren für beide Faktoren (freunde und selbst) identisch sein. Dies können wir erreichen, indem wir die Parameter der Faktoren-Kovarianzen benennen (d.h. explizit spezifizieren) und gleichzeitig den beiden gleichzusetzenden Parametern denselben Namen geben. Z.B. soll die Kovarianz von freunde und schule genau gleich geschätzt werden wie die Kovarianz zwischen selbst und schule. Wenn wir beide zu schätzende Parameter mit a benennen, erkennt lavaan, dass für beide Kovarianzen derselbe Wert geschätzt werden soll.

Dieses Modell nennen wir model_4f_res.

Modell definieren

model_4f_res <- "
schule  =~ schule1 + schule2 + schule3
selbst  =~ selbst1 + selbst2
freunde =~ freund1 + freund2
familie =~ fam1 + fam2 + fam3

# Restriktion Kovarianz
freunde ~~ 1 * selbst

# Gleichheitsrestriktionen: Kovarianzen mit gleichbenannten Parametern
freunde ~~ a * schule
selbst  ~~ a * schule
freunde ~~ b * familie
selbst  ~~ b * familie
"

Modell schätzen

fit_mod4f_res <- cfa(model_4f_res, std.lv = TRUE, data = ls_clean)
summary(fit_mod4f_res, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6.17 ended normally after 26 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        25
  Number of equality constraints                     2

  Number of observations                           255

Model Test User Model:
                                                      
  Test statistic                                79.522
  Degrees of freedom                                32
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                               583.039
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.912
  Tucker-Lewis Index (TLI)                       0.876

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3441.804
  Loglikelihood unrestricted model (H1)      -3402.044
                                                      
  Akaike (AIC)                                6929.609
  Bayesian (BIC)                              7011.058
  Sample-size adjusted Bayesian (SABIC)       6938.142

Root Mean Square Error of Approximation:

  RMSEA                                          0.076
  90 Percent confidence interval - lower         0.055
  90 Percent confidence interval - upper         0.098
  P-value H_0: RMSEA <= 0.050                    0.021
  P-value H_0: RMSEA >= 0.080                    0.408

Standardized Root Mean Square Residual:

  SRMR                                           0.064

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
  schule =~                                                             
    schule1           0.577    0.096    6.037    0.000    0.577    0.424
    schule2           0.828    0.097    8.499    0.000    0.828    0.645
    schule3           1.127    0.111   10.109    0.000    1.127    0.847
  selbst =~                                                             
    selbst1           0.686    0.075    9.141    0.000    0.686    0.629
    selbst2           0.610    0.060   10.126    0.000    0.610    0.698
  freunde =~                                                            
    freund1           0.509    0.058    8.829    0.000    0.509    0.608
    freund2           0.344    0.054    6.378    0.000    0.344    0.450
  familie =~                                                            
    fam1              0.787    0.070   11.214    0.000    0.787    0.747
    fam2              0.824    0.066   12.461    0.000    0.824    0.840
    fam3              0.469    0.060    7.783    0.000    0.469    0.511

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selbst ~~                                                             
    freunde           1.000                               1.000    1.000
  schule ~~                                                             
    freunde    (a)    0.261    0.081    3.216    0.001    0.261    0.261
    selbst     (a)    0.261    0.081    3.216    0.001    0.261    0.261
  freunde ~~                                                            
    familie    (b)    0.331    0.077    4.304    0.000    0.331    0.331
  selbst ~~                                                             
    familie    (b)    0.331    0.077    4.304    0.000    0.331    0.331
  schule ~~                                                             
    familie           0.225    0.077    2.922    0.003    0.225    0.225

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .schule1           1.522    0.147   10.379    0.000    1.522    0.821
   .schule2           0.962    0.139    6.926    0.000    0.962    0.584
   .schule3           0.501    0.206    2.429    0.015    0.501    0.283
   .selbst1           0.718    0.087    8.236    0.000    0.718    0.604
   .selbst2           0.393    0.057    6.907    0.000    0.393    0.513
   .freund1           0.441    0.051    8.572    0.000    0.441    0.630
   .freund2           0.466    0.046   10.154    0.000    0.466    0.797
   .fam1              0.491    0.079    6.189    0.000    0.491    0.443
   .fam2              0.283    0.077    3.700    0.000    0.283    0.295
   .fam3              0.621    0.061   10.222    0.000    0.621    0.739
    schule            1.000                               1.000    1.000
    selbst            1.000                               1.000    1.000
    freunde           1.000                               1.000    1.000
    familie           1.000                               1.000    1.000

Modell visualisieren

Mit standardisierten Parameterschätzern:

semPaths(fit_mod4f_res, "std", "par",
  weighted = FALSE, nCharNodes = 7,
  shapeMan = "rectangle", sizeMan = 8, sizeMan2 = 5
)

Um bei allen Parametern exakt die gleichen standardisierten Parameterschätzer zu erhalten wie im “normal” definierten 3-Faktor-Modell oben, muss letzteres auch mit der Option std.lv = TRUE geschätzt werden. Sonst ergeben sich hier aufgrund der unterschiedlichen Festlegung der Skalierung der latenten Variablen kleine Unterschiede bei den Ladungen und bei den Residualvarianzen.

fit_mod3f_alt <- cfa(model_3f, std.lv = TRUE, data = ls_clean)
semPaths(fit_mod3f_alt, "std", "par",
  weighted = FALSE, nCharNodes = 7,
  shapeMan = "rectangle", sizeMan = 8, sizeMan2 = 5
)

Modellvergleich von 3-Faktor-Modell und alternativem 3-Faktor-Modell

Ein Modellvergleich sollte jetzt zeigen, dass das 3-Faktor-Modell und das restringierte 4-Faktor-Modell gleich gut fitten, weil sie identisch sind.

Wir testen das:

anova(fit_mod3f, fit_mod4f_res)

Chi-Squared Difference Test

              Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_mod3f     32 6929.6 7011.1 79.522                                    
fit_mod4f_res 32 6929.6 7011.1 79.522 2.2919e-10     0       0           

Das ist der Fall! (Die sehr kleine Zahl bei Chisq diff kommt durch minimale numerische Ungenauigkeiten bei der ML-Schätzung zu Stande.)

6.3.3 Modellvergleich 3-Faktor-Modell und 4-Faktor-Modell

Ausserdem wollen wir noch das 3-Faktor-Modell gegen das ursprüngliche 4-Faktormodell testen.

Dieser Test überprüft, ob die Nullhypothese, dass das 3-Faktor-Modell nicht schlechter als das 4-Faktor-Modell auf die Daten passt, aufrechterhalten werden kann oder abgelehnt werden muss.

anova(fit_mod3f, fit_mod4f)

Chi-Squared Difference Test

          Df    AIC    BIC  Chisq Chisq diff  RMSEA Df diff Pr(>Chisq)    
fit_mod4f 29 6907.5 6999.6 51.433                                         
fit_mod3f 32 6929.6 7011.1 79.522     28.089 0.1811       3  3.479e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Der Vergleich ist signifikant. Das 3-Faktormodell passt also signifikant schlechter auf die Daten als das 4-Faktor-Modell.

Diese Schlussfolgerung ergibt sich auch aufgrund der oben bereits von Hand berechneten Informationskriterien AIC und BIC:

Beim AIC ergab sich für das 4-Faktor-Modell ein Wert von 103.433 und für das 3-Faktor-Modell ein Wert von 125.522 (respektive die von lavaan ausgegebenen AIC-Werte von 6907.52 und 6929.609). Nach dem AIC ist also das 4-Faktor-Modell zu bevorzugen (kleinerer AIC).

Beim BIC ergibt sich ein ähnliches Bild: von Hand gerechnet beim 4-Faktor-Modell BIC = 195.499 und beim 3-Faktor-Modell BIC = 206.965 (von lavaan ausgegebene Werte: 6999.593 und 7011.058). Auch nach dem (im Vergleich zum AIC) eher sparsamere Modelle (mit weniger Parametern) bevorzugenden BIC sollte also das 4-Faktor-Modell ausgewählt werden.

6.3.4 Modell mit Lebenszufriedenheitsfaktor zweiter Ordnung

Wie wir sehen können, sind die vier Faktoren im 4-Faktor-Modell alle positiv untereinander korreliert und diese Korrelationen sind mit einer Ausnahme \((r_{SchuleSelbst}=0.18, \; p = 0.052)\) auch signifikant. Dies und die Tatsache, dass die Lebenszufriedenheit in der psychologischen Forschung nicht nur bereichsspezifisch, sondern auch (und sogar vorwiegend) global konzeptualisiert wird, lassen vermuten, dass ein übergeordneter Faktor (higher order factor, 2nd order factor) Lebenszufriedenheit existiert, der die Korrelationen der bereichsspezifischen Lebenszufriedenheitsfaktoren erklären kann.

In der CFA können wir einen solchen Faktor zweiter Ordnung modellieren. Ein weiterer Faktor scheint das Modell zunächst komplizierter zu machen, doch das kann täuschen: Tatsächlich werden in einem Modell mit einem übergeordneten Faktor insgesamt zwei Parameter weniger geschätzt als im Modell mit vier Faktoren: Anstelle von sechs Kovarianzen zwischen den Faktoren werden jetzt vier Ladungen (bzw. drei Ladungen und eine Varianz des Faktors zweiter Ordnung) geschätzt.

6.3.4.1 Modell definieren

model_4f_2order <- "
schule  =~ schule1 + schule2 + schule3
selbst  =~ selbst1 + selbst2
freunde =~ freund1 + freund2
familie =~ fam1 + fam2 + fam3

# Übergeordneter Faktor Zufriedenheit
zufriedenheit =~ schule + selbst + freunde + familie
"

6.3.4.2 Modell schätzen

fit_mod4f_2order <- cfa(model_4f_2order, ls_clean)
summary(fit_mod4f_2order, fit.measures = TRUE, standardized = TRUE)
lavaan 0.6.17 ended normally after 67 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        24

  Number of observations                           255

Model Test User Model:
                                                      
  Test statistic                                53.372
  Degrees of freedom                                31
  P-value (Chi-square)                           0.008

Model Test Baseline Model:

  Test statistic                               583.039
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.958
  Tucker-Lewis Index (TLI)                       0.940

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3428.730
  Loglikelihood unrestricted model (H1)      -3402.044
                                                      
  Akaike (AIC)                                6905.459
  Bayesian (BIC)                              6990.450
  Sample-size adjusted Bayesian (SABIC)       6914.364

Root Mean Square Error of Approximation:

  RMSEA                                          0.053
  90 Percent confidence interval - lower         0.027
  90 Percent confidence interval - upper         0.077
  P-value H_0: RMSEA <= 0.050                    0.387
  P-value H_0: RMSEA >= 0.080                    0.030

Standardized Root Mean Square Residual:

  SRMR                                           0.060

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
  schule =~                                                             
    schule1           1.000                               0.555    0.407
    schule2           1.439    0.261    5.508    0.000    0.799    0.622
    schule3           2.118    0.449    4.713    0.000    1.175    0.883
  selbst =~                                                             
    selbst1           1.000                               0.736    0.675
    selbst2           0.924    0.153    6.040    0.000    0.680    0.777
  freunde =~                                                            
    freund1           1.000                               0.662    0.792
    freund2           0.612    0.117    5.229    0.000    0.405    0.530
  familie =~                                                            
    fam1              1.000                               0.780    0.741
    fam2              1.068    0.131    8.136    0.000    0.833    0.849
    fam3              0.595    0.084    7.106    0.000    0.465    0.507
  zufriedenheit =~                                                      
    schule            1.000                               0.322    0.322
    selbst            2.720    0.985    2.763    0.006    0.661    0.661
    freunde           3.397    1.250    2.717    0.007    0.917    0.917
    familie           1.686    0.661    2.550    0.011    0.386    0.386

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .schule1           1.547    0.148   10.481    0.000    1.547    0.834
   .schule2           1.011    0.139    7.278    0.000    1.011    0.613
   .schule3           0.390    0.231    1.689    0.091    0.390    0.220
   .selbst1           0.647    0.100    6.442    0.000    0.647    0.544
   .selbst2           0.303    0.075    4.020    0.000    0.303    0.396
   .freund1           0.261    0.080    3.277    0.001    0.261    0.373
   .freund2           0.420    0.047    8.958    0.000    0.420    0.719
   .fam1              0.501    0.079    6.317    0.000    0.501    0.452
   .fam2              0.268    0.078    3.429    0.001    0.268    0.279
   .fam3              0.625    0.061   10.256    0.000    0.625    0.743
   .schule            0.276    0.095    2.915    0.004    0.896    0.896
   .selbst            0.305    0.091    3.369    0.001    0.563    0.563
   .freunde           0.070    0.106    0.661    0.509    0.159    0.159
   .familie           0.518    0.097    5.360    0.000    0.851    0.851
    zufriedenheit     0.032    0.021    1.536    0.125    1.000    1.000

6.3.4.3 Modell visualisieren

Hier jetzt gleich mit standardisierten Parametern:

semPaths(fit_mod4f_2order, "std",
  weighted = FALSE, nCharNodes = 7,
  shapeMan = "rectangle", sizeMan = 8, sizeMan2 = 5
)

Die Parameterschätzer zeigen, dass die stärkste standardisierte Ladung der Bereichsfaktoren (Faktoren erster Ordnung) diejenige des Bereichs Freunde ist, während die niedrigste diejenige des Bereichs Schule ist. Das Ladungsmuster zeigt sich insgesamt relativ heterogen.

6.3.4.4 Model Fit und Modellvergleiche

CFI = 0.958 und NNFI/TLI = 0.94 sind sehr ähnlich wie beim 4-Faktor-Modell. Der RMSEA = 0.053 ist noch etwas niedriger als bei letzterem und nicht signifikant grösser als 0.05 (90 %-CI = [0.027; 0.077]). Der SRMR = 0.06 fällt dagegen etwas höher als beim 4-Faktor-Modell aus.

AIC = 101.372 und BIC = 186.356 (nach der Eid-Formel mit Chi-Quadrat berechnet) sind beide niedriger als die entsprechenden Werte des 4-Faktor-Modells (AIC = 103.433 und BIC = 195.499). Nach diesen Informationskriterien ist also das Modell mit Faktor zweiter Ordnung gegenüber dem 4-Faktor-Modell zu bevorzugen.

Jetzt vergleichen wir noch alle drei Modelle (in aufsteigender Reihenfolge der Anzahl geschätzter Parameter: 3-Faktor-Modell, 4-Faktor-Modell mit Faktor zweiter Ordnung, 4-Faktor-Modell) über sequentielle Likelihood-Ratio-Tests. Die Voraussetzung für die Gültigkeit dieser Tests ist wie wir wissen die Nestung der eingeschränkten Modelle (mit weniger Parameter) in den Modellen mit weniger Restriktionen (mit mehr Parametern). Für das 3-Faktor- und das 4-Faktor-Modell haben wir die Nestung oben nachgewiesen. Aber auch das 4-Faktor-Modell mit Faktor zweiter Ordnung ist im 4-Faktor-Modell genestet: alle Modelle, die die gleichen vier Faktoren erster Ordnung haben, sind im 4-Faktor-Modell genestet, da es sich bei diesem um ein gesättigtes Modell auf der Ebene der latenten Variablen handelt.

anova(fit_mod3f, fit_mod4f_2order, fit_mod4f)

Chi-Squared Difference Test

                 Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff Pr(>Chisq)
fit_mod4f        29 6907.5 6999.6 51.433                                      
fit_mod4f_2order 31 6905.5 6990.4 53.372     1.9395 0.00000       2     0.3792
fit_mod3f        32 6929.6 7011.1 79.522    26.1494 0.31405       1   3.16e-07
                    
fit_mod4f           
fit_mod4f_2order    
fit_mod3f        ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Der Modellvergleich zeigt, dass das 4-Faktor-Modell mit Faktor zweiter Ordnung nicht signifikant schlechter auf die Daten passt als das weniger sparsame 4-Faktor-Modell (\(\Delta\chi^2=\) 1.9395, \(p =\) 0.3792). Der zweite Test zeigt dagegen einen signifikanten Modellvergleich des 3-Faktor-Modells mit dem 4-Faktor-Modell mit Faktor zweiter Ordnung an (\(\Delta\chi^2=\) 26.1494, \(p =\) 0). Das 3-Faktor-Modell passt also auch hier signifikant schlechter.

Das beste dieser drei Modelle ist also das 4-Faktor-Modell mit Faktor zweiter Ordnung. Dieses weist auch die jeweils niedrigsten von lavaan ausgegebenen Informationskriterien aller Modelle auf (AIC = 6905.5, BIC = 6990.4).

6.4 Übung

Wir nehmen wieder Daten aus dem Big Five Inventory (bfi) mit 2800 Datenpunkten (\(n = 2800\))

Laden Sie die Daten mit folgendem Code-Chunk:

pacman::p_load(tidyverse, lavaan, psychTools, semPlot)
data("bfi", package = "psychTools")

Aufgabe 1

  1. Definieren Sie ein Modell mit 5 sinnvollen Faktoren und lassen Sie die Faktoren frei miteinander kovariieren/korrelieren. Verwenden Sie dafür nur die Variablen, die einer Frage (Item) im bfi-Fragebogen entsprechen (also ohne die demographischen Angaben). Geben Sie den Faktoren brauchbare Namen, das hilft bei der Interpretation. Dafür schauen Sie sich am Besten die Dokumentation des Datenframes an. Tipp: ?psychTools::bfi

Modell definieren

bfi_5F <- "
Agreeableness     =~ A1 + A2 + A3 + A4 + A5
Conscientiousness =~ C1 + C2 + C3 + C4 + C5
Extraversion      =~ E1 + E2 + E3 + E4 + E5
Neuroticism       =~ N1 + N2 + N3 + N4 + N5
Openness          =~ O1 + O2 + O3 + O4 + O5
"

Aus der Itemstruktur sowie der Dokumentation der Daten wird klar, dass jede der Komponente der Big Five durch einen eigenen Faktor dargestellt werden sollte. Welche Items zu welchem Faktor gehören, ist dank der Namensgebung leicht zu erkennen. Jeder Faktor hat hier fünf manifeste Variablen. Hier die Items mit Kennzeichnung der inhaltlich umgekehrt formulierten Items mit (RE).

Agreeableness:

  • A1: Am indifferent to the feelings of others. (RE)

  • A2: Inquire about others’ well-being.

  • A3: Know how to comfort others.

  • A4: Love children.

  • A5: Make people feel at ease.

Conscientiousness:

  • C1: Am exacting in my work.

  • C2: Continue until everything is perfect.

  • C3: Do things according to a plan.

  • C4: Do things in a half-way manner. (RE)

  • C5: Waste my time. (RE)

Extraversion:

  • E1: Don’t talk a lot. (RE)

  • E2: Find it difficult to approach others. (RE)

  • E3: Know how to captivate people.

  • E4: Make friends easily.

  • E5: Take charge.

Neuroticism:

  • N1: Get angry easily.

  • N2: Get irritated easily.

  • N3: Have frequent mood swings.

  • N4: Often feel blue.

  • N5: Panic easily.

Openness:

  • O1: Am full of ideas.

  • O2: Avoid difficult reading material. (RE)

  • O3: Carry the conversation to a higher level.

  • O4: Spend time reflecting on things.

  • O5: Will not probe deeply into a subject. (RE)

  1. Fitten Sie dieses Modell und stellen Sie das Modell mit der Funktion semPaths() dar. Es sollen die standardisierten Parameterschätzer dargestellt werden. Diese Funktion finden Sie im Package semPlot. Lassen Sie sich das Modell inkl. Fit-Indizes und standardisierter Parameterschätzer ausgeben. Wie ist der Model-Fit zu beurteilen? Wie sind die (standardisierten) Faktorladungen zu beurteilen? Welche Korrelationen weisen die Persönlichkeitsfaktoren auf?

Modell fitten, darstellen und Ergebnisse ausgeben:

fit_bfi_5F <- cfa(data = bfi, model = bfi_5F) # Fitten

semPaths(fit_bfi_5F, "std") # Darstellen

summary(fit_bfi_5F, fit.measures = TRUE, standardized = TRUE) # Ausgeben
lavaan 0.6.17 ended normally after 55 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        60

                                                  Used       Total
  Number of observations                          2436        2800

Model Test User Model:
                                                      
  Test statistic                              4165.467
  Degrees of freedom                               265
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                             18222.116
  Degrees of freedom                               300
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.782
  Tucker-Lewis Index (TLI)                       0.754

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -99840.238
  Loglikelihood unrestricted model (H1)     -97757.504
                                                      
  Akaike (AIC)                              199800.476
  Bayesian (BIC)                            200148.363
  Sample-size adjusted Bayesian (SABIC)     199957.729

Root Mean Square Error of Approximation:

  RMSEA                                          0.078
  90 Percent confidence interval - lower         0.076
  90 Percent confidence interval - upper         0.080
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.037

Standardized Root Mean Square Residual:

  SRMR                                           0.075

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
  Agreeableness =~                                                          
    A1                    1.000                               0.484    0.344
    A2                   -1.579    0.108  -14.650    0.000   -0.764   -0.648
    A3                   -2.030    0.134  -15.093    0.000   -0.983   -0.749
    A4                   -1.564    0.115  -13.616    0.000   -0.757   -0.510
    A5                   -1.804    0.121  -14.852    0.000   -0.873   -0.687
  Conscientiousness =~                                                      
    C1                    1.000                               0.680    0.551
    C2                    1.148    0.057   20.152    0.000    0.781    0.592
    C3                    1.036    0.054   19.172    0.000    0.705    0.546
    C4                   -1.421    0.065  -21.924    0.000   -0.967   -0.702
    C5                   -1.489    0.072  -20.694    0.000   -1.012   -0.620
  Extraversion =~                                                           
    E1                    1.000                               0.920    0.564
    E2                    1.226    0.051   23.899    0.000    1.128    0.699
    E3                   -0.921    0.041  -22.431    0.000   -0.847   -0.627
    E4                   -1.121    0.047  -23.977    0.000   -1.031   -0.703
    E5                   -0.808    0.039  -20.648    0.000   -0.743   -0.553
  Neuroticism =~                                                            
    N1                    1.000                               1.300    0.825
    N2                    0.947    0.024   39.899    0.000    1.230    0.803
    N3                    0.884    0.025   35.919    0.000    1.149    0.721
    N4                    0.692    0.025   27.753    0.000    0.899    0.573
    N5                    0.628    0.026   24.027    0.000    0.816    0.503
  Openness =~                                                               
    O1                    1.000                               0.635    0.564
    O2                   -1.020    0.068  -14.962    0.000   -0.648   -0.418
    O3                    1.373    0.072   18.942    0.000    0.872    0.724
    O4                    0.437    0.048    9.160    0.000    0.277    0.233
    O5                   -0.960    0.060  -16.056    0.000   -0.610   -0.461

Covariances:
                       Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  Agreeableness ~~                                                          
    Conscientisnss       -0.110    0.012   -9.254    0.000   -0.334   -0.334
    Extraversion          0.304    0.025   12.293    0.000    0.683    0.683
    Neuroticism           0.141    0.018    7.712    0.000    0.223    0.223
    Openness             -0.093    0.011   -8.446    0.000   -0.303   -0.303
  Conscientiousness ~~                                                      
    Extraversion         -0.224    0.020  -11.121    0.000   -0.357   -0.357
    Neuroticism          -0.250    0.025  -10.117    0.000   -0.283   -0.283
    Openness              0.130    0.014    9.190    0.000    0.301    0.301
  Extraversion ~~                                                           
    Neuroticism           0.292    0.032    9.131    0.000    0.244    0.244
    Openness             -0.265    0.021  -12.347    0.000   -0.453   -0.453
  Neuroticism ~~                                                            
    Openness             -0.093    0.022   -4.138    0.000   -0.112   -0.112

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .A1                1.745    0.052   33.725    0.000    1.745    0.882
   .A2                0.807    0.028   28.396    0.000    0.807    0.580
   .A3                0.754    0.032   23.339    0.000    0.754    0.438
   .A4                1.632    0.051   31.796    0.000    1.632    0.740
   .A5                0.852    0.032   26.800    0.000    0.852    0.528
   .C1                1.063    0.035   30.073    0.000    1.063    0.697
   .C2                1.130    0.039   28.890    0.000    1.130    0.650
   .C3                1.170    0.039   30.194    0.000    1.170    0.702
   .C4                0.960    0.040   24.016    0.000    0.960    0.507
   .C5                1.640    0.059   27.907    0.000    1.640    0.615
   .E1                1.814    0.058   31.047    0.000    1.814    0.682
   .E2                1.332    0.049   26.928    0.000    1.332    0.512
   .E3                1.108    0.038   29.522    0.000    1.108    0.607
   .E4                1.088    0.041   26.732    0.000    1.088    0.506
   .E5                1.251    0.040   31.258    0.000    1.251    0.694
   .N1                0.793    0.037   21.575    0.000    0.793    0.320
   .N2                0.836    0.036   23.458    0.000    0.836    0.356
   .N3                1.222    0.043   28.271    0.000    1.222    0.481
   .N4                1.654    0.052   31.977    0.000    1.654    0.672
   .N5                1.969    0.060   32.889    0.000    1.969    0.747
   .O1                0.865    0.032   27.216    0.000    0.865    0.682
   .O2                1.990    0.063   31.618    0.000    1.990    0.826
   .O3                0.691    0.039   17.717    0.000    0.691    0.476
   .O4                1.346    0.040   34.036    0.000    1.346    0.946
   .O5                1.380    0.045   30.662    0.000    1.380    0.788
    Agreeableness     0.234    0.030    7.839    0.000    1.000    1.000
    Conscientisnss    0.463    0.036   12.810    0.000    1.000    1.000
    Extraversion      0.846    0.062   13.693    0.000    1.000    1.000
    Neuroticism       1.689    0.073   23.034    0.000    1.000    1.000
    Openness          0.404    0.033   12.156    0.000    1.000    1.000

Model-Fit:

Der Model-Fit ist nach allen Fit-Indizes (ausser dem SRMR) als ziemlich schlecht zu bewerten:

CFI = 0.782

TLI = 0.754

RMSEA = 0.078 (90% CI [0.076, 0.080])

SRMR = 0.075

Es wäre jetzt natürlich interessant zu wissen, woran das liegt. Dazu könnten wir zum einen die Matrix der standardisierten Residuen ansehen, um zu beurteilen, welche empirischen Kovarianzen durch das Modell besonders schlecht repräsentiert werden. Zum anderen könnten wir uns Modifikationsindizes ausgeben lassen (Welche Parameter könnten/sollten zusätzlich geschätzt werden, um den Fit zu verbessern?). Zu befürchten ist, dass alle Massnahmen, die einen besseren Model-Fit ermöglichen würden (d.h. zusätzliche geschätzte Parameter) nicht mit unserer Idee/Hypothese einer einfachstrukturierten Big-5-Faktorstruktur ohne Residualkovarianzen vereinbar wäre. Unter Umständen könnten aber sehr wenige und ggf. gut interpretierbare Querladungen und/oder Residualkovarianzen für einen akzeptablen Fit sorgen. Schauen Sie es sich an!

Wie sind die (standardisierten) Faktorladungen zu beurteilen?

Bis auf wenige Ausnahmen sind die Faktorladungen als substantiell zu beurteilen (Betrag ca. >= 0.5). Auffällig ist, dass zwei der fünf Faktoren über das Muster von positiven und negativen Faktorladungen in inhaltlich entgegengesetzter Richtung zu interpretieren sind: Agreeableness und Extraversion. Das spielt eine wichtige Rolle für die Interpretation ihrer Kovarianzen/Korrelationen mit den anderen Faktoren (s.u.). Der Grund dafür liegt in der Festlegung jeweils eines inhaltlich entgegengesetzt formulierten Items als Ankeritem mit der (positiven) Ladung 1. Die inhaltlich “richtig” formulierten Items erhalten dadurch negative Ladungen.

Welche Korrelationen weisen die Persönlichkeitsfaktoren auf?

Alle Kovarianzen sind signifikant \((p < .001)\). Die standardisierten Kovarianzen sind die Korrelationen, diese variieren vom Betrag her zwischen 0.112 und 0.683. Wichtig ist, dass die Korrelationen von Agreeableness und Extraversion mit den anderen drei Faktoren in die andere Richtung interpretiert bzw. die Faktoren als Unfriendlyness (Unfreundlichkeit) und Introversion interpretiert werden müssen.

Aufgabe 2

Finden Sie folgende Werte mithilfe der Darstellung und der Ausgabe des Modells aus Aufgabe 1.

  1. Wie viele Informationen enthält die Varianz-Kovarianz Matrix der manifesten Variablen (\(n_{info}\))?

Informationen (wobei p = Anzahl manifester Variablen)

\(\begin{aligned} n_{info} &= \frac{p*(p+1)}{2} \\ &= \frac{25*(25+1)}{2} \\ &= \frac{650}{2}\\ &= 325 \end{aligned}\)

  1. Wie viele Freiheitsgrade hat das Modell?

Die Freiheitsgrade lassen sich berechnen als: \[df = n_{info}-n_{parameter}\]

Also die Anzahl Informationen minus die Anzahl der zu schätzender Parameter. Je nach Darstellung kann man die Anzahl der zu schätzender Parameter auch abzählen, in dem man jeden (nicht gestrichelten) Pfeil zählt.

  • Varianzen der latenten Variablen: 5

  • Kovarianzen der latenten Variablen. Auch dafür gibt es eine Formel (für den Fall dass alle Kovarianzen frei geschätzt werden), sie ist sogar ziemlich ähnlich wie die von \(n_{info}\), wobei \(n_{lv}\) jetzt für die Anzahl latenter Variablen steht:

\(\begin{aligned} n_{cov\ latent \ variables} &= \frac{n_{lv}*(n_{lv}-1)}{2} \\ &= \frac{5*(5-1)}{2} \\ &= \frac{20}{2}\\ &= 10 \end{aligned}\)

Beachte, dass das \(p+1\) aus der Formel oben hier zu einem \(p-1\) geworden ist! Wichtig: Diese Formel stimmt nur, wenn alle Kovarianzen der latenten Variablen frei geschätzt werden (was normalerweise der Fall ist).

  • Varianzen der Residuen der manifesten Variablen: 25

  • Zu schätzende Faktorladungen:

\(\begin{aligned} n_{zu\ schätzende\ Ladungen} &= n_{Ladungen} - n_{fixierte\ Ladungen} \\ &= 25 - 5\\ &= 20 \end{aligned}\)

Wir haben also insgesamt zu schätzende Parameter:

\(n_{parameter} = 5 + 10 + 25 + 20 = 60\)

Und damit hat das Modell folgende Freiheitsgrade:

\(df = n_{info} - n_{parameter} = 325 - 60 = 265\)

Das entspricht auch dem Modelloutput:

fit_bfi_5F@test$standard$df # degrees of freedom direkt aus dem Modell
[1] 265

Aufgabe 3

  1. Schätzen Sie nun dasselbe Modell, diesmal aber ohne Kovarianzen zwischen den latenten Variablen (also so, als ob wir orthogonale Faktoren erwarten würden).

Modell definieren:

bfi_5F_noCV <- "
# Latente Faktoren bleiben:
Agreeableness     =~ A1 + A2 + A3 + A4 + A5
Conscientiousness =~ C1 + C2 + C3 + C4 + C5
Extraversion      =~ E1 + E2 + E3 + E4 + E5
Neuroticism       =~ N1 + N2 + N3 + N4 + N5
Openness          =~ O1 + O2 + O3 + O4 + O5

# Kovarianzen fixieren (wir haben 10 Kovarianzen)
Agreeableness ~~ 0 * Conscientiousness
Agreeableness ~~ 0 * Extraversion
Agreeableness ~~ 0 * Neuroticism
Agreeableness ~~ 0 * Openness
Conscientiousness ~~ 0 * Extraversion
Conscientiousness ~~ 0 * Neuroticism
Conscientiousness ~~ 0 * Openness
Extraversion ~~ 0 * Neuroticism
Extraversion ~~ 0 * Openness
Neuroticism ~~ 0 * Openness
"

Modell fitten:

fit_bfi_5F_noCV <- cfa(bfi_5F_noCV,
  data = bfi
)

Modell darstellen & ausgeben:

semPaths(fit_bfi_5F_noCV, "std") # Darstellen

summary(fit_bfi_5F_noCV) # Ausgeben
lavaan 0.6.17 ended normally after 53 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        50

                                                  Used       Total
  Number of observations                          2436        2800

Model Test User Model:
                                                      
  Test statistic                              5639.709
  Degrees of freedom                               275
  P-value (Chi-square)                           0.000

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Expected
  Information saturated (h1) model          Structured

Latent Variables:
                       Estimate  Std.Err  z-value  P(>|z|)
  Agreeableness =~                                        
    A1                    1.000                           
    A2                   -1.468    0.092  -15.885    0.000
    A3                   -1.887    0.116  -16.273    0.000
    A4                   -1.394    0.097  -14.400    0.000
    A5                   -1.502    0.096  -15.658    0.000
  Conscientiousness =~                                    
    C1                    1.000                           
    C2                    1.172    0.057   20.409    0.000
    C3                    1.047    0.054   19.347    0.000
    C4                   -1.377    0.064  -21.526    0.000
    C5                   -1.403    0.070  -20.029    0.000
  Extraversion =~                                         
    E1                    1.000                           
    E2                    1.205    0.048   25.012    0.000
    E3                   -0.785    0.036  -21.573    0.000
    E4                   -1.034    0.042  -24.402    0.000
    E5                   -0.713    0.035  -20.195    0.000
  Neuroticism =~                                          
    N1                    1.000                           
    N2                    0.947    0.024   40.245    0.000
    N3                    0.873    0.024   35.898    0.000
    N4                    0.665    0.025   26.891    0.000
    N5                    0.616    0.026   23.814    0.000
  Openness =~                                             
    O1                    1.000                           
    O2                   -1.165    0.077  -15.042    0.000
    O3                    1.248    0.074   16.878    0.000
    O4                    0.551    0.052   10.515    0.000
    O5                   -1.106    0.069  -15.970    0.000

Covariances:
                       Estimate  Std.Err  z-value  P(>|z|)
  Agreeableness ~~                                        
    Conscientisnss        0.000                           
    Extraversion          0.000                           
    Neuroticism           0.000                           
    Openness              0.000                           
  Conscientiousness ~~                                    
    Extraversion          0.000                           
    Neuroticism           0.000                           
    Openness              0.000                           
  Extraversion ~~                                         
    Neuroticism           0.000                           
    Openness              0.000                           
  Neuroticism ~~                                          
    Openness              0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .A1                1.691    0.051   33.160    0.000
   .A2                0.770    0.030   26.076    0.000
   .A3                0.694    0.036   19.186    0.000
   .A4                1.645    0.052   31.366    0.000
   .A5                0.965    0.035   27.652    0.000
   .C1                1.048    0.036   29.420    0.000
   .C2                1.084    0.039   27.560    0.000
   .C3                1.143    0.039   29.393    0.000
   .C4                0.990    0.042   23.804    0.000
   .C5                1.726    0.061   28.320    0.000
   .E1                1.682    0.058   29.081    0.000
   .E2                1.182    0.052   22.716    0.000
   .E3                1.224    0.041   30.002    0.000
   .E4                1.106    0.044   25.256    0.000
   .E5                1.306    0.042   31.131    0.000
   .N1                0.766    0.037   20.793    0.000
   .N2                0.812    0.036   22.814    0.000
   .N3                1.234    0.043   28.397    0.000
   .N4                1.703    0.053   32.241    0.000
   .N5                1.982    0.060   32.950    0.000
   .O1                0.881    0.034   26.289    0.000
   .O2                1.884    0.064   29.555    0.000
   .O3                0.849    0.040   21.122    0.000
   .O4                1.305    0.039   33.218    0.000
   .O5                1.278    0.046   27.702    0.000
    Agreeableness     0.288    0.033    8.601    0.000
    Conscientisnss    0.477    0.037   12.866    0.000
    Extraversion      0.978    0.067   14.564    0.000
    Neuroticism       1.716    0.074   23.242    0.000
    Openness          0.388    0.034   11.331    0.000
  1. Dürfen Sie die beiden Modelle mit einem \(\chi^2\)-Test vergleichen? Was ist die Voraussetzung dafür?

Ja, die Modelle lassen sich vergleichen, weil das Modell ohne Kovarianzen eine restringierte Version des Modells mit Kovarianzen ist. Es werden lediglich ein paar Parameter auf Null gesetzt. Das Modell fit_bfi_5F_noCV ist somit genestet in dem Modell fit_bfi_5F. Diese Nestung ist genau die Voraussetzung, um verschiedene Modelle mit einem \(\chi^2\)-Test zu vergleichen.

  1. Welches Modell passt besser auf die Daten?
anova(fit_bfi_5F_noCV, fit_bfi_5F)

Chi-Squared Difference Test

                 Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff Pr(>Chisq)
fit_bfi_5F      265 199800 200148 4165.5                                      
fit_bfi_5F_noCV 275 201255 201545 5639.7     1474.2 0.24517      10  < 2.2e-16
                   
fit_bfi_5F         
fit_bfi_5F_noCV ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Wir sehen hier, dass das Modell ohne Kovarianzen einen viel grösseren \(\chi^2\)-Wert hat. Dieser Unterschied ist signifikant. Das bedeutet, dass das Modell mit mehr Parameter signifikant besser auf die Daten passt, als das Modell mit weniger Parameter (ohne Kovarianzen).

Das ist nicht verwunderlich, wenn wir berücksichtigen, dass im Modell mit Kovarianzen alle Kovarianzen der latenten Variablen signifikant waren (der Modellvergleich ist äquivalent zu einem simultanen Signifikanztest für alle 10 Kovarianzparameter).