Wednesday, October 23, 2024

Day 8: A challenge to learn basics of Structural Equation Modeling (SEM) using lavaan and semPlot packages in R

 


During the next 12 days, I will learn and repeat the basics of structural equation modeling (SEM) using lavaan and semPlot packages in R.

You can search my lavaan posts by typing: #UsmanZafarParacha_lavaan , and semPlot posts by typing: #UsmanZafarParacha_semPlot

=============

During this day, I loaded the essential libraries and prepared a data, using the following lines of codes:

 

# Load the required libraries

library(lavaan)

library(semPlot)

library(psych)

 

# Simulate data

set.seed(123)  # For reproducibility

n <- 300  # Number of samples

 

# Latent variables

Knowledge <- rnorm(n, mean = 0, sd = 1)

Attitudes <- 0.5 * Knowledge + rnorm(n, mean = 0, sd = 1)

Behavior <- 0.7 * Knowledge + 0.4 * Attitudes + rnorm(n, mean = 0, sd = 1)

 

# Observed indicators for each latent variable

Know1 <- 0.8 * Knowledge + rnorm(n, mean = 0, sd = 0.5)

Know2 <- 0.9 * Knowledge + rnorm(n, mean = 0, sd = 0.5)

Know3 <- 0.7 * Knowledge + rnorm(n, mean = 0, sd = 0.5)

 

Att1 <- 0.8 * Attitudes + rnorm(n, mean = 0, sd = 0.5)

Att2 <- 0.9 * Attitudes + rnorm(n, mean = 0, sd = 0.5)

Att3 <- 0.7 * Attitudes + rnorm(n, mean = 0, sd = 0.5)

 

Beh1 <- 0.8 * Behavior + rnorm(n, mean = 0, sd = 0.5)

Beh2 <- 0.9 * Behavior + rnorm(n, mean = 0, sd = 0.5)

Beh3 <- 0.7 * Behavior + rnorm(n, mean = 0, sd = 0.5)

 

# Create a data frame

data <- data.frame(Know1, Know2, Know3, Att1, Att2, Att3, Beh1, Beh2, Beh3)

 

The above code shows three observed variables for each latent factor. For example,

Knowledge: Know1, Know2, Know3

Attitudes: Att1, Att2, Att3

Behavior: Beh1, Beh2, Beh3

Then the SEM model is specified, using the following lines of codes:

 

# SEM model specification

model <- '

  # Measurement model

  Knowledge =~ Know1 + Know2 + Know3

  Attitudes =~ Att1 + Att2 + Att3

  Behavior  =~ Beh1 + Beh2 + Beh3

 

  # Structural model

  Attitudes ~ Knowledge

  Behavior  ~ Knowledge + Attitudes

'

The SEM model is fitted using lavaan, and visualized using the semPaths, as follows:

 

# Fit the SEM model

fit <- sem(model, data = data)

 

# Summarize the results

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

 

# Plot the SEM path diagram

semPaths(fit, "std", layout = "tree", residuals = TRUE, nCharNodes = 7, edge.label.cex = 1.2)

 

Source:
ChatGPT


No comments: