states <- as.data.frame(state.x77)
names(states)[which(names(states) == "HS Grad")] <- "HS.Grad"
states$Income_rescaled <- states$Income/100
# Mean Center Predictors
states$Illiteracy_centered <- scale(states$Illiteracy, scale = FALSE)
states$Murder_centered <- scale(states$Murder, scale = FALSE)
# Compute Interaction Term
states$interaction <- states$Illiteracy_centered * states$Murder_centered
# Specify model syntax
moderationModel <- '
Income_rescaled ~ Illiteracy_centered + Murder_centered + interaction +
HS.Grad
'
# Fit the model
moderationFit <- lavaan::sem(
moderationModel,
data = states,
missing = "ML",
estimator = "MLR",
fixed.x = FALSE)
# Pass model to function (unlabeled plot)
semPlotInteraction(
data = states,
fit = moderationFit,
predictor = "Illiteracy",
centered_predictor = "Illiteracy_centered",
moderator = "Murder",
centered_moderator = "Murder_centered",
interaction = "interaction",
outcome = "Income_rescaled",
covariates = "HS.Grad")
# Pass model to function (labeled plot)
semPlotInteraction(
data = states,
fit = moderationFit,
predictor = "Illiteracy",
centered_predictor = "Illiteracy_centered",
moderator = "Murder",
centered_moderator = "Murder_centered",
interaction = "interaction",
outcome = "Income_rescaled",
covariates = "HS.Grad",
predStr = "Illiteracy Level",
modStr = "Murder Rate",
outStr = "Income")
Run the code above in your browser using DataLab