-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathplot_interactions.Rmd
145 lines (117 loc) · 4.24 KB
/
plot_interactions.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
---
title: "plotting interaction effects"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{plotting interaction effects}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
EVAL_DEFAULT <- FALSE
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
eval = TRUE
)
```
```{r setup}
library(modsem)
```
# Plotting Interaction Effects
Interaction 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 x-variable is plotted on the x-axis.
- The y-variable is plotted on the y-axis.
- The z-variable determines at which points the effect of x on y is plotted.
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:
```{r}
m1 <- "
# Outer Model
X =~ x1
X =~ x2 + x3
Z =~ z1 + z2 + z3
Y =~ y1 + y2 + y3
# Inner Model
Y ~ X + Z + X:Z
"
est1 <- modsem(m1, data = oneInt)
plot_interaction(x = "X", z = "Z", y = "Y",
vals_z = -3:3, model = est1)
```
Here is a different example using the `lms` approach in the theory of planned behavior model:
```{r}
tpb <- "
# Outer Model (Based on Hagger et al., 2007)
ATT =~ att1 + att2 + att3 + att4 + att5
SN =~ sn1 + sn2
PBC =~ pbc1 + pbc2 + pbc3
INT =~ int1 + int2 + int3
BEH =~ b1 + b2
# Inner Model (Based on Steinmetz et al., 2011)
INT ~ ATT + SN + PBC
BEH ~ INT + PBC
BEH ~ PBC:INT
"
est2 <- modsem(tpb, TPB, method = "lms")
plot_interaction(x = "INT", z = "PBC", y = "BEH",
vals_z = c(-0.5, 0.5), model = est2)
```
# Plotting Johnson-Neyman Regions
The `plot_jn()` function can be used to plot Johnson-Neyman regions for a given interaction effect.
This function takes a fitted model object, the names of the two variables that are interacting,
and the name of the interaction effect. The function will plot the Johnson-Neyman regions for the interaction effect.
The `plot_jn()` function will also plot the 95% confidence interval for the interaction effect.
`x` is the name of the x-variable, `z` is the name of the z-variable, and `y` is the name of the y-variable.
`model` is the fitted model object. The argument `min_z` and `max_z` are used to specify the range of values for the
moderating variable.
Here is an example using the `ca` approach in the Holzinger-Swineford (1939) dataset:
```{r}
m1 <- '
visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9
visual ~ speed + textual + speed:textual
'
est1 <- modsem(m1, data = lavaan::HolzingerSwineford1939, method = "ca")
plot_jn(x = "speed", z = "textual", y = "visual", model = est1, max_z = 6)
```
Here is another example using the `qml` approach in the theory of planned behavior model:
```{r}
tpb <- "
# Outer Model (Based on Hagger et al., 2007)
ATT =~ att1 + att2 + att3 + att4 + att5
SN =~ sn1 + sn2
PBC =~ pbc1 + pbc2 + pbc3
INT =~ int1 + int2 + int3
BEH =~ b1 + b2
# Inner Model (Based on Steinmetz et al., 2011)
INT ~ ATT + SN + PBC
BEH ~ INT + PBC
BEH ~ PBC:INT
"
est2 <- modsem(tpb, TPB, method = "qml")
plot_jn(x = "INT", z = "PBC", y = "BEH", model = est2,
min_z = -1.5, max_z = -0.5)
```
# Plotting (3D) Surface Plots
The `plot_surface()` function can be used to plot 3D surface plots for a given interaction effect.
This function takes a fitted model object, the names of the two variables that are interacting,
and the name of the dependent variable. The function will plot the 3D surface plot for the interaction effect.
```{r, eval = EVAL_DEFAULT}
tpb <- "
# Outer Model (Based on Hagger et al., 2007)
ATT =~ att1 + att2 + att3 + att4 + att5
SN =~ sn1 + sn2
PBC =~ pbc1 + pbc2 + pbc3
INT =~ int1 + int2 + int3
BEH =~ b1 + b2
# Inner Model (Based on Steinmetz et al., 2011)
INT ~ ATT + SN + PBC
BEH ~ INT + PBC
BEH ~ PBC:INT
"
est2 <- modsem(tpb, TPB, method = "qml")
plot_surface(x = "INT", z = "PBC", y = "BEH", model = est2)
```