sim_slopes conducts a simple slopes analysis for the purposes of understanding two- and three-way interaction effects in linear regression.

sim_slopes(model, pred, modx, mod2 = NULL, modx.values = NULL,
  mod2.values = NULL, centered = "all", data = NULL,
  cond.int = FALSE, johnson_neyman = TRUE, jnplot = FALSE,
  jnalpha = 0.05, robust = FALSE, digits = getOption("jtools-digits",
  default = 2), pvals = TRUE, confint = FALSE, ci.width = 0.95,
  cluster = NULL, modx.labels = NULL, mod2.labels = NULL, ...)

Arguments

model

A regression model. The function is tested with lm, glm, svyglm, merMod, rq, brmsfit, stanreg models. Models from other classes may work as well but are not officially supported. The model should include the interaction of interest.

pred

The predictor variable involved in the interaction.

modx

The moderator variable involved in the interaction.

mod2

Optional. The name of the second moderator variable involved in the interaction.

modx.values

For which values of the moderator should simple slopes analysis be performed? Default is NULL. If NULL, then the values will be the customary +/- 1 standard deviation from the mean as well as the mean itself. There is no specific limit on the number of variables provided. If "plus-minus", uses just +/- 1 standard deviation without the mean. You may also choose "terciles" to split the data into equally-sized groups and choose the point at the mean of each of those groups.

Factor variables are not particularly suited to simple slopes analysis, but you could have a numeric moderator with values of 0 and 1 and give c(0,1) to compare the slopes at the different conditions. Two-level factor variables are coerced to numeric 0/1 variables, but are not standardized/centered like they could be if your input data had a numeric 0/1 variable.

mod2.values

Same as modx.values, but for the second moderator (mod2).

centered

A vector of quoted variable names that are to be mean-centered. If "all", all non-focal predictors as well as the pred variable are centered. You may instead pass a character vector of variables to center. User can also use "none" to base all predictions on variables set at 0. The response variable, modx, and mod2 variables are never centered.

data

Optional, default is NULL. You may provide the data used to fit the model. This can be a better way to get mean values for centering and can be crucial for models with variable transformations in the formula (e.g., log(x)) or polynomial terms (e.g., poly(x, 2)). You will see a warning if the function detects problems that would likely be solved by providing the data with this argument and the function will attempt to retrieve the original data from the global environment.

cond.int

Should conditional intercepts be printed in addition to the slopes? Default is FALSE.

johnson_neyman

Should the Johnson-Neyman interval be calculated? Default is TRUE. This can be performed separately with johnson_neyman.

jnplot

Should the Johnson-Neyman interval be plotted as well? Default is FALSE.

jnalpha

What should the alpha level be for the Johnson-Neyman interval? Default is .05, which corresponds to a 95% confidence interval.

robust

Should robust standard errors be used to find confidence intervals for supported models? Default is FALSE, but you should specify the type of sandwich standard errors if you'd like to use them (i.e., "HC0", "HC1", and so on). If TRUE, defaults to "HC3" standard errors.

digits

An integer specifying the number of digits past the decimal to report in the output. Default is 2. You can change the default number of digits for all jtools functions with options("jtools-digits" = digits) where digits is the desired number.

pvals

Show p values and significance stars? If FALSE, these are not printed. Default is TRUE.

confint

Show confidence intervals instead of standard errors? Default is FALSE.

ci.width

A number between 0 and 1 that signifies the width of the desired confidence interval. Default is .95, which corresponds to a 95% confidence interval. Ignored if confint = FALSE.

cluster

For clustered standard errors, provide the column name of the cluster variable in the input data frame (as a string). Alternately, provide a vector of clusters.

modx.labels

A character vector of labels for each level of the moderator values, provided in the same order as the modx.values argument. If NULL, the values themselves are used as labels unless modx,values is also NULL. In that case, "+1 SD" and "-1 SD" are used.

mod2.labels

A character vector of labels for each level of the 2nd moderator values, provided in the same order as the mod2.values argument. If NULL, the values themselves are used as labels unless mod2.values is also NULL. In that case, "+1 SD" and "-1 SD" are used.

...

Arguments passed to johnson_neyman and summ.

Value

A list object with the following components:

slopes

A table of coefficients for the focal predictor at each value of the moderator

ints

A table of coefficients for the intercept at each value of the moderator

modx.values

The values of the moderator used in the analysis

mods

A list containing each regression model created to estimate the conditional coefficients.

jn

