Messmodelle in Strukturgleichungsmodellen

Methoden der empirischen Kommunikations- und Medienforschung

Marko Bachl

Freie Universität Berlin

Evaluation

Fragen zur Hausaufgabe?

Messmodelle in Strukturgleichungsmodellen

Agenda

  1. Einführung
  2. Beispieldaten
  3. Mittelwertindices und Cronbachs \(\alpha\)
  4. Messmodelle spezifizieren und beurteilen
  5. Messmodelle erweitern
  6. Kombination von Mess- und Strukturmodellen
  7. Fazit

Einführung

  • In den Sozialwissenschaften interessieren wir uns häufig für latente Konstrukte, die wir nicht direkt beobachten können oder die wir nicht direkt abfragen können.
  • Beispiele aus der Vorlesung: Information Overload (Van Erkel & Van Aelst, 2021), Attitude toward language (Vögele & Bachl, 2017), Censorship Endorsement (Kubin et al., 2025)
  • Wir messen daher häufig mehrere manifeste Indikatoren, die gemeinsam das Konstrukt abdecken sollen.
  • Kausale Betrachtung: Wir gehen davon aus, dass das Konstrukt die Indikatoren beeinflusst (reflektives Messmodell).
  • Psychometrische Skalenentwicklung ist ein eigenes Feld der Psychologie.
  • Wir beschäftigen uns hier nur mit einem Ausschnitt: Was machen wir, nachdem wir ein latentes Konstrukt mit mehreren Indikatoren gemessen haben?
  • Standardvorgehen: Bestimmen der internen Konsistenz und Indexbildung
  • Besser: Messmodelle in einem Strukturgleichungsmodell (Thema der heutigen Sitzung)

Beispieldaten

Daten der heutigen Sitzung

(Kubin et al., 2025)

Daten der heutigen Sitzung

  • Condition: Fact (0), Experience (1)
  • Harm: 3 Items, z.B. “causes harm”
  • Lie: 3 Items, z.B. “is a lie”
  • Censor: 4 Items, z.B. “censor her”
  • Behave: 1 Item, “willing to report to Twitter”
  • Alle Range 1-7
Condition M_Harm M_Lie M_Censor Behave
Fact 3.33 4.00 5.00 6
Fact 6.00 6.67 5.50 7
Fact 3.00 3.33 2.25 3
Experience 1.00 1.00 1.00 1
Experience 7.00 4.00 1.00 1
Experience 3.67 4.00 2.00 3


  • Wir verwenden diese Daten. Messmodelle sind nicht Teil der publizierten Analyse von Kubin et al. (2025)

Fragen?

Mittelwertindices und Cronbachs \(\alpha\)

Endorsement of Censorship

Morgan wants to widely share her [pro-life | pro-choice] views. To what extent would you …

  • censor her (Censor_1)
  • prevent her from sharing her views (Censor_2)
  • block her from telling others (Censor_3)
  • stop her from publishing articles (Censor_4)

1–7, very unwilling to very willing.

Censor_1 Censor_2 Censor_3 Censor_4
2 2 2 2
2 2 2 2
2 2 2 2
4 4 4 4
2 2 2 2
1 1 1 1
3 3 3 3
2 2 3 4
4 3 3 3
5 2 2 2

Korrelationen und Cronbachs \(\alpha\)

Standardvorgehen

  • Korrelationen zwischen den Items sollten hoch (und ähnlich) sein.
  • Cronbachs \(\alpha\) quantifiziert die Reliabilität einer Skala zwischen 0 und 1. Der Wert sollte größer als 0.7 sein (Daumenregel, umstritten).
  • Die Schätzung basiert auf der Annahme, dass alle Items für die Skala gleich wichtig sind. Diese Annahme wird in der Regel nicht geprüft.
Correlation Matrix (pearson-method)
Parameter Censor_4 Censor_3 Censor_2
Censor_1 0.87*** 0.88*** 0.91***
Censor_2 0.92*** 0.93***
Censor_3 0.93***

p-value adjustment method: Holm (1979)


Cronbachs \(\alpha\) [1] 0.9743875

Mittelwertindex

d |>
  select(starts_with("Censor_")) |>
  rowwise() |>
  mutate(M_Censor = mean(c(Censor_1, Censor_2, Censor_3, Censor_4))) |>
  ungroup() |>
  sample_n(size = 10)
Censor_1 Censor_2 Censor_3 Censor_4 M_Censor
2 2 2 2 2.00
4 3 3 2 3.00
2 2 2 2 2.00
2 2 2 2 2.00
3 5 6 5 4.75
1 1 1 1 1.00
5 5 3 4 4.25
5 4 4 5 4.50
2 2 2 2 2.00
2 2 2 2 2.00

Mittelwertindex

mutate(M_Censor = mean(c(Censor_1, Censor_2, Censor_3, Censor_4)))

 

Annahmen

  • Alle Indikatoren repräsentieren das latente Konstrukt gleich gut (= alle haben im Index dasselbe Gewicht).
  • Alle Indikatoren werden vollständig durch das latente Konstrukt erklärt (= es gibt keinen Messfehler).


  • Beide Annahmen werden in der Regel nicht überprüft.

Fragen?

Messmodelle spezifizieren und beurteilen

Latente Variablen

Sanjay Srivastava on Twitter (now deleted)

