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
- Inhaltsverzeichnis des Buchs
- Link zum Amazon Kindle Ebook
- R-Code aus dem Buch
- Weitere Literaturquellen zu den Ausblick-Themen
- 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:
- Model specification (Übersetzung Forschungsmodell in lavaan Code)
- Model identification
- Model estimation(Schätzung, Voraussetzungstest, robuste Verfahren)
- Model evaluation (Modelltest, Fit-Indizes)
- Model respecification (Modifikationsindizes)
- 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