Plot comparisons on the y-axis against values of one or more predictors (x-axis, colors/shapes, and facets).
The by
argument is used to plot marginal comparisons, that is, comparisons made on the original data, but averaged by subgroups. This is analogous to using the by
argument in the comparisons()
function.
The condition
argument is used to plot conditional comparisons, that is, comparisons made on a user-specified grid. This is analogous to using the newdata
argument and datagrid()
function in a comparisons()
call. All variables whose values are not specified explicitly are treated as usual by datagrid()
, that is, they are held at their mean or mode (or rounded mean for integers). This includes grouping variables in mixed-effects models, so analysts who fit such models may want to specify the groups of interest using the condition
argument, or supply model-specific arguments to compute population-level estimates. See details below.
See the "Plots" vignette and website for tutorials and information on how to customize plots:
https://marginaleffects.com/bonus/plot.html
https://marginaleffects.com
plot_comparisons(
model,
variables = NULL,
condition = NULL,
by = NULL,
newdata = NULL,
type = NULL,
vcov = NULL,
conf_level = 0.95,
wts = FALSE,
comparison = "difference",
transform = NULL,
rug = FALSE,
gray = getOption("marginaleffects_plot_gray", default = FALSE),
draw = TRUE,
...
)
A ggplot2
object
Model object
Name of the variable whose contrast we want to plot on the y-axis.
Conditional slopes
Character vector (max length 4): Names of the predictors to display.
Named list (max length 4): List names correspond to predictors. List elements can be:
Numeric vector
Function which returns a numeric vector or a set of unique categorical values
Shortcut strings for common reference values: "minmax", "quartile", "threenum"
1: x-axis. 2: color/shape. 3: facet (wrap if no fourth variable, otherwise cols of grid). 4: facet (rows of grid).
Numeric variables in positions 2 and 3 are summarized by Tukey's five numbers ?stats::fivenum
.
Aggregate unit-level estimates (aka, marginalize, average over). Valid inputs:
FALSE
: return the original unit-level estimates.
TRUE
: aggregate estimates for each term.
Character vector of column names in newdata
or in the data frame produced by calling the function without the by
argument.
Data frame with a by
column of group labels, and merging columns shared by newdata
or the data frame produced by calling the same function without the by
argument.
See examples below.
For more complex aggregations, you can use the FUN
argument of the hypotheses()
function. See that function's documentation and the Hypothesis Test vignettes on the marginaleffects
website.
When newdata
is NULL
, the grid is determined by the condition
argument. When newdata
is not NULL
, the argument behaves in the same way as in the comparisons()
function.
string indicates the type (scale) of the predictions used to
compute contrasts or slopes. This can differ based on the model
type, but will typically be a string such as: "response", "link", "probs",
or "zero". When an unsupported string is entered, the model-specific list of
acceptable values is returned in an error message. When type
is NULL
, the
first entry in the error message is used by default.
Type of uncertainty estimates to report (e.g., for robust standard errors). Acceptable values:
FALSE: Do not compute standard errors. This can speed up computation considerably.
TRUE: Unit-level standard errors using the default vcov(model)
variance-covariance matrix.
String which indicates the kind of uncertainty estimates to return.
Heteroskedasticity-consistent: "HC"
, "HC0"
, "HC1"
, "HC2"
, "HC3"
, "HC4"
, "HC4m"
, "HC5"
. See ?sandwich::vcovHC
Heteroskedasticity and autocorrelation consistent: "HAC"
Mixed-Models degrees of freedom: "satterthwaite", "kenward-roger"
Other: "NeweyWest"
, "KernHAC"
, "OPG"
. See the sandwich
package documentation.
One-sided formula which indicates the name of cluster variables (e.g., ~unit_id
). This formula is passed to the cluster
argument of the sandwich::vcovCL
function.
Square covariance matrix
Function which returns a covariance matrix (e.g., stats::vcov(model)
)
numeric value between 0 and 1. Confidence level to use to build a confidence interval.
logical, string or numeric: weights to use when computing average predictions, contrasts or slopes. These weights only affect the averaging in avg_*()
or with the by
argument, and not unit-level estimates. See ?weighted.mean
string: column name of the weights variable in newdata
. When supplying a column name to wts
, it is recommended to supply the original data (including the weights variable) explicitly to newdata
.
numeric: vector of length equal to the number of rows in the original data or in newdata
(if supplied).
FALSE: Equal weights.
TRUE: Extract weights from the fitted object with insight::find_weights()
and use them when taking weighted averages of estimates. Warning: newdata=datagrid()
returns a single average weight, which is equivalent to using wts=FALSE
How should pairs of predictions be compared? Difference, ratio, odds ratio, or user-defined functions.
string: shortcuts to common contrast functions.
Supported shortcuts strings: difference, differenceavg, differenceavgwts, dydx, eyex, eydx, dyex, dydxavg, eyexavg, eydxavg, dyexavg, dydxavgwts, eyexavgwts, eydxavgwts, dyexavgwts, ratio, ratioavg, ratioavgwts, lnratio, lnratioavg, lnratioavgwts, lnor, lnoravg, lnoravgwts, lift, liftavg, liftavgwts, expdydx, expdydxavg, expdydxavgwts
See the Comparisons section below for definitions of each transformation.
function: accept two equal-length numeric vectors of adjusted predictions (hi
and lo
) and returns a vector of contrasts of the same length, or a unique numeric value.
See the Transformations section below for examples of valid functions.
string or function. Transformation applied to unit-level estimates and confidence intervals just before the function returns results. Functions must accept a vector and return a vector of the same length. Support string shortcuts: "exp", "ln"
TRUE displays tick marks on the axes to mark the distribution of raw data.
FALSE grayscale or color plot
TRUE
returns a ggplot2
plot. FALSE
returns a data.frame
of the underlying data.
Additional arguments are passed to the predict()
method
supplied by the modeling package.These arguments are particularly useful
for mixed-effects or bayesian models (see the online vignettes on the
marginaleffects
website). Available arguments can vary from model to
model, depending on the range of supported arguments by each modeling
package. See the "Model-Specific Arguments" section of the
?slopes
documentation for a non-exhaustive list of available
arguments.
Some model types allow model-specific arguments to modify the nature of
marginal effects, predictions, marginal means, and contrasts. Please report
other package-specific predict()
arguments on Github so we can add them to
the table below.
https://github.com/vincentarelbundock/marginaleffects/issues
Package | Class | Argument | Documentation |
brms | brmsfit | ndraws | brms::posterior_predict |
re_formula | brms::posterior_predict | ||
lme4 | merMod | re.form | lme4::predict.merMod |
allow.new.levels | lme4::predict.merMod | ||
glmmTMB | glmmTMB | re.form | glmmTMB::predict.glmmTMB |
allow.new.levels | glmmTMB::predict.glmmTMB | ||
zitype | glmmTMB::predict.glmmTMB | ||
mgcv | bam | exclude | mgcv::predict.bam |
gam | exclude | mgcv::predict.gam | |
robustlmm | rlmerMod | re.form | robustlmm::predict.rlmerMod |
allow.new.levels | robustlmm::predict.rlmerMod | ||
MCMCglmm | MCMCglmm | ndraws | |
sampleSelection | selection | part | sampleSelection::predict.selection |
if (FALSE) { # interactive() || isTRUE(Sys.getenv("R_DOC_BUILD") == "true")
mod <- lm(mpg ~ hp * drat * factor(am), data = mtcars)
plot_comparisons(mod, variables = "hp", condition = "drat")
plot_comparisons(mod, variables = "hp", condition = c("drat", "am"))
plot_comparisons(mod, variables = "hp", condition = list("am", "drat" = 3:5))
plot_comparisons(mod, variables = "am", condition = list("hp", "drat" = range))
plot_comparisons(mod, variables = "am", condition = list("hp", "drat" = "threenum"))
# marginal comparisons
plot_comparisons(mod, variables = "hp", by = "am")
# marginal comparisons on a counterfactual grid
plot_comparisons(mod,
variables = "hp",
by = "am",
newdata = datagrid(am = 0:1, grid_type = "counterfactual")
)
}
Run the code above in your browser using DataLab