Begleitseite zum Buch "Einführung in die Pfadanalyse mit R/lavaan"

R-Code zum Buch, weiterführende Literaturhinweise

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


Auf dieser Seite finden Sie die Zusatzmaterialien zu meinem Buch zur Pfadanalyse mit R/lavaan:

Inhalt

  1. Inhaltsverzeichnis des Buchs
  2. Link zum Amazon Kindle Ebook
  3. R-Code aus dem Buch
  4. Weitere Literaturquellen zu den Ausblick-Themen
  5. Mein Beratungsangebot zur Pfadanalyse mit lavaan

1. Inhaltsverzeichnis des Buchs

1 Einführung
1.1 Überblick
1.2 Zusätzliche Online-Materialien zum Buch

2 Grundlagen
2.1 Warum sollten Sie eine Pfadanalyse durchführen?
2.2 Warum mit lavaan?
2.3 Pfadanalyse = Regression(en)
2.4 Was ist der Unterschied zwischen einem Pfadmodell und einem vollen SEM?
2.5 Was sind exogene und endogene Variablen?
2.6 Pfadmodell und Kausalität
2.7 Wie zeichnet man ein Pfadmodell?
2.7.1 Welche Elemente hat ein Pfadmodell in R/lavaan?
2.7.2 Disturbances in lavaan?

3 Ein Pfadmodell mit lavaan
3.1 In sechs Schritten mit dem Pfadmodell Ihre Hypothesen testen
3.2 Typische Struktur des lavaan Codes
3.3 Schritt 1: So definieren Sie ein Pfadmodell in R (Model specification)
3.3.1 Gerichtete Effekte
3.3.2 Kovarianzen/Korrelationen
3.3.3 Zusammengesetzte Effekte
3.3.4 Modellrestriktionen
3.3.5 Varianzen
3.3.6 Modellparameter fixieren
3.3.7 Weitere lavaan Definitionen
3.4 Schritt 2: Kann Ihr Modell überhaupt berechnet werden? (Model identification)
3.4.1 Was bedeutet Modellidentifikation?
3.4.2 Bedingungen für Modellidentifkation
3.4.3 Verbindung nur mit einem Pfeil
3.4.4 Keine Rückkoppelungen
3.5 Schritt 3: Schätzen Ihres Modells (Model estimation)
3.5.1 Voraussetzungen prüfen
3.5.2 Modellschätzung
3.5.3 Unterschiede ja nach SEM-Programm
3.5.4 Schätzung bei fehlenden Werten
3.5.5 Robuste Schätzverfahren
3.5.6 Schätzung erfolgreich?
3.6 Schritt 4: Passt Ihr Modell zu den Daten? (Model evaluation)
3.6.1 Globaler Fit: Modelltest
3.6.2 Globaler Fit: Fit-Indizes
3.6.3 Lokaler Fit: Residualmatrix
3.6.4 Lokaler Fit: Modifikationsindizes
3.6.5 Lokaler Fit: Zulässige Werte der Parameterschätzungen
3.7 Schritt 5: Wie können Sie Ihr Pfadmodell verbessern? (Model respecification)
3.7.1 Modifikationsindizes
3.7.2 Umsetzung von Modellverbesserungen
3.8 Schritt 6: So interpretieren Sie Ihr Modell (Model interpretation)
3.8.1 Unstandardisierte und standardisierte Ergebnisse
3.8.2 Absicherung mit robusten Verfahren

4 Weitere Themen
4.1 Unterscheiden sich zwei Effekte signifikant voneinander?
4.2 Indirekte Effekte im Pfadmodell prüfen (Mediation)
4.2.1 Definition indirekter Effekte
4.2.2 Vergleich von zwei indirekten Effekten
4.3 Moderationshypothesen im Pfadmodell prüfen (Interaktionen)
4.4 Ergebnisse der Pfadanalyse visualisieren

5 Ausblick
5.1 Ausblick: Cross-Lagged Panel Modelle
5.2 Ausblick: Längsschnitt-Mediationsmodelle
5.3 Ausblick: Dyadische Strukturen (APIM)
5.4 Ausblick: Mittelwertstrukturen
5.5 Ausblick: Mehrgruppen-Pfadmodell
5.6 Ausblick: Poweranalyse für Pfadmodelle
5.6.1 Monte-Carlo-Simulation
5.6.2 R-Package
5.6.3 Konventionelle Powerberechnung
5.7 Ausblick: Pfadanalyse nur mit Kovarianzmatrix

Statistik-Beratung für Pfadanalysen
Über den Autor
Literaturverzeichnis

2. Link zum Amazon Kindle Ebook

https://www.amazon.de/dp/B09NQ1PHVC/

3. R-Code aus dem Buch

Nachfolgend finden Sie die Codebeispiele aus dem Buch. Zur Erläuterung von Zweck und Verwendung des Codes siehe die entsprechenden Kapitel des Buchs.