If johnson_neyman = TRUE, a list of johnson_neyman objects from johnson_neyman. These contain the values of the interval and the plots. If a 2-way interaction, the list will be of length

  1. Otherwise, there will be 1 johnson_neyman object for each value of the 2nd moderator for 3-way interactions.

Details

This allows the user to perform a simple slopes analysis for the purpose of probing interaction effects in a linear regression. Two- and three-way interactions are supported, though one should be warned that three-way interactions are not easy to interpret in this way.

For more about Johnson-Neyman intervals, see johnson_neyman.

The function is tested with lm, glm, svyglm, and merMod inputs. Others may work as well, but are not tested. In all but the linear model case, be aware that not all the assumptions applied to simple slopes analysis apply.

References

Bauer, D. J., & Curran, P. J. (2005). Probing interactions in fixed and multilevel regression: Inferential and graphical techniques. Multivariate Behavioral Research, 40(3), 373-400. http://dx.doi.org/10.1207/s15327906mbr4003_5

Cohen, J., Cohen, P., West, S. G., & Aiken, L. S. (2003). Applied multiple regression/correlation analyses for the behavioral sciences (3rd ed.). Mahwah, NJ: Lawrence Erlbaum Associates, Inc.

See also

interact_plot accepts similar syntax and will plot the results with ggplot.

testSlopes performs a hypothesis test of differences and provides Johnson-Neyman intervals.

simpleSlope performs a similar analysis.

Other interaction tools: cat_plot, interact_plot, johnson_neyman, probe_interaction

Examples

# Using a fitted model as formula input fiti <- lm(Income ~ Frost + Murder * Illiteracy, data = as.data.frame(state.x77)) sim_slopes(model = fiti, pred = Murder, modx = Illiteracy)
#> JOHNSON-NEYMAN INTERVAL #> #> When Illiteracy is OUTSIDE the interval [0.68, 2.20], the slope of Murder #> is p < .05. #> #> Note: The range of observed values of Illiteracy is [0.50, 2.80] #> #> SIMPLE SLOPES ANALYSIS #> #> Slope of Murder when Illiteracy = 1.78 (+ 1 SD): #> Est. S.E. t val. p #> -62.28 41.49 -1.50 0.14 #> #> Slope of Murder when Illiteracy = 1.17 (Mean): #> Est. S.E. t val. p #> 8.36 29.24 0.29 0.78 #> #> Slope of Murder when Illiteracy = 0.56 (- 1 SD): #> Est. S.E. t val. p #> 78.99 34.81 2.27 0.03 #>
# With svyglm if (requireNamespace("survey")) { library(survey) data(api) dstrat <- svydesign(id = ~1, strata = ~stype, weights = ~pw, data = apistrat, fpc = ~fpc) regmodel <- svyglm(api00 ~ ell * meals, design = dstrat) sim_slopes(regmodel, pred = ell, modx = meals) # 3-way with survey and factor input regmodel <- svyglm(api00 ~ ell * meals * sch.wide, design = dstrat) sim_slopes(regmodel, pred = ell, modx = meals, mod2 = sch.wide) }
#> ██████████████ While sch.wide (2nd moderator) = No ██████████████ #> #> JOHNSON-NEYMAN INTERVAL #> #> The Johnson-Neyman interval could not be found. Is the p value for your #> interaction term below the specified alpha? #> #> SIMPLE SLOPES ANALYSIS #> #> Slope of ell when meals = 18.72 (- 1 SD): #> Est. S.E. t val. p #> -3.51 1.99 -1.76 0.08 #> #> Slope of ell when meals = 48.22 (Mean): #> Est. S.E. t val. p #> -1.98 1.25 -1.58 0.11 #> #> Slope of ell when meals = 77.73 (+ 1 SD): #> Est. S.E. t val. p #> -0.45 1.23 -0.37 0.71 #> #> ██████████████ While sch.wide (2nd moderator) = Yes █████████████ #> #> JOHNSON-NEYMAN INTERVAL #> #> The Johnson-Neyman interval could not be found. Is the p value for your #> interaction term below the specified alpha? #> #> SIMPLE SLOPES ANALYSIS #> #> Slope of ell when meals = 18.72 (- 1 SD): #> Est. S.E. t val. p #> -0.93 0.83 -1.12 0.26 #> #> Slope of ell when meals = 48.22 (Mean): #> Est. S.E. t val. p #> -0.62 0.56 -1.12 0.26 #> #> Slope of ell when meals = 77.73 (+ 1 SD): #> Est. S.E. t val. p #> -0.32 0.38 -0.84 0.40 #>