Messmodelle spezifizieren: Begriffe und Darstellung

  • Wir spezifizieren die latente Variable (Kreis, nicht beobachtet) als Ursache der manifesten Indikatoren (Viereck, beobachtet). Die latente Variable wird häufig auch Faktor genannt.
  • Wir benötigen mindestens drei (keine fit measures), besser mindestens vier Indikatoren für eine latente Variable.
  • Wir erhalten Faktorladungen und Residualvarianzen für die Items und Maße für die Passung des gesamten Modells.
    • Faktorladungen sind Regressionsgewichte, die den Effekt der latenten Variable auf das manifeste Item quantifizieren.
    • Residualvarianzen sind nicht durch die latente Variable erklärte Varianzen.
  • Die Items sind nicht direkt mit einander verbunden. Wir gehen davon aus, dass die gemeinsame Varianz der Items nur durch die latente Variable verursacht wird.
  • Technisch notwendiges Detail, inhaltlich unwichtig: Wir müssen die Varianz der latenten Variable oder eine Faktorladung fixieren, um die Skala zu identifizieren.

Umsetzung in {lavaan}

Censor_L <- "Censor =~ Censor_1 + Censor_2 + Censor_3 + Censor_4"
Censor_L_fit <- cfa(Censor_L, data = d, std.lv = TRUE, estimator = "MLR")
# std.lv = TRUE: Varianz der latenten Variable = 1
# estimator = "MLR" Robuste Maximum-Likelihood Schätzung

Standardisierte Koeffizienten

  • Die standardisierten Faktorladungen auf den Pfeilen von latenter Variable zu Indikatoren quantifizieren den Einfluss des latenten Konstrukts auf die Items. Sie liegen in der Regel zwischen \(-1\) und \(+1\).
  • Die standardisierte Residualvarianzen auf den runden Pfeilen unter den Indikatoren quantifizieren den nicht durch die latente Variable erklärten Varianzanteil. 1 minus dieser Wert = \(R^2\).
  • Die 1.00 und die gestrichelte Linie auf dem runden Pfeil über der latenten Variable zeigen, dass die Varianz der latente Variable auf 1 fixiert wurde, um die Skala des Modells zu identifizieren (technisch notwendiges Detail, inhaltlich unwichtig).

Faktorladungen

lhs op rhs est se z pvalue ci.lower ci.upper std.all
Censor =~ Censor_1 1.53 0.06 25.14 0 1.41 1.65 0.92
Censor =~ Censor_2 1.55 0.06 24.74 0 1.43 1.67 0.97
Censor =~ Censor_3 1.58 0.06 25.01 0 1.45 1.70 0.96
Censor =~ Censor_4 1.62 0.06 27.10 0 1.50 1.73 0.95


  • Die standardisierten Faktorladungen std.all quantifizieren den Einfluss des latenten Konstrukts auf die Items. Sie liegen in der Regel zwischen \(-1\) und \(+1\).
  • Der Betrag der Ladungen sollte hoch sein. Daumenregel (umstritten): größer als 0.7.
  • Es kann gewünscht sein, dass die Faktorladungen ähnlich hoch sind (\(\tau\)-äquivalentes Messmodell; siehe nächster Abschnitt).

Resdiualvarianzen

lhs op rhs est se z pvalue ci.lower ci.upper std.all
Censor_1 Censor_1 0.41 0.09 4.72 0.00 0.24 0.57 0.15
Censor_2 Censor_2 0.17 0.04 4.02 0.00 0.09 0.25 0.07
Censor_3 Censor_3 0.19 0.04 4.70 0.00 0.11 0.27 0.07
Censor_4 Censor_4 0.26 0.06 4.39 0.00 0.14 0.37 0.09
Censor Censor 1.00 0.00 1.00 1.00 1.00


  • Die standardisierten Resdiualvarianzen std.all den nicht durch die latente Variable erklärten Varianzanteil. 1 minus dieser Wert = \(R^2\). Sie liegen in der Regel zwischen \(0\) und \(1\).
  • Die Resdiualvarianzen sollten klein sein.
  • Es kann gewünscht sein, dass die Faktorladungen und die Residualvarianzen ähnlich sind (paralleles Messmodell; siehe nächster Abschnitt).

Reliabilität \(\omega\)

$Censor

Composite `Censor` is composed of observed variables:
    Censor_1, Censor_2, Censor_3, Censor_4
True-score variance is represented by common factor(s):
    Censor
Total variance of composite `Censor` determined from the unrestricted model.
The proportion attributable to "true" scores is its model-based estimate of reliability ("omega"):

[1] 0.975


  • \(\omega\) quantifiziert die Reliabilität der Messung der latenten Variable zwischen 0 und 1. Der Wert sollte größer als 0.7 sein (Daumenregel, umstritten).
  • Die Schätzung basiert auf den geschätzten Faktorladungen und damit nicht auf der Annahme, dass alle Items für die Skala gleich wichtig sind.