3.2 Typische Struktur des lavaan Codes

model_1 <- '
AV ~ UV1 + UV2
'

model_fit <- sem(model = model_1,
data = meine_daten)

summary(model_fit)

3.3.1 Gerichtete Effekte

MED ~ UV1 + UV2
AV1 ~ MED
AV2 ~ MED

MED ~ a11 * UV1 + a21 * UV2
AV1 ~ b11 * MED
AV2 ~ b12* MED

3.3.2 Kovarianzen/Korrelationen

AV1 ~~ AV2

AV1 ~~ cov_AV1AV2 * AV2

AV1 ~~ 0 * AV2


Var1 ~~ Var2 + Var3 + Var4
Var2 ~~ Var3 + Var4
Var3 ~~ Var4

Var1 ~~ Var2
Var1 ~~ Var3
Var1 ~~ Var4
Var2 ~~ Var3
Var2 ~~ Var4
Var3 ~~ Var4

model_1 <- '
# Pfaddefinitionen
MED ~ a11 * UV1 + a21 * UV2
AV1 ~ b11 * MED
AV2 ~ b12* MED
# Kovarianzen
AV1 ~~ AV2
'

3.3.3 Zusammengesetzte Effekte

ind111 := a11 * b11

3.3.4 Modellrestriktionen

a11 == a21

MED ~ eq1 * UV1 + eq1 * UV2

a11 < a21

3.3.5 Varianzen

UV1 ~~ UV1

3.3.6 Modellparameter fixieren

UV1 ~~ 1 * UV1

UV1 ~~ var_UV1 * UV1 + 1 * UV1

3.3.7 Weitere lavaan Definitionen

Faktor1 =~ Ind1 + Ind2 + Ind3 + Ind4

AV1 ~ 1

3.5.1 Voraussetzungen prüfen

install.packages("MVN")

meine_daten_endogen <- meine_daten[c("MED", "AV1", "AV2")]
library(MVN)
mvn(data=meine_daten_endogen, mvnTest = "mardia", univariateTest = "SW")

library(MVN)
mvn(data=meine_daten_endogen, multivariatePlot = "qq")

attach(meine_daten)
plot(UV1, MED)
plot(UV2, MED)
plot(MED, AV1)
plot(MED, AV2)
detach(meine_daten)

library(MVN)
mvn(data = meine_daten, multivariateOutlierMethod = "quan")

reg.fit1 <- lm(data=meine_daten, MED ~ UV1 + UV2)
reg.fit2 <- lm(data=meine_daten, AV1 ~ MED)
reg.fit3 <- lm(data=meine_daten, AV2 ~ MED)

library(olsrr)
ols_plot_resid_lev(reg.fit1)
ols_plot_resid_lev(reg.fit2)
ols_plot_resid_lev(reg.fit3)

3.5.2 Modellschätzung

model_fit <- sem(model = model_1,
data = meine_daten)

3.5.3 Unterschiede ja nach SEM-Programm

model_fit_w <- sem(model = model_1,
data = meine_daten,
likelihood = "wishart")

3.5.4 Schätzung bei fehlenden Werten

model_fit_m <- sem(model = model_1,
data = meine_daten,
missing="ML")

model_fit_m <- sem(model = model_1,
data = meine_daten,
missing="ML",
fixed.x = FALSE)

3.5.5 Robuste Schätzverfahren

model_fit_rob <- sem(model = model_1,
data = meine_daten,
estimator = "MLM",
se="robust")

# Initialisierung des Zufallszahlengenerators
set.seed(12345)
# Aufruf der Schätzung mit Bootstrapping
model_fit_boot <- sem(model = model_1,
data = meine_daten,
test = "bollen.stine",
bootstrap = 5000,
se = "bootstrap")

3.5.6 Schätzung erfolgreich?

model_fit

3.6 Schritt 4: Passt Ihr Modell zu den Daten? (Model evaluation)

model_fit

summary(model_fit)

3.6.2 Globaler Fit: Fit-Indizes

summary(model_fit, fit.measures = TRUE)

fitMeasures(model_fit)

3.6.3 Lokaler Fit: Residualmatrix

lavResiduals(model_fit)

3.6.4 Lokaler Fit: Modifikationsindizes

modindices(model_fit, sort = TRUE)

3.7.1 Modifikationsindizes

modindices(model_fit, sort = TRUE)

mi <- modindices(model_fit)
mi[mi$mi > 10,]

3.7.2 Umsetzung von Modellverbesserungen

model_2 <- '
# Pfaddefinitionen
MED ~ a11 * UV1 + a21 * UV2
AV1 ~ b11 * MED + d11 * UV1
AV2 ~ b12* MED
# Kovarianzen
AV1 ~~ AV2
'

