| comb_facs {emmeans} | R Documentation |
Manipulate factors in a reference grid
Description
These functions manipulate the levels of factors comprising a reference grid by combining factor levels, splitting a factor's levels into combinations of newly-defined factors, creating a grouping factor in which factor(s) levels are nested, or permuting the order of levels of a factor
Usage
comb_facs(object, facs, newname = paste(facs, collapse = "."),
drop = FALSE, ...)
split_fac(object, fac, newfacs, ...)
add_grouping(object, newname, refname, newlevs, ...)
permute_levels(object, fac, pos)
Arguments
object |
An object of class |
facs |
Character vector. The names of the factors to combine |
newname |
Character name of grouping factor to add (different from any existing factor in the grid) |
drop |
Logical value. If |
... |
arguments passed to other methods |
fac |
The name of a factor that is part of the grid in |
newfacs |
A named list with the names of new factors
and their levels. The names must not already exist in the object,
and the product of the lengths of the levels must equal the number
of levels of |
refname |
Character name(s) of the reference factor(s) |
newlevs |
Character vector or factor of the same length as that of the (combined) levels for
|
pos |
Integer vector consisting of some permutation of the sequence
|
Value
A modified object of class emmGrid
The comb_facs function
comb_facs combines the levels of factors into a single factor
in the reference grid (similar to interaction). This new factor
replaces the factors that comprise it.
Additional note:
The choice of whether to drop levels or not can make a profound difference.
If the goal is to combine factors for use in joint_tests, we advise against
drop = TRUE because that might change the weights used in deriving marginal means.
If combining factors in a nested structure, dropping unused cases can considerably reduce
the storage required.
The split_fac function
The levels in newfacs are expanded via expand.grid into
combinations of levels, and the factor fac is replaced by those
factor combinations. Unlike add_grouping, this creates a crossed,
rather than a nested structure. Note that the order of factor combinations
is systematic with the levels of first factor in newfacs varying
the fastest; and those factor combinations are assigned respectively
to the levels of fac as displayed in str(object).
The add_grouping function
This function adds a grouping factor to an existing reference grid or other
emmGrid object, such that the levels of one or more existing factors (call them the
reference factors) are mapped to a smaller number of levels of the new
grouping factor. The reference factors are then nested in a
new grouping factor named newname, and a new nesting structure
refname %in% newname.
This facilitates obtaining marginal means of the grouping factor, and
contrasts thereof.
Additional notes: By default, the levels of newname will be ordered
alphabetically. To dictate a different ordering of levels, supply
newlevs as a factor having its levels in the desired order.
When refname specifies more than one factor, this can
fundamentally (and permanently) change what is meant by the levels of those
individual factors. For instance, in the gwrg example below, there
are two levels of wool nested in each prod; and that implies
that we now regard these as four different kinds of wool. Similarly, there
are five different tensions (L, M, H in prod 1, and L, M in prod 2).
The permute_levels function
This function permutes the levels of fac. The returned object
has the same factors, same by variables, but with the levels
of fac permuted.
The order of the columns in object@grid may be altered.
NOTE: fac must not be nested in another factor. permute_levels
throws an error when fac is nested.
NOTE: Permuting the levels of a numeric predictor is tricky. For example,
if you want to display the new ordering of levels in emmip(),
you must add the arguments style = "factor" and nesting.order = TRUE.
Examples
mtcars.lm <- lm(mpg ~ factor(vs)+factor(cyl)*factor(gear), data = mtcars)
(v.c.g <- ref_grid(mtcars.lm))
(v.cg <- comb_facs(v.c.g, c("cyl", "gear")))
# One use is obtaining a single test for the joint contributions of two factors:
joint_tests(v.c.g)
joint_tests(v.cg)
# undo the 'comb_facs' operation:
split_fac(v.cg, "cyl.gear", list(cyl = c(4, 6, 8), gear = 3:5))
IS.glm <- glm(count ~ spray, data = InsectSprays, family = poisson)
IS.emm <- emmeans(IS.glm, "spray")
IS.new <- split_fac(IS.emm, "spray", list(A = 1:2, B = c("low", "med", "hi")))
str(IS.new)
fiber.lm <- lm(strength ~ diameter + machine, data = fiber)
( frg <- ref_grid(fiber.lm) )
# Suppose the machines are two different brands
brands <- factor(c("FiberPro", "FiberPro", "Acme"), levels = c("FiberPro", "Acme"))
( gfrg <- add_grouping(frg, "brand", "machine", brands) )
emmeans(gfrg, "machine")
emmeans(gfrg, "brand")
### More than one reference factor
warp.lm <- lm(breaks ~ wool * tension, data = warpbreaks)
gwrg <- add_grouping(ref_grid(warp.lm),
"prod", c("tension", "wool"), c(2, 1, 1, 1, 2, 1))
# level combinations: LA MA HA LB MB HB
emmeans(gwrg, ~ wool * tension) # some NAs due to impossible combinations
emmeans(gwrg, "prod")
str(v.c.g)
str(permute_levels(v.c.g, "cyl", c(2,3,1)))