Modellpassung (Fit Measures)

                           
chisq.scaled          4.176
df.scaled             2.000
pvalue.scaled         0.124
rmsea.robust          0.102
rmsea.ci.lower.robust 0.000
rmsea.ci.upper.robust 0.241
srmr                  0.006
cfi.robust            0.996
  • \(\chi^2\)-Test: \(H_0\): Modell passt genau zu den Daten. Je kleiner, desto besser. Möglichst nicht statistisch signifikant, d.h., wir wollen nicht ablehnen, dass das Modell zu den Daten passt.
  • RMSEA: Abweichungen in der Residualmatrix pro df; Kleiner ist besser. Etablierter Cutoff \(\leq 0.06\) (Hu & Bentler, 1998)
  • SRMR: Abweichungen in der Residualmatrix; Kleiner ist besser. Etablierter Cutoff \(\leq 0.08\) (Hu & Bentler, 1998)
  • CFI: Vergleich mit Nullmodell; Größer ist besser. Etablierter Cutoff \(\geq 0.95\) (Hu & Bentler, 1998)
  • Hier: Passung des Modells gut bis grenzwertig bzw. nicht informativ (RMSEA)

Neue Entwicklung: Dynamische Cutoffs

  • Kritik an verbreiteten Empfehlungen (z.B. Hu & Bentler, 1998): Basieren auf Simulationsstudien, in denen bestenfalls ein ähnliches Modell mit ähnlichen Daten getestet wurde.
  • Mit modernen Computern können wir aber problemlos eine Simulationsstudie mir eigenen Modellen und Daten durchführen und daraus angepasste Kriterien ableiten.
  • McNeish & Wolf (2023): Dynamic fit index cutoffs mit R Paket {dynamic} und Web App.
  • Hier: Passung des Modells in Ordnung bis grenzwertig (RMSEA)
Your DFI cutoffs: 
            SRMR  RMSEA CFI  
Level-0     0.007 0.088 0.997
Specificity 95%   95%   95%  
                             
Level-1     0.007 0.089 0.997
Sensitivity 65%   72%   72%  

Empirical fit indices: 
 Chi-Square  df p-value   SRMR   RMSEA    CFI
      4.176   2   0.124  0.006   0.102  0.996

 Notes:
  -'Sensitivity' is % of hypothetically misspecified models correctly identified by cutoff in DFI simulation
  -Cutoffs with 95% sensitivity are reported when possible
  -If sensitivity is <50%, cutoffs will be supressed 

Modification Indices

lhs op rhs mi epc sepc.lv sepc.all sepc.nox
Censor_3 Censor_4 16.37 0.09 0.09 0.41 0.41
Censor_1 Censor_2 16.37 0.08 0.08 0.32 0.32
Censor_1 Censor_4 6.02 -0.05 -0.05 -0.17 -0.17
Censor_2 Censor_3 6.02 -0.05 -0.05 -0.30 -0.30
Censor_2 Censor_4 2.83 -0.04 -0.04 -0.18 -0.18
Censor_1 Censor_3 2.83 -0.04 -0.04 -0.13 -0.13


  • Die Modification Indices quantifizieren, wie sehr sich die Modellpassung verbessern würde, wenn wir diesen Parameter frei schätzen würden. Die Werte mi sind Differenzen in \(\chi^2\) (Betrag inhaltlich nicht interpretierbar; ab etwa 4 relevant).
  • Anpassung von Modellen auf Basis von Modification Indices kann hilfreich sein, sollte aber mit Theorie übereinstimmen. Das Verändern des Modells an einer Stelle kann wiederum fehlende Passung an anderen Stellen verursachen (v.a. in komplexeren Modellen).

Fragen?

Messmodelle erweitern

Arten von Messmodellen

  1. Paralleles Messmodell: Gleiche Faktorladungen und gleiche Residualvarianzen für alle Items = latente Variable beeinflusst alle Items gleichermaßen und Items werden zu gleichem Anteil erklärt. Items sind austauschbar (= wir könnten nur einen Teil der Items verwenden, um das gesamte Konstrukt zu erfassen).
  2. \(\tau\)-äquivalentes Messmodell: Gleiche Faktorladungen für alle Items = latente Variable beeinflusst alle Items gleichermaßen. Items sind gleichbedeutend. (= wir könnten mit Blick auf die Punktschätzer ungewichtete Indices verwenden).
  3. Kongenerisches Messmodell: Keine Restriktionen. Alle Ladungen und Resdiualvarianzen werden frei aus den Daten geschätzt.
  • Restriktionen werden auf Basis der nicht standardisierten Koeffizienten gesetzt.
  • Bedingungen können auch teilweise erfüllt werden (z.B. 5 von 6 Ladungen werden gleichgesetzt).
  • Angemessenes Modell wird auf Basis eines Modellvergleichs ausgewählt.

Umsetzung in {lavaan}

Kongenerisches Messmodell

Censor_L <- "Censor =~ Censor_1 + Censor_2 + Censor_3 + Censor_4"

\(\tau\)-äquivalentes Messmodell

Censor_L_tau <- "Censor =~ l * Censor_1 + l * Censor_2 + l * Censor_3 + l * Censor_4 # gleiche Ladung l für alle Items"

Paralleles Messmodell

Censor_L_parallel <- "
Censor =~ l * Censor_1 + l * Censor_2 + l * Censor_3 + l * Censor_4 # gleiche Ladung l für alle Items
Censor_1 ~~ v * Censor_1 # gleiche Varianz v für alle Items
Censor_2 ~~ v * Censor_2 # gleiche Varianz v für alle Items
Censor_3 ~~ v * Censor_3 # gleiche Varianz v für alle Items
Censor_4 ~~ v * Censor_4 # gleiche Varianz v für alle Items
"

→ Auf einen Blick

Kongenerisches Messmodell

