
The emtrends
function is useful when a fitted model involves a
numerical predictor a
(typically a factor). Such models specify that emmeans
setting, we construct a
reference grid of these predicted trends, and then possibly average them over
some of the predictors in the grid.
emtrends(object, specs, var, delta.var = 0.001 * rng, max.degree = 1, ...)
An emmGrid
or emm_list
object, according to specs
.
See emmeans
for more details on when a list is returned.
A supported model object (not a reference grid)
Specifications for what marginal trends are desired -- as in
emmeans
. If specs
is missing or NULL
,
emmeans
is not run and the reference grid for specified trends
is returned.
Character value giving the name of a variable with respect to
which a difference quotient of the linear predictors is computed. In order
for this to be useful, var
should be a numeric predictor that
interacts with at least one factor in specs
. Then instead of
computing EMMs, we compute and compare the slopes of the var
trend
over levels of the specified other predictor(s). As in EMMs, marginal
averages are computed for the predictors in specs
and by
.
See also the “Generalizations” section below.
The value of h to use in forming the difference
quotient var
over the
dataset.
Integer value. The maximum degree of trends to compute (this
is capped at 5). If greater than 1, an additional factor degree
is
added to the grid, with corresponding numerical derivatives of orders
1, 2, ..., max.degree
as the estimates.
Additional arguments passed to ref_grid
or
emmeans
as appropriate. See Details.
Instead of a single predictor, the user may specify some monotone function of
one variable, e.g., var = "log(dose)"
. If so, the chain rule is
applied. Note that, in this example, if object
contains
log(dose)
as a predictor, we will be comparing the slopes estimated by
that model, whereas specifying var = "dose"
would perform a
transformation of those slopes, making the predicted trends vary depending on
dose
.
The function works by constructing reference grids for object
with
various values of var
, and then calculating difference quotients of predictions
from those reference grids. Finally, emmeans
is called with
the given specs
, thus computing marginal averages as needed of
the difference quotients. Any ...
arguments are passed to the
ref_grid
and emmeans
; examples of such optional
arguments include optional arguments (often mode
) that apply to
specific models; ref_grid
options such as data
, at
,
cov.reduce
, mult.names
, nesting
, or transform
;
and emmeans
options such as weights
(but please avoid
trend
or offset
.
emmeans
, ref_grid
fiber.lm <- lm(strength ~ diameter*machine, data=fiber)
# Obtain slopes for each machine ...
( fiber.emt <- emtrends(fiber.lm, "machine", var = "diameter") )
# ... and pairwise comparisons thereof
pairs(fiber.emt)
# Suppose we want trends relative to sqrt(diameter)...
emtrends(fiber.lm, ~ machine | diameter, var = "sqrt(diameter)",
at = list(diameter = c(20, 30)))
# Obtaining a reference grid
mtcars.lm <- lm(mpg ~ poly(disp, degree = 2) * (factor(cyl) + factor(am)), data = mtcars)
# Center trends at mean disp for each no. of cylinders
mtcTrends.rg <- emtrends(mtcars.lm, var = "disp",
cov.reduce = disp ~ factor(cyl))
summary(mtcTrends.rg) # estimated trends at grid nodes
emmeans(mtcTrends.rg, "am", weights = "prop")
### Higher-degree trends ...
pigs.poly <- lm(conc ~ poly(percent, degree = 3), data = pigs)
emt <- emtrends(pigs.poly, ~ degree | percent, "percent", max.degree = 3,
at = list(percent = c(9, 13.5, 18)))
# note: 'degree' is an extra factor created by 'emtrends'
summary(emt, infer = c(TRUE, TRUE))
# Compare above results with poly contrasts when 'percent' is modeled as a factor ...
pigs.fact <- lm(conc ~ factor(percent), data = pigs)
emm <- emmeans(pigs.fact, "percent")
contrast(emm, "poly")
# Some P values are comparable, some aren't! See Note in documentation
Run the code above in your browser using DataLab