model_fit_2 <- sem(model = model_2,
data = meine_daten)
lavTestLRT(model_fit, model_fit_2)

summary(model_fit_2, fit.measures = TRUE)
mi <- modindices(model_fit_2)
mi[mi$mi > 10,]

3.8 Schritt 6: So interpretieren Sie Ihr Modell (Model interpretation)

summary(model_fit2, standardized = TRUE)

summary(model_fit2, standardized = TRUE, rsquare = TRUE)

parameterEstimates(model_fit, ci=TRUE)

4.1 Unterscheiden sich zwei Effekte signifikant voneinander?

model_u <- '
# Pfaddefinitionen
MED ~ a11 * UV1 + a21 * UV2
AV1 ~ b11 * MED + d11 * UV1
AV2 ~ b12* MED
# Kovarianzen
AV1 ~~ AV2
'

model_fit_u <- sem(model = model_u,
data = meine_daten)

model_b <- '
# Pfaddefinitionen
MED ~ a11 * UV1 + a21 * UV2
AV1 ~ b11 * MED + d11 * UV2
AV2 ~ b12* MED
# Kovarianzen
AV1 ~~ AV2
# Gleichheitsrestriktion
a11 == a21
'

model_fit_b <- sem(model = model_b,
data = meine_daten)

lavTestLRT(model_fit_u, model_fit_b)

4.2.1 Definition indirekter Effekte

model_med <- '
# Pfaddefinitionen
MED1 ~ a11 * UV1
MED2 ~ a12 * UV1 + a22 * UV2
AV1 ~ b11 * MED1 + b21 * MED2 + c11 * UV1
AV2 ~ b12 * MED1 + b22 * MED2
# Kovarianzen
AV1 ~~ AV2
MED1 ~~ MED2
# Partielle indirekte Effekte
pie_111 := a11 * b11
pie_121 := a12 * b21
pie_112 := a11 * b12
pie_122 := a12 * b22
pie_221 := a22 * b21
pie_222 := a22 * b22
# Totale indirekte Effekte
tie_11 := pie_111 + pie_121
tie_12 := pie_112 + pie_122
tie_21 := pie_221
tie_22 := pie_222
# Totale Effekte
te_11 := tie_11 + c11
te_12 := tie_12
te_21 := tie_21
te_22 := tie_22
'

# Startwert Zufallszahlengenerator
set.seed(12345)
# Aufruf der Schätzung mit Bootstrapping
model_fit_med <- sem(model = model_med,
data = meine_daten,
test = "bollen.stine",
bootstrap = 5000,
se = "bootstrap")

4.2.2 Vergleich von zwei indirekten Effekten

pie_111 == pie_121

lavTestLRT(model_fit_med, model_fit_med_b)

k_ind_11 := pie_111 - pie_121

tie_11 == c11

k_dir_ind_11 := tie_11 - c11

4.3 Moderationshypothesen im Pfadmodell prüfen (Interaktionen)

meine_daten$INT <- meine_daten$UV * meine_daten$MOD

model_mod <- '
# Pfaddefinitionen
MED ~ UV + MOD + INT
AV ~ MED + UV
'

model_mod <- '
# Pfaddefinitionen mit Labels
MED ~ a1 * UV + a2 * MOD + a3 * INT
AV ~ b1 * MED + c1 * UV
'

4.4 Ergebnisse der Pfadanalyse visualisieren

install.packages("tidySEM")

library(tidySEM)

graph_sem(model_fit)

layout_pfadmodell_1 <- get_layout("UV1", "","AV1",
"", "MED", "",
"UV2", "", "AV2",
rows=3)

graph_sem(model_fit, layout=layout_pfadmodell_1)

5.1 Ausblick: Cross-Lagged Panel Modelle

clp_model <- '
Var1_t2 ~ AR11 * Var1_t1 + CL21 * Var2_t1
Var2_t2 ~ AR22 * Var2_t1 + CL12 * Var1_t1
Var1_t2 ~~ Var2_t2
'

# Gleichheitsrestriktion zum Vergleich der cross-lagged Effekte
CL12 == CL21

5.2 Ausblick: Längsschnitt-Mediationsmodelle

med2_modell <- '
# Gerichtete Effekte
UV_t2 ~ UV_t1
MED_t2 ~ a* UV_t1 + MED_t1
AV_t2 ~ b * MED_t1 + AV_t1
# Kovarianzen
UV_t2 ~~ MED_t2
UV_t2 ~~ AV_t2
MED_t2 ~~ AV_t2
# Indirekter Effekt
ab := a * b
'

AV_t2 ~ b * MED_t1 + AV_t1 + c * UV_t1

5.3 Ausblick: Dyadische Strukturen (APIM)

# APIM
apim_model <- '
Y_M ~ AM * X_M + PW * X_W
Y_W ~ AW * X_W + PM * X_M
Y_M ~~ Y_W
'

