plot_effect_vs_w function

Plot an Effect Against a Moderator

Plot an Effect Against a Moderator

It plots an effect, direct or indirect, against a moderator, with confidence band if available.

plot_effect_vs_w( object, w = NULL, w_label = NULL, effect_label = NULL, add_zero_line = TRUE, always_draw_zero_line = FALSE, line_linewidth = 1, line_color = "blue", shade_the_band = TRUE, draw_the_intervals = TRUE, band_fill_color = "lightgrey", band_alpha = 0.5, intervals_color = "black", intervals_linetype = "longdash", intervals_linewidth = 1, zero_line_color = "grey", zero_line_linewidth = 1, zero_line_linetype = "solid", line_args = list(), band_args = list(), intervals_args = list(), zero_line_args = list(), level = 0.95 ) fill_wlevels(to_fill, cond_out = NULL, k = 21)

Arguments

  • object: The output of cond_indirect_effects().

  • w: The name of the moderator. Must be present in object. If NULL, the default, and object has only one moderator, then it will be set to that moderator. Because this function currently only supports a path with only one moderator, this argument can be left as NULL for now.

  • w_label: The label of the horizontal axis. If NULL, the default, it will be paste0("Moderator: ", w).

  • effect_label: The label of the vertical axis. If NULL, the default, it will be generated from the path.

  • add_zero_line: Whether a horizontal line at zero will be drawn. Default is TRUE.

  • always_draw_zero_line: If FALSE, the default, then the line at zero, if requested will be drawn only if zero is within the range of the plot. If TRUE, then the line at zero will always be drawn.

  • line_linewidth: The width of the line of the effect for each level of the moderator, to be used by ggplot2::geom_line(). Default is 1. Always overrides the value of line_args.

  • line_color: The color of the line of the effect for each level of the moderator, to be used by ggplot2::geom_line(). Default is "blue". Always overrides the value of line_args.

  • shade_the_band: If TRUE, the default, a confidence band will be drawn as a region along the line if confidence intervals can be retrieved from object.

  • draw_the_intervals: If TRUE, the default, two lines will be drawn for the confidence intervals along the line if they can be retrieved from object.

  • band_fill_color: The color of of the confidence band, to be used by ggplot2::geom_ribbon(). Default is "lightgrey". Always overrides the value of band_args.

  • band_alpha: A number from 0 to 1 for the level of transparency of the confidence band, to be used by ggplot2::geom_ribbon(). Default is .50. Always overrides the value of band_args.

  • intervals_color: The color of the lines of the confidence intervals, to be used by ggplot2::geom_line(). Default is "black". Always overrides the value of intervals_args.

  • intervals_linetype: The line type of the lines of the confidence intervals, to be used by ggplot2::geom_line(). Default is "longdash". Always overrides the value of intervals_args.

  • intervals_linewidth: The line width of the lines of the confidence intervals, to be used by ggplot2::geom_line(). Default is 1. Always overrides the value of intervals_args.

  • zero_line_color: The color of the line at zero, to be used by ggplot2::geom_line(). Default is "grey". Always overrides the value of zero_line_args.

  • zero_line_linewidth: The line width of the line at zero, to be used by ggplot2::geom_line(). Default is 1. Always overrides the value of zero_line_args.

  • zero_line_linetype: The line type of the line at zero, to be used by ggplot2::geom_line(). Default is "solid". Always overrides the value of zero_line_args.

  • line_args: A named list of additional arguments to be passed to ggplot2::geom_line() for the line of the effect against moderator. Default is list().

  • band_args: A named list of additional arguments to be passed to ggplot2::geom_ribbon() for the confidence band. Default is list().

  • intervals_args: A named list of additional arguments to be passed to ggplot2::geom_line() for the lines of confidence intervals. Default is list().

  • zero_line_args: A named list of additional arguments to be passed to ggplot2::geom_line() for the line at zero. Default is list().

  • level: The level of confidence for the confidence intervals computed from the original standard errors. Used only for paths without mediators and both x- and y-variables are not standardized.

  • to_fill: The output of cond_indirect_effects() or pseudo_johnson_neyman(), for which additional levels of the moderator will be added.

  • cond_out: If to_fill is the output of pseudo_johnson_neyman(), the original output of cond_indirect_effects()

    used in the call to pseudo_johnson_neyman()

    need to be supplied through this argument.

  • k: The desired number of levels of the moderator.