lhs op rhs est se z pvalue ci.lower ci.upper std.all
Censor =~ Censor_1 1.53 0.06 25.14 0.00 1.41 1.65 0.92
Censor =~ Censor_2 1.55 0.06 24.74 0.00 1.43 1.67 0.97
Censor =~ Censor_3 1.58 0.06 25.01 0.00 1.45 1.70 0.96
Censor =~ Censor_4 1.62 0.06 27.10 0.00 1.50 1.73 0.95
Censor_1 Censor_1 0.41 0.09 4.72 0.00 0.24 0.57 0.15
Censor_2 Censor_2 0.17 0.04 4.02 0.00 0.09 0.25 0.07
Censor_3 Censor_3 0.19 0.04 4.70 0.00 0.11 0.27 0.07
Censor_4 Censor_4 0.26 0.06 4.39 0.00 0.14 0.37 0.09
Censor Censor 1.00 0.00 1.00 1.00 1.00

\(\tau\)-äquivalentes Messmodell

lhs op rhs label est se z pvalue ci.lower ci.upper std.all
Censor =~ Censor_1 l 1.57 0.06 27.01 0.00 1.46 1.68 0.93
Censor =~ Censor_2 l 1.57 0.06 27.01 0.00 1.46 1.68 0.97
Censor =~ Censor_3 l 1.57 0.06 27.01 0.00 1.46 1.68 0.96
Censor =~ Censor_4 l 1.57 0.06 27.01 0.00 1.46 1.68 0.95
Censor_1 Censor_1 0.40 0.09 4.70 0.00 0.23 0.57 0.14
Censor_2 Censor_2 0.16 0.04 4.16 0.00 0.09 0.24 0.06
Censor_3 Censor_3 0.20 0.04 4.88 0.00 0.12 0.28 0.07
Censor_4 Censor_4 0.27 0.06 4.49 0.00 0.15 0.38 0.10
Censor Censor 1.00 0.00 1.00 1.00 1.00

Paralleles Messmodell

lhs op rhs label est se z pvalue ci.lower ci.upper std.all
Censor =~ Censor_1 l 1.57 0.06 27.45 0.00 1.46 1.68 0.95
Censor =~ Censor_2 l 1.57 0.06 27.45 0.00 1.46 1.68 0.95
Censor =~ Censor_3 l 1.57 0.06 27.45 0.00 1.46 1.68 0.95
Censor =~ Censor_4 l 1.57 0.06 27.45 0.00 1.46 1.68 0.95
Censor_1 Censor_1 v 0.26 0.03 7.93 0.00 0.19 0.32 0.10
Censor_2 Censor_2 v 0.26 0.03 7.93 0.00 0.19 0.32 0.10
Censor_3 Censor_3 v 0.26 0.03 7.93 0.00 0.19 0.32 0.10
Censor_4 Censor_4 v 0.26 0.03 7.93 0.00 0.19 0.32 0.10
Censor Censor 1.00 0.00 1.00 1.00 1.00

Auf einen Blick

Kongenerisch

\(\tau\)-äquivalent

Parallel

Modellvergleich

################### Nested Model Comparison #########################

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan->unknown():  
   lavaan NOTE: The "Chisq" column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a 
   function of two standard (not robust) statistics.

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)   
Censor_L_fit           2 3769.2 3801.1 15.756                                          
Censor_L_tau_fit       5 3768.9 3788.8 21.432     5.5385 0.046737       3   0.136354   
Censor_L_parallel_fit  8 3817.7 3825.6 76.219    12.8183 0.187709       3   0.005046 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

####################### Model Fit Indices ###########################
                      rmsea.robust  srmr cfi.robust
Censor_L_fit                 .102  .006†     0.996†
Censor_L_tau_fit             .074† .028      0.995 
Censor_L_parallel_fit        .129  .031       .977 

################## Differences in Fit Indices #######################
                                         rmsea.robust  srmr cfi.robust
Censor_L_tau_fit - Censor_L_fit                -0.028 0.022     -0.001
Censor_L_parallel_fit - Censor_L_tau_fit        0.055 0.003     -0.018

Modellvergleich

  • In diesem Fall könnten wir Argumente für das \(\tau\)-äquivalente oder das kongenerische Messmodell finden.
  • Das parallele Messmodell passt deutlich weniger gut zu den Daten.

Fragen?

Invarianz über Gruppen

Frage: Misst das Modell in allen Gruppen das gleiche?

  1. Configural Invariance: Gleiche Faktorstruktur in allen Gruppen
  2. Metric Invariance: Gleiche Faktorladungen in allen Gruppen; Voraussetzung für den Vergleich von Strukturmodellen zwischen den Gruppen
  3. Scalar Invariance: Gleiche Intercepts der Items in allen Gruppen; Voraussetzung für den Vergleich von Mittelwerten zwischen den Gruppen
  • Wichtig unter anderem bei ländervergleichenden (Messen meine Instrumente in allen Sprachen/Kulturen dasselbe?), altersvergleichenden (Verstehen alle Altersgruppe die Items gleich?) oder experimentellen (Verändert das Treatment die Messung des Outcome?) Studien.

  • Obwohl alle verstehen, warum das wichtig wäre, wird es viel zu selten geprüft.

  • Welche Formen der Invarianz wir annehmen dürfen, wird auf Basis eines Modellvergleichs bestimmt.

  • Beispiel: Messinvarianz nach Treatment (experience, facts)

