tidySEM für R/lavaan

Arndt Regorz, Dipl. Kfm. & MSc. Psychologie, 02.11.2021

Dieses ist eine Begleitseite zum Video-Tutorial über tidySEM zum Plotten von SEM, CFA und Pfadanalyse mit lavaan



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


R-Code aus dem Video-Tutorial

Hier ist der gesamte Code aus dem Video-Tutorial zu tidySEM:

library(lavaan)
library(tidySEM)
library(dplyr)
library(ggplot2)


# 1. Zeichnen einer konfirmatorischen Faktorenanalyse (CFA)

# CFA Modell mit lavaan
Holzinger_model <- '
visual =~ NA * x1 + x2 + x3
textual =~ NA * x4 + x5 + x6
speed =~ NA *x7 + x8 + x9
visual ~~ 1 * visual
textual ~~ 1 * textual
speed ~~ 1 * speed
'

cfa_fit <- cfa(Holzinger_model, data=HolzingerSwineford1939)

summary(cfa_fit)


# 1.1 Graphik ohne Anpassung
graph_sem(model = cfa_fit)


# 1.2 Layout anpassen
cfa_layout <- get_layout("", "visual", "","","textual","","","speed", "",
"x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9",
rows = 2)

# Grafik mit Anpassung
graph_sem(model = cfa_fit, layout = cfa_layout)


# 1.3 Layout anpassen 2
cfa_layout2 <- get_layout("", "", "visual","","textual","","speed","", "",
"x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9",
rows = 2)

# Grafik mit Anpassung 2
graph_sem(model = cfa_fit, layout = cfa_layout2)



# 2. Zeichnen eines vollen SEM

political_dem_model <- '
# Messmodell
ind60 =~ x1 + x2 + x3
dem60 =~ y1 + y2 + y3 + y4
dem65 =~ y5 + y6 + y7 + y8
# Direkte Pfade
dem60 ~ ind60
dem65 ~ dem60 + ind60
# Korrelierte Residuen
y1 ~~ y5
y2 ~~ y4 + y6
y3 ~~ y7
y4 ~~ y8
y6 ~~ y8
'

sem_fit <- sem(political_dem_model, data = PoliticalDemocracy)
summary(sem_fit)


# 2.1 Anpassen mit Tabellenkalkulation (Win)
# Zunächst im Excel oder Calc das Layout anlegen,
# dort in die Zwischenablage kopieren
# Dann aus der Zwischenablage in sem_layout lesen:
sem_layout <- read.table("clipboard", sep = "\t")

# Der Befehl ist anders für den Mac!:
# sem_layout <- read.table(pipe("pbpaste"), sep="\t")

# Grafik volles SEM mit Anpassung (von Tabellenkalkulation)
graph_sem(model = sem_fit, layout = sem_layout)


# 2.2 SEM nur mit latenten Konstrukten

sem_layout2 <- get_layout("", "dem60", "",
"","","",
"ind60","","dem65",
rows = 3)

# Grafik SEM nur mit latenten Konstrukten
graph_sem(model = sem_fit, layout = sem_layout2)



# 3. Grafik Pfadmodell

# Skalen berechnen
attach(PoliticalDemocracy)
PoliticalDemocracy$s_dem60 <- rowMeans(data.frame(y1, y2, y3, y4))
PoliticalDemocracy$s_dem65 <- rowMeans(data.frame(y5, y6, y7, y8))
PoliticalDemocracy$s_ind60 <- rowMeans(data.frame(x1, x2, x3))
detach(PoliticalDemocracy)

political_dem_path <- '
# direct paths
s_dem60 ~ s_ind60
s_dem65 ~ s_dem60 + s_ind60
'

path_fit <- sem(political_dem_path, data = PoliticalDemocracy)
summary(path_fit)


# 3.1 Pfadmodell anpassen

path_layout <- get_layout("", "s_dem60", "",
"","","",
"s_ind60","","s_dem65",
rows = 3)

# Grafik Pfadmodell mit Anpassung
graph_sem(model = path_fit, layout = path_layout)



# 4. Andere Anpassungen der Grafik

# 4.1 Grafik des Pfadmodells mit standardisierten Ergebnissen (Betas)

prepare_graph(model = path_fit, layout=path_layout) %>%

edit_graph({ label = paste(est_sig_std)}, element="edges") %>%

plot()


# 4.2 Grafik des Pfadmodells mit KIs für die Betas

prepare_graph(model = path_fit, layout=path_layout) %>%

edit_graph({ label = paste(est_sig_std, "\n", confint_std)}, element="edges") %>%

plot()


# 4.3 Grafik des Pfadmodells mit farbigen Elementen

prepare_graph(model = path_fit, layout=path_layout) %>%

edit_graph({color ="blue"}, element="edges") %>%
edit_graph({label_color ="blue"}, element="edges") %>%
edit_graph({color ="red"}, element="nodes") %>%
edit_graph({label_color ="red"}, element="nodes") %>%

plot()


Dokumentation zu tidySEM

Hier finden Sie weitere Infos zur individuellen Anpassung Ihrer Modellgrafiken mit tidySEM:

van Lissa, C. J. (n.d.). Plotting graphs for structural equation models. https://cjvanlissa.github.io/tidySEM/articles/Plotting_graphs.html

van Lissa, C. J. (2021). Package ‘tidySEM’. https://cran.r-project.org/web/packages/tidySEM/tidySEM.pdf