5.4 Ausblick: Mittelwertstrukturen

# Multiple Regression als Pfadmodell
regressions_model <- '
AV ~ UV1 + UV2
AV ~ 1
'
model_fit_regr <- sem(model = regressions_model,
data = meine_daten)
summary(model_fit_regr)

# Multiple Regression
reg_fit<- lm(AV ~ UV1 + UV2, data = meine_daten)
summary(reg_fit)

# Intercepts anfordern für alle endogenen Variablen
model_fit <- sem(model = mein_modell,
data = meine_daten,
meanstructure = TRUE)

5.7 Ausblick: Pfadanalyse nur mit Kovarianzmatrix

model_fit <- sem(model = model_1,
sample.cov = meine_kovarianzmatrix,
sample.nobs = 500)

4. Weitere Literaturquellen zu den Ausblick-Themen

Cross-Lagged Panel Modelle und Längsschnitt-Mediationsmodelle

Die wesentliche Literatur zu diesem Thema betrifft Längsschnitt-SEM, jedoch kann man aus den Ausführungen auch wichtige Erkenntnisse für Längsschnitt-Pfadmodelle gewinnen – bestimmte Zusatzfragen beim SEM stellen sich dann einfach nur nicht, wie z.B. die longitudinale Messinvarianz.

Little, T. D. (2013). Longitudinal structural equation modeling. Guilford press.

Little, T. D., Preacher, K. J., Selig, J. P., & Card, N. A. (2007). New developments in latent variable panel analyses of longitudinal data. International Journal of Behavioral Development, 31(4), 357-365. https://doi.org/10.1177/0165025407077757

Newsom, J. T. (2015). Longitudinal structural equation modeling: A comprehensive introduction. Routledge.

Dyadische Strukturen (APIM)

Kamis, C., & West, J. S. (2021).Actor Partner Interdependence Model in R: The Mental and Physical Health of Spouses https://bigdata.duke.edu/projects/actor-partner-interdependence-model-r-mental-and-physical-health-spouses

Kashy, D. A., & Kenny, D. A. (1990). Analysis of family research designs: A model of interdependence. Communication Research, 17(4), 462-482. https://doi.org/10.1177/009365090017004004

Kenny, D. A., Kashy, D. A., & Cook, W. L. (2020). Dyadic data analysis. Guilford Publications.

Mehrgruppen-Pfadmodell

Rosseel, Y. (2021). lavaan Tutorial. https://lavaan.ugent.be/tutorial/groups.html

Poweranalyse für Pfadmodelle

Fritz, M. S., & MacKinnon, D. P. (2007). Required sample size to detect the mediated effect. Psychological Science, 18(3), 233-239. https://doi.org/10.1111/j.1467-9280.2007.01882.x

Moshagen, M. (2021). Power analysis for structural equation models: semPower manual. http://cran.uni-muenster.de/web/packages/semPower/vignettes/semPower.pdf

Muthén, L. K., & Muthén, B. O. (2002). How to use a Monte Carlo study to decide on sample size and determine power. Structural Equation Modeling, 9(4), 599-620. https://doi.org/10.1207/S15328007SEM0904_8
(Allerdings mit Beispielen in Mplus)

5. Mein Beratungsangebot zur Pfadanalyse mit lavaan

Sie führen für Ihre Masterarbeit oder Dissertation eine Pfadanalyse mit R durch und benötigen dafür kompetente Unterstützung?

Ich kann Sie in den verschiedenen Phasen Ihrer Pfadmodellierung mit dem lavaan Package beratend unterstützen:

  1. Model specification (Übersetzung Forschungsmodell in lavaan Code)
  2. Model identification
  3. Model estimation(Schätzung, Voraussetzungstest, robuste Verfahren)
  4. Model evaluation (Modelltest, Fit-Indizes)
  5. Model respecification (Modifikationsindizes)
  6. Model interpretation (unstandardisierte und standardisierte Lösung, R²)

Neben diesen grundlegenden Schritten einer Pfadanalyse mit R/lavaan kann eine Beratung aber beispielsweise auch betreffen:

  • Mediation/indirekte Effekte (partielle indirekte Effekte, totale indirekte Effekte, totale Effekte)
  • Moderation/Interaktionen
  • Visualisierung der Ergebnisse mit tidySEM
  • Vergleich von Pfadgewichten (Signifikanztest auf Unterschiede)
  • Fehlende Daten bei lavaan
  • Cross-Lagged-Panel (Längsschnitt)
  • Längsschnitt-Mediationsmodelle (2 Messzeitpunkte/3+ Messzeitpunkte)
  • .

Hier finden Sie Informationen zu meiner Statistik-Beratung für Studierende und Doktorandinnen/Doktoranden: Statistik-Beratung