Configural Invariance

Facts

lhs op rhs group est ci.lower ci.upper std.all
Censor =~ Censor_1 1 1.63 1.47 1.79 0.92
Censor =~ Censor_2 1 1.68 1.51 1.84 0.97
Censor =~ Censor_3 1 1.73 1.57 1.90 0.95
Censor =~ Censor_4 1 1.73 1.58 1.89 0.94
Censor_1 ~1 1 3.07 2.82 3.32 1.73
Censor_2 ~1 1 2.86 2.62 3.11 1.65
Censor_3 ~1 1 2.93 2.68 3.19 1.61
Censor_4 ~1 1 3.04 2.78 3.30 1.65
Censor ~1 1 0.00 0.00 0.00 0.00

Experience

lhs op rhs group est ci.lower ci.upper std.all
Censor =~ Censor_1 2 1.33 1.16 1.50 0.92
Censor =~ Censor_2 2 1.35 1.18 1.52 0.97
Censor =~ Censor_3 2 1.31 1.14 1.48 0.97
Censor =~ Censor_4 2 1.38 1.21 1.56 0.97
Censor_1 ~1 2 2.34 2.14 2.54 1.62
Censor_2 ~1 2 2.24 2.04 2.43 1.61
Censor_3 ~1 2 2.24 2.05 2.42 1.66
Censor_4 ~1 2 2.26 2.06 2.46 1.58
Censor ~1 2 0.00 0.00 0.00 0.00

Metric Invariance

Facts

lhs op rhs group est ci.lower ci.upper std.all
Censor =~ Censor_1 1 1.66 1.51 1.80 0.92
Censor =~ Censor_2 1 1.69 1.54 1.84 0.97
Censor =~ Censor_3 1 1.68 1.53 1.84 0.95
Censor =~ Censor_4 1 1.74 1.59 1.90 0.94
Censor_1 ~1 1 3.07 2.82 3.32 1.71
Censor_2 ~1 1 2.86 2.62 3.11 1.64
Censor_3 ~1 1 2.93 2.68 3.19 1.65
Censor_4 ~1 1 3.04 2.78 3.30 1.64
Censor ~1 1 0.00 0.00 0.00 0.00

Experience

lhs op rhs group est ci.lower ci.upper std.all
Censor =~ Censor_1 2 1.66 1.51 1.80 0.92
Censor =~ Censor_2 2 1.69 1.54 1.84 0.97
Censor =~ Censor_3 2 1.68 1.53 1.84 0.97
Censor =~ Censor_4 2 1.74 1.59 1.90 0.97
Censor_1 ~1 2 2.34 2.14 2.54 1.64
Censor_2 ~1 2 2.24 2.04 2.43 1.62
Censor_3 ~1 2 2.24 2.05 2.42 1.64
Censor_4 ~1 2 2.26 2.06 2.46 1.58
Censor ~1 2 0.00 0.00 0.00 0.00

Scalar Invariance

Facts

lhs op rhs group est ci.lower ci.upper std.all
Censor =~ Censor_1 1 1.67 1.52 1.81 0.92
Censor =~ Censor_2 1 1.68 1.53 1.83 0.97
Censor =~ Censor_3 1 1.69 1.53 1.84 0.95
Censor =~ Censor_4 1 1.75 1.60 1.91 0.94
Censor_1 ~1 1 3.04 2.80 3.28 1.69
Censor_2 ~1 1 2.90 2.66 3.15 1.67
Censor_3 ~1 1 2.93 2.68 3.18 1.65
Censor_4 ~1 1 2.99 2.74 3.25 1.61
Censor ~1 1 0.00 0.00 0.00 0.00

Experience

lhs op rhs group est ci.lower ci.upper std.all
Censor =~ Censor_1 2 1.67 1.52 1.81 0.92
Censor =~ Censor_2 2 1.68 1.53 1.83 0.97
Censor =~ Censor_3 2 1.69 1.53 1.84 0.97
Censor =~ Censor_4 2 1.75 1.60 1.91 0.97
Censor_1 ~1 2 3.04 2.80 3.28 2.13
Censor_2 ~1 2 2.90 2.66 3.15 2.11
Censor_3 ~1 2 2.93 2.68 3.18 2.14
Censor_4 ~1 2 2.99 2.74 3.25 2.09
Censor ~1 2 -0.41 -0.58 -0.24 -0.52

Modellvergleich

################### Nested Model Comparison #########################

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan->unknown():  
   lavaan NOTE: The "Chisq" column contains standard test statistics, not the robust test that should be reported per model. A robust difference test is a 
   function of two standard (not robust) statistics.

                    Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
Censor_L_config_fit  4 3674.5 3770.2 16.368                                       
Censor_L_metric_fit  7 3671.9 3755.5 19.689     3.2173 0.019407       3     0.3593
Censor_L_scalar_fit 10 3670.8 3742.6 24.668     4.7468 0.055470       3     0.1913

####################### Model Fit Indices ###########################
                    rmsea.robust  srmr cfi.robust
Censor_L_config_fit        .043  .005†     0.999†
Censor_L_metric_fit        .035† .018      0.999 
Censor_L_scalar_fit        .042  .021      0.998 

################## Differences in Fit Indices #######################
                                          rmsea.robust  srmr cfi.robust
