Skip to content

Instantly share code, notes, and snippets.

@soumyaray
Created October 8, 2024 12:30
Show Gist options
  • Save soumyaray/467623c75a75552bf96181db76f17a8f to your computer and use it in GitHub Desktop.
Save soumyaray/467623c75a75552bf96181db76f17a8f to your computer and use it in GitHub Desktop.
DEMO: SEMinR - cSEM comparison (response to comment on Reddit)
# Code below demonstrates similar/same results from SEMinR and cSEM for given model
# Needed changing default value of .disattenuate for cSEM
# Response to: https://www.reddit.com/r/rstats/comments/1fy42vy/structural_equation_model_results_differ_when/
library(seminr)
library(cSEM)
nck <- corp_rep_data
data <- MASS::mvrnorm(1000,mu = rep(0,37),Sigma =diag(1,37))
data <- cbind(mobi, corp_rep_data[1:250,3:17])
colnames(data) <- c(multi_items("A", 1:3),
multi_items("B", 1:3),
"K1",
multi_items("C", 1:5),
multi_items("D", 1:4),
multi_items("E", 1:3),
multi_items("F", 1:2),
multi_items("G", 1:3),
multi_items("H", 1:3),
multi_items("I", 1),
multi_items("J", 1:9)
)
### Seminr ----
mm <- constructs(
composite("Construct_A", multi_items("A", 1:3), weights = mode_A),
composite("Construct_B", multi_items("B", 1:3), weights = mode_A),
composite("Construct_D", multi_items("D", 1:3), weights = mode_A),
composite("Construct_E", multi_items("E", 1:3), weights = mode_B),
composite("Construct_F", multi_items("F", 1:2), weights = mode_B),
composite("Construct_G", multi_items("G", 1:3), weights = mode_B),
composite("Construct_H", multi_items("H", 1:3), weights = mode_B),
composite("Construct_I", single_item("I1")),
composite("Construct_J", c(multi_items("J", 1:9), "K1"), weights = mode_B)
)
sm <- relationships(
paths(from = c("Construct_I", "Construct_H"),
to = c("Construct_A")),
paths(from = c("Construct_A",
"Construct_B",
"Construct_E",
"Construct_F",
"Construct_G"),
to = c("Construct_D")),
paths(from = c("Construct_E",
"Construct_D"),
to = c("Construct_J")
))
model <- estimate_pls(
data = data,
measurement_model = mm,
structural_model = sm,
inner_weights = path_factorial,
missing = mean_replacement,
missing_value = "-99"
)
# summary_model <- summary(model)
plot(model)
# summary_model
#
# summary_model$iterations
#
# summary_model$validity$vif_items
#
# summary_model$paths
#
# summary_model$reliability
# CSEM ----
model_csem <- "
Construct_A =~ A1 + A2 + A3 # Mode A (reflective by default)
Construct_B =~ B1 + B2 + B3 # Mode A (reflective by default)
Construct_D =~ D1 + D2 + D3
Construct_E <~ E1 + E2 + E3 # Mode B (formative)
Construct_F <~ F1 + F2 # Mode B (formative)
Construct_G <~ G1 + G2 + G3 # Mode B (formative)
Construct_H <~ H1 + H2 + H3# Mode B (formative)
Construct_I =~ I1
Construct_J <~ J1 + J2 + J3 + J4 + J5 + J6 + J7 + J8 + J9 + K1 # Mode B (formative)
Construct_A ~ Construct_I + Construct_H
Construct_D ~ Construct_A + Construct_B+ Construct_E + Construct_F + Construct_G
Construct_J ~ Construct_D + Construct_E
"
model_run <- csem(
.model = model_csem,
.disattenuate = FALSE,
.data = data,
)
model$path_coef
model_run$Estimates$Path_estimates
summary(model_run)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment