library(modsem)
Simple slope effects can be plotted using the included plot_interaction()
function. This function takes a fitted model object and the names of the two variables that are interacting. The function will plot the interaction effect of the two variables, where:
The function will also plot the 95% confidence interval for the interaction effect. Note that the vals_z
argument (as well as the values of x
) are scaled by the mean and standard deviation of the variables. Unless the rescale
argument is set to FALSE
.
Here is a simple example using the double-centering approach:
<- "
m1 # Outer Model
X =~ x1
X =~ x2 + x3
Z =~ z1 + z2 + z3
Y =~ y1 + y2 + y3
# Inner Model
Y ~ X + Z + X:Z
"
<- modsem(m1, data = oneInt)
est1 plot_interaction(x = "X", z = "Z", y = "Y", vals_z = c(-1, 1), model = est1)
If you want to see the numerical values of the simple slopes, you can use the simple_slopes()
function:
<- "
m1 # Outer Model
X =~ x1
X =~ x2 + x3
Z =~ z1 + z2 + z3
Y =~ y1 + y2 + y3
# Inner Model
Y ~ X + Z + X:Z
"
<- modsem(m1, data = oneInt)
est1 simple_slopes(x = "X", z = "Z", y = "Y", vals_z = c(-1, 1), model = est1)
The simple_slopes()
function returns a simple_slopes
object. It only has two methods/generics: print.simple_slopes()
, which prints the simple slopes in a easy-to-read format and as.data.frame.simple_slopes()
. The print()
method will not only print the predicted values, but also significance tests for the difference between the slope at the lowest value of z
and the slope at the highest value of z
, as well as significance tests for the slope of x
at the different values of vals_z
.
In the example above, we can see that there is a significant difference between the slope at at -1 * sd(Z)
and +1 * sd(Z)
. Note that by default vals_z
is rescaled by the mean and standard deviation of the variable, unless rescale = FALSE
is set. This means that the values of vals_z
are interpreted as standard deviations from the mean of Z
.
If you want to extract the simple slopes as a data.frame
, you can use the as.data.frame()
function:
<- "
m1 # Outer Model
X =~ x1
X =~ x2 + x3
Z =~ z1 + z2 + z3
Y =~ y1 + y2 + y3
# Inner Model
Y ~ X + Z + X:Z
"
<- modsem(m1, data = oneInt)
est1 <- simple_slopes(x = "X", z = "Z", y = "Y",
slopes vals_z = c(0, 1), model = est1)
as.data.frame(slopes)