Censor_L_metric_fit - Censor_L_config_fit       -0.008 0.013      0.000
Censor_L_scalar_fit - Censor_L_metric_fit        0.007 0.003     -0.001

Modellvergleich

  • In diesem Fall finden wir ausreichende Evidenz für skalare Invarianz der latenten Variable Endorsement of Censorship über die Treatment-Gruppen.
  • Ob Personen die Argumentation mit Fakten oder mit Erfahrung gesehen haben, beeinflusst die Messung nicht wesentlich. Wir dürfen Mittelwerte im Outcome zwischen den Gruppen vergleichen.

Fragen?

Messmodelle erweitern

Mehrere Messmodelle gemeinsam testen

  • Häufig wollen wir nicht nur die Messung eines einzelnen Konstrukts untersuchen, sondern auch sehen, wie sie sich zueinander verhalten.
  • Wir wollen beispielsweise sicherstellen, dass die Items jeweils nur von einer latenten Variable beeinflusst werden (keine sogenannten cross loadings).
  • In der Psychometrie: Wir wollen die Faktorstruktur eines Konstruktes bestimmen (z.B. Big Five Persönlichkeitsmerkmale)
  • Beispiel: Messen Harm und Lie unterschiedliche Konstrukte (ja, aber als Beispiel ok)

Messung von Harm und Lie

Harm: What Morgan tells others on Twitter …

  • causes harm (Harm_1)
  • is dangerous (Harm_2)
  • leads to suffering (Harm_3)

Lie: What Morgan tells others on Twitter …

  • is false (Lie_1)
  • is wrong (Lie_2)
  • is a lie (Lie_3)

1–7, strongly disagree to strongly agree.

Messmodelle von Harm und Lie

Harm_Lie_L <- "
# Konstrukte
Harm =~ Harm_1 + Harm_2 + Harm_3
Lie =~ Lie_1 + Lie_2 + Lie_3

# Korrelation zwischen Konstrukten
Harm ~~ Lie
"
Harm_Lie_L_fit <- cfa(Harm_Lie_L, data = d, std.lv = TRUE, estimator = "MLR")

Messmodelle von Harm und Lie: Parameter

Messmodelle von Harm und Lie: Parameter

lhs op rhs est se z pvalue ci.lower ci.upper std.all
Harm =~ Harm_1 1.68 0.05 33.64 0 1.59 1.78 0.96
Harm =~ Harm_2 1.72 0.05 35.28 0 1.62 1.81 0.96
Harm =~ Harm_3 1.62 0.06 27.85 0 1.51 1.73 0.91
Lie =~ Lie_1 1.62 0.05 31.67 0 1.52 1.72 0.96
Lie =~ Lie_2 1.59 0.06 28.96 0 1.49 1.70 0.93
Lie =~ Lie_3 1.57 0.06 28.60 0 1.47 1.68 0.93
Harm Lie 0.59 0.04 13.57 0 0.51 0.68 0.59
  • Die Faktorladungen beider latenter Variablen sehen sehr gut aus.
  • Die beiden latenten Variablen korrelieren zwar deutlich miteinander. Sie sind aber nicht identisch.

Messmodelle von Harm und Lie: Reliabilität \(\omega\)

$Harm

Composite `Harm` is composed of observed variables:
    Harm_1, Harm_2, Harm_3
True-score variance is represented by common factor(s):
    Harm
Total variance of composite `Harm` determined from the unrestricted model.
The proportion attributable to "true" scores is its model-based estimate of reliability ("omega"):

[1] 0.958

$Lie

Composite `Lie` is composed of observed variables:
    Lie_1, Lie_2, Lie_3
True-score variance is represented by common factor(s):
    Lie
Total variance of composite `Lie` determined from the unrestricted model.
The proportion attributable to "true" scores is its model-based estimate of reliability ("omega"):

[1] 0.957


  • \(\omega\) quantifiziert die Reliabilität einer Skala zwischen 0 und 1. Der Wert sollte größer als 0.7 sein (Daumenregel, umstritten). Die Schätzung basiert auf den geschätzten Faktorladungen und damit nicht auf der Annahme, dass alle Items für die Skala gleich wichtig sind.

Messmodelle von Harm und Lie: Fit

                            
chisq.scaled          14.072
df.scaled              8.000
pvalue.scaled          0.080
rmsea.robust           0.048
rmsea.ci.lower.robust  0.000
rmsea.ci.upper.robust  0.089
srmr                   0.014
cfi.robust             0.997
  • \(\chi^2\)-Test: \(H_0\): Modell passt genau zu den Daten. Je kleiner, desto besser. Möglichst nicht statistisch signifikant, d.h., wir wollen nicht ablehnen, dass das Modell zu den Daten passt.
  • RMSEA: Abweichungen in der Residualmatrix pro df; Kleiner ist besser. Etablierter Cutoff \(\leq 0.06\) (Hu & Bentler, 1998)
  • SRMR: Abweichungen in der Residualmatrix; Kleiner ist besser. Etablierter Cutoff \(\leq 0.08\) (Hu & Bentler, 1998)
  • CFI: Vergleich mit Nullmodell; Größer ist besser. Etablierter Cutoff \(\geq 0.95\) (Hu & Bentler, 1998)
  • Hier: Passung des Modells gut bis grenzwertig bzw. nicht informativ (RMSEA)

Messmodelle von Harm und Lie: Fit

Your DFI cutoffs: 
            SRMR  RMSEA CFI   Magnitude