Returns

plot_effect_vs_w() returns a ggplot2 graph. Plotted if not assigned to a name. It can be further modified like a usual ggplot2 graph.

fill_wlevels() returns an updated output of cond_indirect_effects()

with the desired number of levels of the moderator.

Details

It receives an output of cond_indirect_effects() and plot the effect against the moderator. The effect can be an indirect effect or a direct effect.

It uses the levels of the moderator stored in the output of cond_indirect_effects(). Therefore, the desired levels of the moderator to be plotted needs to be specified when calling cond_indirect_effects(), as illustrated in the example.

Currently, this function only supports a path with exactly one moderator, and the moderator is a numeric variable.

Using Original Standard Errors

If the following conditions are met, the stored standard errors, if available, will be used to form the confidence intervals:

  • Confidence intervals have not been formed (e.g., by bootstrapping or Monte Carlo).
  • The path has no mediators.
  • The model has only one group.
  • The path is moderated by one or more moderator.
  • Both the x-variable and the y-variable are not standardized.

If the model is fitted by OLS regression (e.g., using stats::lm()), then the variance-covariance matrix of the coefficient estimates will be used, and confidence intervals are computed from the t

statistic.

If the model is fitted by structural equation modeling using lavaan, then the variance-covariance computed by lavaan will be used, and confidence intervals are computed from the z statistic.

Caution

If the model is fitted by structural equation modeling and has moderators, the standard errors, p-values, and confidence interval computed from the variance-covariance matrices for conditional effects can only be trusted if all covariances involving the product terms are free. If any of them are fixed, for example, fixed to zero, it is possible that the model is not invariant to linear transformation of the variables.

The function fill_wlevels() is a helper to automatically fill in additional levels of the moderators, to plot a graph with smooth confidence band. It accepts the output of cond_indirect_effects()

or pseudo_johnson_neyman(), finds the range of the values of the moderator, and returns an output of cond_indirect_effects() with the desired number of levels within this range. It is intended to be a helper. If it does not work, users can still get the desired number of levels by setting the values manually when calling cond_indirect_effects().

Examples

dat <- data_med_mod_a lm_m <- lm(m ~ x*w + c1 + c2, dat) lm_y <- lm(y ~ m + x + c1 + c2, dat) fit_lm <- lm2list(lm_m, lm_y) # Set R to a large value in real research. boot_out_lm <- do_boot(fit_lm, R = 50, seed = 54532, parallel = FALSE, progress = FALSE) # Compute the conditional indirect effects # from 2 SD below mean to 2 SD above mean of the moderator, # by setting sd_from_mean of cond_indirect_effects(). # Set length.out to a larger number for a smooth graph. out_lm <- cond_indirect_effects(wlevels = "w", x = "x", y = "y", m = "m", fit = fit_lm, sd_from_mean = seq(-2, 2, length.out = 10), boot_ci = TRUE, boot_out = boot_out_lm) p <- plot_effect_vs_w(out_lm) p # The output is a ggplot2 graph and so can be further customized library(ggplot2) # Add the line for the mean of w, the moderator p2 <- p + geom_vline(xintercept = mean(dat$w), color = "red") p2 # Use fill_wlevels to add moderator levels: dat <- data_med_mod_a lm_m <- lm(m ~ x*w + c1 + c2, dat) lm_y <- lm(y ~ m + x + c1 + c2, dat) fit_lm <- lm2list(lm_m, lm_y) wlevels <- mod_levels(w = "w", sd_from_mean = c(-3, 0, 3), fit = fit_lm) wlevels cond_out <- cond_indirect_effects(wlevels = wlevels, x = "x", y = "m", fit = fit_lm) cond_out # Only 3 points p1 <- plot_effect_vs_w(cond_out) p1 # Increase the number of levels to 15 cond_out_filled <- fill_wlevels(cond_out, k = 15) cond_out_filled p2 <- plot_effect_vs_w(cond_out_filled) p2

See Also

cond_indirect_effects()

  • Maintainer: Shu Fai Cheung
  • License: GPL (>= 3)
  • Last published: 2025-01-25