SEM/CFA: z-Test oder Likelihood-Ratio-Test (Likelihood-Quotienten-Test)?

Arndt Regorz, Dipl. Kfm. & M.Sc. Psychologie, 22.04.2023

Häufig werden in SEM oder CFA die Teststatistiken aus den Outputtabellen (je nach Programm z.B. z-values, C.R./Critical ratios etc.) bei den Parameterschätzungen herangezogen, um zu prüfen, ob ein Parameter (z.B. Strukturpfad oder Kovarianz) signifikant ist. Auch werden die daraus resultierenden p-Werte häufig ebenfalls für die Frage der Signifikanz eines standardisierten Pfades bzw. einer Korrelation genutzt.

Allerdings ist das mathematisch problematisch, man kann so zu falschen und teilweise auch willkürlichen Ergebnissen kommen, da diese Teststatistiken von der Metrik und damit der Methode der Faktoridentifikation abhängen.

Als Alternative biete es sich an, stattdessen einen LR-Test durchzuführen zwischen zwei Modellen, einem vollen Modell und einem Modell, in dem der zu betrachtende Pfad bzw. die zu betrachtende Kovarianz auf Null gesetzt wird. Dieses Video-Tutorial zeigt an einem Beispiel mit R/lavaan, warum dieses Vorgehen i.d.R. das Besser ist.


Videotutorial


(Hinweis: Mit Anklicken des Videos wird ein Angebot des Anbieters YouTube genutzt.)



R-Code zum Tutorial

Hier finden Sie den R-Code, mit dem die Werte aus dem o.g. Video berechnet worden sind:

library(lavaan)

# 1 Testung Strukturparamter mit z-Test

# 1a Identif. über ersten Indikator jeweils

strukturmodell_1a <- '
# Faktorladungen Industrialisierung1960 =~ x1 + x2 + x3
Demokratie1960 =~ y1 + y2 + y3 + y4
Demokratie1965 =~ y5 + y6 + y7 + y8

# Strukturmodell/Regression
Demokratie1960 ~ Industrialisierung1960
Demokratie1965 ~ Demokratie1960 + Industrialisierung1960

#Kovarianzen
y1 ~~ y5
y2 ~~ y6
y3 ~~ y7
y4 ~~ y8
'

model_fit_1a <- sem(data = PoliticalDemocracy, model = strukturmodell_1a)

summary(model_fit_1a, fit.measures = TRUE, standardized = TRUE)

# 1b Identif. über zweiten Indikator jeweils

strukturmodell_1b <- '
# Faktorladungen
Industrialisierung1960 =~ NA * x1 + 1 * x2 + x3
Demokratie1960 =~ NA * y1 + 1 * y2 + y3 + y4
Demokratie1965 =~ NA * y5 + 1 * y6 + y7 + y8

# Strukturmodell/Regression
Demokratie1960 ~ Industrialisierung1960
Demokratie1965 ~ Demokratie1960 + Industrialisierung1960

#Kovarianzen
y1 ~~ y5
y2 ~~ y6
y3 ~~ y7
y4 ~~ y8
'

model_fit_1b <- sem(data = PoliticalDemocracy, model = strukturmodell_1b)

summary(model_fit_1b, fit.measures = TRUE, standardized = TRUE)

# 1c Faktorvarianzen gleich 1

strukturmodell_1c <- '
# Faktorladungen
Industrialisierung1960 =~ x1 + x2 + x3
Demokratie1960 =~ y1 + y2 + y3 + y4
Demokratie1965 =~ y5 + y6 + y7 + y8

# Strukturmodell/Regression
Demokratie1960 ~ Industrialisierung1960
Demokratie1965 ~ Demokratie1960 + Industrialisierung1960

#Kovarianzen
y1 ~~ y5
y2 ~~ y6
y3 ~~ y7
y4 ~~ y8
'

model_fit_1c <- sem(data = PoliticalDemocracy, model = strukturmodell_1c,
std.lv = TRUE)

summary(model_fit_1c, fit.measures = TRUE, standardized = TRUE)

# 2 Testung Strukturparamter mit LR-Test

# 2a Identif. über ersten Indikator jeweils

# Vergleichsmodell

strukturmodell_2a <- '
# Faktorladungen
Industrialisierung1960 =~ x1 + x2 + x3
Demokratie1960 =~ y1 + y2 + y3 + y4
Demokratie1965 =~ y5 + y6 + y7 + y8

# Strukturmodell/Regression
Demokratie1960 ~ Industrialisierung1960
Demokratie1965 ~ Demokratie1960 + 0 * Industrialisierung1960

#Kovarianzen
y1 ~~ y5
y2 ~~ y6
y3 ~~ y7
y4 ~~ y8
'

model_fit_2a <- sem(data = PoliticalDemocracy, model = strukturmodell_2a)

summary(model_fit_2a, fit.measures = TRUE, standardized = TRUE)

lavTestLRT(model_fit_1a, model_fit_2a)

# 2b Identif. über zweiten Indikator jeweils

strukturmodell_2b <- '
# Faktorladungen
Industrialisierung1960 =~ NA * x1 + 1 * x2 + x3
Demokratie1960 =~ NA * y1 + 1 * y2 + y3 + y4
Demokratie1965 =~ NA * y5 + 1 * y6 + y7 + y8

# Strukturmodell/Regression
Demokratie1960 ~ Industrialisierung1960
Demokratie1965 ~ Demokratie1960 + 0 *Industrialisierung1960

#Kovarianzen
y1 ~~ y5
y2 ~~ y6
y3 ~~ y7
y4 ~~ y8
'

model_fit_2b <- sem(data = PoliticalDemocracy, model = strukturmodell_2b)

summary(model_fit_2b, fit.measures = TRUE, standardized = TRUE)

lavTestLRT(model_fit_1b, model_fit_2b)

strukturmodell_2c <- '
# Faktorladungen
Industrialisierung1960 =~ x1 + x2 + x3
Demokratie1960 =~ y1 + y2 + y3 + y4
Demokratie1965 =~ y5 + y6 + y7 + y8

# Strukturmodell/Regression
Demokratie1960 ~ Industrialisierung1960
Demokratie1965 ~ Demokratie1960 + 0 * Industrialisierung1960

#Kovarianzen
y1 ~~ y5
y2 ~~ y6
y3 ~~ y7
y4 ~~ y8
'

model_fit_2c <- sem(data = PoliticalDemocracy, model = strukturmodell_2c,
std.lv = TRUE)

summary(model_fit_2c, fit.measures = TRUE, standardized = TRUE)

lavTestLRT(model_fit_1c, model_fit_2c)