Level-0     0.018 0.049 0.997 NONE     
Specificity 95%   95%   95%            
                                       
Level-1     0.02  0.07  0.995 0.138    
Sensitivity 95%   95%   95%            

Empirical fit indices: 
 Chi-Square  df p-value   SRMR   RMSEA    CFI
     14.072   8    0.08  0.014   0.048  0.997

 Notes:
  -'Sensitivity' is % of hypothetically misspecified models correctly identified by cutoff in DFI simulation
  -Cutoffs with 95% sensitivity are reported when possible
  -If sensitivity is <50%, cutoffs will be supressed 

Messmodelle von Harm und Lie

  • Alle Analysen zu Arten von Messmodellen und Invarianz über Gruppen sollten auch für diese Variablen durchgeführt werden.
  • Da beide Konstrukte nur mit je drei Indikatoren gemessen wurden, ist das nur in gemeinsamen Modellen möglich. Die Modellpassung des nicht eingeschränkten Modells kann nicht bestimmt werden.
  • Ausgabe:
                        
chisq.scaled           0
df.scaled              0
pvalue.scaled         NA
rmsea.robust           0
rmsea.ci.lower.robust  0
rmsea.ci.upper.robust  0
srmr                   0
cfi.robust            NA

Modification Indices

lhs op rhs mi epc sepc.lv sepc.all sepc.nox
Lie_1 Lie_3 6.18 0.21 0.21 0.68 0.68
Harm =~ Lie_2 6.18 0.12 0.12 0.07 0.07
Harm_2 Lie_3 5.74 0.06 0.06 0.18 0.18
Harm_2 Lie_1 5.67 -0.05 -0.05 -0.20 -0.20
Harm_1 Lie_3 4.26 -0.05 -0.05 -0.15 -0.15
Harm_3 Lie_1 3.21 0.05 0.05 0.13 0.13


  • Cross loading: Lie_2 (“is wrong”) würde gerne auch etwas zur latenten Variable Harm beitragen.

Fragen?

Kombination von Mess- und Strukturmodellen

Mediationsmodell mit Mittelwertindices

mediation_I <- "
# Modelle
# Mediator 1: Harm
M_Harm ~ a1 * Condition
# Mediator 2: False
M_Lie ~ a2 * Condition
# aV: Endorsement of Censorship
M_Censor ~ c_ * Condition + b1 * M_Harm + b2 * M_Lie
# Kovarianz zwischen Mediatoren
M_Harm ~~ M_Lie

# Effekte
# Indirekte Effekte
indirect_harm := a1 * b1
indirect_lie := a2 * b2

# Direkter Effekt
direct := c_

# Totaler Effekt
total := direct + indirect_harm + indirect_lie
"

Mediationsmodell mit Mittelwertindices

lhs op rhs label est se z pvalue ci.lower ci.upper std.all
M_Harm ~ Condition a1 -0.81 0.17 -4.89 0.00 -1.14 -0.49 -0.24
M_Lie ~ Condition a2 -1.55 0.14 -10.77 0.00 -1.83 -1.27 -0.48
M_Censor ~ Condition c_ -0.20 0.17 -1.23 0.22 -0.53 0.12 -0.06
M_Censor ~ M_Harm b1 0.21 0.05 4.09 0.00 0.11 0.31 0.23
M_Censor ~ M_Lie b2 0.22 0.06 3.45 0.00 0.09 0.34 0.22
indirect_harm := a1*b1 indirect_harm -0.17 0.05 -3.16 0.00 -0.28 -0.07 -0.05
indirect_lie := a2*b2 indirect_lie -0.33 0.10 -3.27 0.00 -0.53 -0.13 -0.11
direct := c_ direct -0.20 0.17 -1.23 0.22 -0.53 0.12 -0.06
total := direct+indirect_harm+indirect_lie total -0.71 0.16 -4.57 0.00 -1.02 -0.41 -0.22

Mediationsmodell mit latenten Variablen

Einfaches Modell ohne Restriktionen; ginge besser, siehe oben.

mediation_L <- "
# Konstrukte
Harm =~ Harm_1 + Harm_2 + Harm_3
Lie =~ Lie_1 + Lie_2 + Lie_3
Censor =~ Censor_1 + Censor_2 + Censor_3 + Censor_4

# Korrelation zwischen Konstrukten
Harm ~~ Lie

# Modelle
# Mediator 1: Harm
Harm ~ a1 * Condition
# Mediator 2: False
Lie ~ a2 * Condition
# aV: Endorsement of Censorship
Censor ~ c_ * Condition + b1 * Harm + b2 * Lie
# Effekte
# Indirekte Effekte
indirect_harm := a1 * b1
indirect_lie := a2 * b2

# Direkter Effekt
direct := c_

# Totaler Effekt
total := direct + indirect_harm + indirect_lie
"

Mediationsmodell mit latenten Variablen

