| Title: | Structural Equation Model Effect Analysis and Visualization | 
| Version: | 1.2.3 | 
| Description: | Provides standardized effect decomposition (direct, indirect, and total effects) for three major structural equation modeling frameworks: 'lavaan', 'piecewiseSEM', and 'plspm'. Automatically handles zero-effect variables, generates publication-ready 'ggplot2' visualizations, and returns both wide-format and long-format effect tables. Supports effect filtering, multi-model object inputs, and customizable visualization parameters. For a general overview of the methods used in this package, see Rosseel (2012) <doi:10.18637/jss.v048.i02> and Lefcheck (2016) <doi:10.1111/2041-210X.12512>. | 
| URL: | https://github.com/PhDMeiwp/semEffect/ | 
| BugReports: | https://github.com/PhDMeiwp/semEffect/issues | 
| Depends: | R (≥ 4.4.0) | 
| License: | GPL-3 | 
| Encoding: | UTF-8 | 
| Imports: | lavaan, piecewiseSEM, plspm, ggplot2, tidyr, dplyr, utils, checkmate, RColorBrewer | 
| Suggests: | testthat | 
| RoxygenNote: | 7.3.2 | 
| NeedsCompilation: | no | 
| Packaged: | 2025-06-30 06:54:47 UTC; meiwe | 
| Author: | Weiping Mei | 
| Maintainer: | Weiping Mei <meiweipingg@163.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-07-04 19:30:01 UTC | 
Structural Equation Model Effect Analysis and Visualization
Description
Provides standardized effect decomposition (direct, indirect, and total effects) for three major structural equation modeling frameworks: 'lavaan', 'piecewiseSEM', and 'plspm'. Automatically handles zero-effect variables, generates publication-ready 'ggplot2' visualizations, and returns both wide-format and long-format effect tables. Supports effect filtering, multi-model object inputs, and customizable visualization parameters.
Usage
sem_effects(
  object,
  target,
  plot = TRUE,
  delete_zero_effect = TRUE,
  total_only = FALSE,
  total_color = "skyblue",
  color_palette = c("darkgreen", "skyblue", "orange")
)
Arguments
| object | SEM object (lavaan/psem/plspm). | 
| target | Character string specifying the target variable name for effect analysis. | 
| plot | Logical indicating whether to generate effect visualization plots (default:  | 
| delete_zero_effect | Logical indicating whether to removes rows where all specified effect columns contain only zeros (default:  | 
| total_only | Logical controlling plot mode. If  | 
| total_color | Single color or vector of colors for total effect bars when  | 
| color_palette | Character vector of 3 colors for direct/indirect/total effects when  | 
Value
A list containing three components:
-  effect_table: A data frame with variables and their standardized effect values (direct, indirect, total)
-  effect_long: A long-format version ofeffect_table
-  plot_object: A ggplot2 object (if plot=TRUE), NULL otherwise
Author(s)
Weiping Mei
See Also
Examples
# Example 01: lavaan -------------------------------
library(lavaan)
model <- '
  # Measurement model
  ind60 =~ x1 + x2 + x3
  dem60 =~ y1 + y2 + y3 + y4
  dem65 =~ y5 + y6 + y7 + y8
  # Structural model
  dem60 ~ ind60
  dem65 ~ ind60 + dem60
'
fit <- sem(model, data = PoliticalDemocracy)
# Analyze effects for target variable "dem65"
results <- sem_effects(fit, target = "dem65")
print(results$effect_table)
print(results$effect_long)
print(results$plot_object)
# Customize plot appearance
results$plot_object +
  ggplot2::coord_flip()+
  ggplot2::theme_minimal() +
  ggplot2::ggtitle("Standardized effects for dem65")
# Example 02: piecewiseSEM --------------------------
library(piecewiseSEM)
pmod <- psem(
  lm(rich ~ cover, data = keeley),
  lm(cover ~ firesev, data = keeley),
  lm(firesev ~ age, data = keeley),
  data = keeley
  )
sem_effects(pmod, target = "rich",
        color_palette = c("darkgreen", "grey80", "purple"))
# Example 03: plspm ---------------------------------
library(plspm)
data(satisfaction)
# path matrix
IMAG = c(0,0,0,0,0,0)
EXPE = c(1,0,0,0,0,0)
QUAL = c(0,1,0,0,0,0)
VAL = c(0,1,1,0,0,0)
SAT = c(1,1,1,1,0,0)
LOY = c(1,0,0,0,1,0)
sat_path = rbind(IMAG, EXPE, QUAL, VAL, SAT, LOY)
# blocks of outer model
sat_blocks = list(1:5, 6:10, 11:15, 16:19, 20:23, 24:27)
# vector of modes (reflective indicators)
sat_mod = rep("A", 6)
# apply plspm
plsmodel = plspm(satisfaction, sat_path, sat_blocks, modes = sat_mod)
sem_effects(plsmodel, target = "LOY", plot = TRUE, delete_zero_effect = TRUE,
            total_only = TRUE,
            total_color = RColorBrewer::brewer.pal(5,"Set3"))