lhs op rhs label est se z pvalue ci.lower ci.upper std.all
Harm =~ Harm_1 1.00 0.00 1.00 1.00 0.96
Harm =~ Harm_2 1.02 0.02 49.05 0.00 0.98 1.06 0.96
Harm =~ Harm_3 0.96 0.03 37.11 0.00 0.91 1.01 0.91
Lie =~ Lie_1 1.00 0.00 1.00 1.00 0.96
Lie =~ Lie_2 0.98 0.02 44.56 0.00 0.94 1.03 0.93
Lie =~ Lie_3 0.97 0.02 47.58 0.00 0.93 1.01 0.93
Censor =~ Censor_1 1.00 0.00 1.00 1.00 0.92
Censor =~ Censor_2 1.01 0.02 40.72 0.00 0.96 1.06 0.97
Censor =~ Censor_3 1.03 0.03 34.33 0.00 0.97 1.09 0.96
Censor =~ Censor_4 1.06 0.03 38.01 0.00 1.00 1.11 0.95
Harm ~ Condition a1 -0.83 0.17 -4.95 0.00 -1.16 -0.50 -0.25
Lie ~ Condition a2 -1.57 0.15 -10.72 0.00 -1.86 -1.29 -0.49
Censor ~ Condition c_ -0.18 0.16 -1.07 0.28 -0.50 0.15 -0.06
Censor ~ Harm b1 0.23 0.06 4.04 0.00 0.12 0.34 0.25
Censor ~ Lie b2 0.20 0.07 3.03 0.00 0.07 0.33 0.21
indirect_harm := a1*b1 indirect_harm -0.19 0.06 -3.16 0.00 -0.31 -0.07 -0.06
indirect_lie := a2*b2 indirect_lie -0.32 0.11 -2.91 0.00 -0.53 -0.10 -0.10
direct := c_ direct -0.18 0.16 -1.07 0.28 -0.50 0.15 -0.06
total := direct+indirect_harm+indirect_lie total -0.68 0.15 -4.49 0.00 -0.98 -0.38 -0.22

Vergleich

Mittelwertindices

label est ci.lower ci.upper std.all
a1 -0.81 -1.14 -0.49 -0.24
a2 -1.55 -1.83 -1.27 -0.48
c_ -0.20 -0.53 0.12 -0.06
b1 0.21 0.11 0.31 0.23
b2 0.22 0.09 0.34 0.22
indirect_harm -0.17 -0.28 -0.07 -0.05
indirect_lie -0.33 -0.53 -0.13 -0.11
direct -0.20 -0.53 0.12 -0.06
total -0.71 -1.02 -0.41 -0.22

Latente Variablen

label est ci.lower ci.upper std.all
a1 -0.83 -1.16 -0.50 -0.25
a2 -1.57 -1.86 -1.29 -0.49
c_ -0.18 -0.50 0.15 -0.06
b1 0.23 0.12 0.34 0.25
b2 0.20 0.07 0.33 0.21
indirect_harm -0.19 -0.31 -0.07 -0.06
indirect_lie -0.32 -0.53 -0.10 -0.10
direct -0.18 -0.50 0.15 -0.06
total -0.68 -0.98 -0.38 -0.22
  • Hier macht es keinen Unterschied, da die Messung sehr gut funktioniert hat. Das wissen wir aber nur, da wir die zusätzlichen Analysen durchgeführt haben: Mehr Vertrauen in die Ergebnisse :-)

Fragen?

Fazit

Fazit

  • Die Messung von latenten Variablen mit mehreren Items ist in vielen Studiendesigns gute Praxis und wird auch häufig umgesetzt. Häufig werden die Indikatoren direkt zu Indices zusammengefasst, ohne dass die Messung näher untersucht wird.
  • Reflektive Messmodelle gehen davon aus, dass eine latente Variable die manifesten Indikatoren beeinflusst. In Strukturgleichungsmodellen können wir diese latenten Variablen schätzen.
  • Durch Inspektion und Vergleich von Messmodellen können wir viel über die Messung lernen. Wir können informierter entscheiden, welche Analysen sich mit diesen Messungen durchführen lassen und welche Grenzen der Interpretation gesetzt sind.
  • Durch das Verwenden von latenten Variablen in Strukturmodellen können wir die impliziten Annahmen der Indexbildung explizit machen oder von ihnen abweichen.
  • Als Fach setzten wir Messmodelle zu selten ein; viele Analysen wären informativer, wenn wir unsere Messungen ernst nehmen und entsprechend modellieren würden.

Fragen?

Hausaufgabe

  1. Vollziehen Sie die Analysen nach, deren Ausgaben wir in der Vorlesung besprochen haben.

Nächste Einheit

Noch nicht entschieden

Danke

Marko Bachl

Literatur

Hu, L., & Bentler, P. M. (1998). Fit indices in covariance structure modeling: Sensitivity to underparameterized model misspecification. Psychological Methods, 3(4), 424–453. https://doi.org/10/c49
Kubin, E., Sikorski, C. von, & Gray, K. (2025). Political censorship feels acceptable when ideas seem harmful and false. Political Psychology, 46(2), 279–299. https://doi.org/10/g9fgdz
McNeish, D., & Wolf, M. G. (2023). Dynamic fit index cutoffs for confirmatory factor analysis models. Psychological Methods, 28(1), 61–88. https://doi.org/10/gm79hm
Van Erkel, P. F. A., & Van Aelst, P. (2021). Why don’t we learn from social media? Studying effects of and mechanisms behind social media news use on general surveillance political knowledge. Political Communication, 38(4), 407–425. https://doi.org/10/ghk94s
Vögele, C., & Bachl, M. (2017). Der Einfluss des Dialekts auf die Bewertung von Politikern. SCM Studies in Communication and Media, 6(2), 196–215. https://doi.org/10/ghhzhd