Objects of class emmGrid
contain several settings that affect such things as
what arguments to pass to summary.emmGrid
.
The update
method allows safer management of these settings than
by direct modification of its slots.
Arguments
- object
An
emmGrid
object- ...
Options to be set. These must match a list of known options (see Details)
- silent
Logical value. If
FALSE
(the default), a message is displayed if any options are not matched. IfTRUE
, no messages are shown.- x
an
emmGrid
object- value
list
or replacement levels. See the documentation forupdate.emmGrid
with thelevels
argument, as well as the section below on “Replaciong levels”- by.vars, mesg
Attributes that can be altered in
update.summary_emm
Value
an updated emmGrid
object.
levels<-
replaces the levels of the object in-place.
See the section on replacing levels for details.
Note
When it makes sense, an option set by update
will persist into
future results based on that object. But some options are disabled as well.
For example, a calc
option will be nulled-out if contrast
is called, because it probably will not make sense to do the same
calculations on the contrast results, and in fact the variable(s) needed
may not even still exist.
factor(percent)
.
Details
The names in ...
are partially matched against those that are valid, and if a match is found, it adds or replaces the current setting. The valid names are
tran
,tran2
(
list
orcharacter
) specifies the transformation which, when inverted, determines the results displayed bysummary.emmGrid
,predict.emmGrid
, oremmip
whentype="response"
. The value may be the name of a standard transformation frommake.link
or additional ones supported by name, such as"log2"
; or, for a custom transformation, alist
containing at least the functionslinkinv
(the inverse of the transformation) andmu.eta
(the derivative thereof). Themake.tran
function returns such lists for a number of popular transformations. See the help page ofmake.tran
for details as well as information on the additional named transformations that are supported.tran2
is just liketran
except it is a second transformation (i.e., a response transformation in a generalized linear model).tran.mult
Multiple for
tran
. For example, for the response transformation 2*sqrt(y) (or sqrt(y) + sqrt(y + 1), for that matter), we should havetran = "sqrt"
andtran.mult = 2
. If absent, a multiple of 1 is assumed.tran.offset
Additive constant before a transformation is applied. For example, a response transformation of
log(y + pi)
hastran.offset = pi
. If no value is present, an offset of 0 is assumed.estName
(
character
) is the column label used for displaying predictions or EMMs.inv.lbl
(
character)
) is the column label to use for predictions or EMMs whentype="response"
.by.vars
(
character)
vector orNULL
) the variables used for grouping in the summary, and also for defining subfamilies in a call tocontrast
.pri.vars
(
character
vector) are the names of the grid variables that are not inby.vars
. Thus, the combinations of their levels are used as columns in each table produced bysummary.emmGrid
.alpha
(numeric) is the default significance level for tests, in
summary.emmGrid
as well asplot.emmGrid
when CIs = TRUE. Be cautious that methods that depend on specifyingalpha
are prone to abuse. See the discussion invignette("basics", "emmeans")
.adjust
(
character)
) is the default for theadjust
argument insummary.emmGrid
.cross.adjust
(
character)
) is the default for thecross.adjust
argument insummary.emmGrid
(used for adjusting between groups).famSize
(integer) is the number of means involved in a family of inferences; used in Tukey adjustment
infer
(
logical
vector of length 2) is the default value ofinfer
insummary.emmGrid
.level
(numeric) is the default confidence level,
level
, insummary.emmGrid
. Note: You must specify all five letters of ‘level’ to distinguish it from the slot name ‘levels’.df
(numeric) overrides the default degrees of freedom with a specified single value.
calc
(list) additional calculated columns. See
summary.emmGrid
.null
(numeric) null hypothesis for
summary
ortest
(taken to be zero if missing).side
(numeric or character)
side
specification for forsummary
ortest
(taken to be zero if missing).sigma
(numeric) Error SD to use in predictions and for bias-adjusted back-transformations
delta
(numeric)
delta
specification forsummary
ortest
(taken to be zero if missing).predict.type
ortype
(character) sets the default method of displaying predictions in
summary.emmGrid
,predict.emmGrid
, andemmip
. Valid values are"link"
(with synonyms"lp"
and"linear"
), or"response"
.bias.adjust
,frequentist
(logical) These are used by
summary
if the value of these arguments are not specified.estType
(
character
) is used internally to determine whatadjust
methods are appropriate. It should match one of c("prediction", "contrast", "pairs"). As an example of why this is needed, the Tukey adjustment should only be used for pairwise comparisons (estType = "pairs"
); ifestType
is some other string, Tukey adjustments are not allowed.avgd.over
(
character)
vector) are the names of the variables whose levels are averaged over in obtaining marginal averages of predictions, i.e., estimated marginal means. Changing this might produce a misleading printout, but setting it tocharacter(0)
will suppress the “averaged over” message in the summary.initMesg
(
character
) is a string that is added to the beginning of any annotations that appear below thesummary.emmGrid
display.methDesc
(
character
) is a string that may be used for creating names for a list ofemmGrid
objects.nesting
(Character or named
list
) specifies the nesting structure. See “Recovering or overriding model information” in the documentation forref_grid
. The current nesting structure is displayed bystr.emmGrid
.levels
named
list
of new levels for the elements of the currentemmGrid
. The list name(s) are used as new variable names, and if needed, the list is expanded usingexpand.grid
. These results replace current variable names and levels. This specification changes thelevels
,grid
,roles
, andmisc
slots in the updatedemmGrid
, and resetspri.vars
,by.vars
,adjust
,famSize
, andavgd.over
. In addition, if there is nesting of factors, that may be altered; a warning is issued if it involves something other than mere name changes. Note: All six letters oflevels
is needed in order to distinguish it fromlevel
.submodel
formula
orcharacter
value specifying a submodel (requires this feature being supported by underlying methods for the model class). When specified, thelinfct
slot is replaced by its aliases for the specified sub-model. Any factors in the sub-model that do not appear in the model matrix are ignored, as are any interactions that are not in the main model, and any factors associate with multivariate responses. The estimates displayed are then computed as if the sub-model had been fitted. (However, the standard errors will be based on the error variance(s) of the full model.) Note: The formula should refer only to predictor names, excluding any function calls (such asfactor
orpoly
) that appear in the original model formula. See the example.The character values allowed should partially match
"minimal"
or"type2"
. With"minimal"
, the sub-model is taken to be the one only involving the surviving factors inobject
(the ones averaged over being omitted). Specifying"type2"
is the same as"minimal"
except only the highest-order term in the submodel is retained, and all effects not containing it are orthogonalized-out. Thus, in a purely linear situation such as anlm
model, the joint test of the modified object is in essence a type-2 test as incar::Anova
.Please note that it is possible (or even likely) that there will be disparity between the
grid
andlinfct
slots when a submodel is used. This is becausegrid
contains the claimed values of the predictors andlinfct
contains aliases of them computed from the submodel.For some objects such as generalized linear models, specifying
submodel
will typically not produce the same estimates or type-2 tests as would be obtained by actually fitting a separate model with those specifications. The reason is that those models are fitted by iterative-reweighting methods, whereas thesubmodel
calculations preserve the final weights used in fitting the full model.- (any other slot name)
If the name matches an element of
slotNames(object)
other thanlevels
, that slot is replaced by the supplied value, if it is of the required class (otherwise an error occurs).The user must be very careful in replacing slots because they are interrelated; for example, the lengths and dimensions of
grid
,linfct
,bhat
, andV
must conform.
Replacing levels
The levels<-
method uses update.emmGrid
to replace the
levels of one or more factors. This method allows selectively replacing
the levels of just one factor (via subsetting operators), whereas
update(x, levels = list(...))
requires a list of all factors
and their levels. If any factors are to be renamed, we must replace all
levels and include the new names in the replacements. See the examples.
Method for summary_emm
objects
This method exists so that we can change the way a summary is displayed, by changing the by variables or the annotations.
Examples
# Using an already-transformed response:
pigs.lm <- lm(log(conc) ~ source * factor(percent), data = pigs)
# Reference grid that knows about the transformation
# and asks to include the sample size in any summaries:
pigs.rg <- update(ref_grid(pigs.lm), tran = "log",
predict.type = "response",
calc = c(n = ~.wgt.))
emmeans(pigs.rg, "source")
#> NOTE: Results may be misleading due to involvement in interactions
#> source response SE df n lower.CL upper.CL
#> fish 29.9 1.12 17 10 27.6 32.3
#> soy 38.9 1.60 17 10 35.7 42.4
#> skim 46.1 1.97 17 9 42.1 50.4
#>
#> Results are averaged over the levels of: percent
#> Confidence level used: 0.95
#> Intervals are back-transformed from the log scale
# Obtain estimates for the additive model
# [Note that the submodel refers to 'percent', not 'factor(percent)']
emmeans(pigs.rg, "source", submodel = ~ source + percent)
#> NOTE: Results may be misleading due to involvement in interactions
#> source response SE df n lower.CL upper.CL
#> fish 29.8 1.10 17 10 27.6 32.2
#> soy 39.1 1.48 17 10 36.1 42.4
#> skim 44.6 1.77 17 9 41.0 48.5
#>
#> Results are averaged over the levels of: percent
#> submodel: ~ source + percent
#> Confidence level used: 0.95
#> Intervals are back-transformed from the log scale
# Type II ANOVA
joint_tests(pigs.rg, submodel = "type2")
#> model term df1 df2 F.ratio p.value
#> source 2 17 28.291 <.0001
#> percent 3 17 7.827 0.0017
#> source:percent 6 17 0.926 0.5011
#>
## Changing levels of one factor
newrg <- pigs.rg
levels(newrg)$source <- 1:3
newrg
#> source percent response SE df n
#> 1 9 25.7 2.11 17 2
#> 2 9 34.4 2.31 17 3
#> 3 9 35.2 2.36 17 3
#> 1 12 30.9 2.07 17 3
#> 2 12 39.6 2.66 17 3
#> 3 12 43.2 2.90 17 3
#> 1 15 31.0 2.55 17 2
#> 2 15 39.2 2.63 17 3
#> 3 15 49.6 4.08 17 2
#> 1 18 32.3 2.17 17 3
#> 2 18 42.9 4.99 17 1
#> 3 18 59.8 6.95 17 1
#>
## Unraveling a previously standardized covariate
zd = scale(fiber$diameter)
fibz.lm <- lm(strength ~ machine * zd, data = fiber)
(fibz.rg <- ref_grid(fibz.lm, at = list(zd = -2:2))) ### 2*SD range
#> machine zd prediction SE df
#> A -2 30.7 2.020 9
#> B -2 34.2 2.470 9
#> C -2 31.1 1.410 9
#> A -1 35.4 1.280 9
#> B -1 37.9 1.580 9
#> C -1 34.8 0.803 9
#> A 0 40.2 0.777 9
#> B 0 41.6 0.858 9
#> C 0 38.5 0.966 9
#> A 1 45.0 0.979 9
#> B 1 45.3 0.929 9
#> C 1 42.3 1.690 9
#> A 2 49.8 1.650 9
#> B 2 49.0 1.690 9
#> C 2 46.0 2.520 9
#>
lev <- levels(fibz.rg)
levels(fibz.rg) <- list (
machine = lev$machine,
diameter = with(attributes(zd),
`scaled:center` + `scaled:scale` * lev$zd) )
fibz.rg
#> machine diameter prediction SE df
#> A 15.5 30.7 2.020 9
#> B 15.5 34.2 2.470 9
#> C 15.5 31.1 1.410 9
#> A 19.8 35.4 1.280 9
#> B 19.8 37.9 1.580 9
#> C 19.8 34.8 0.803 9
#> A 24.1 40.2 0.777 9
#> B 24.1 41.6 0.858 9
#> C 24.1 38.5 0.966 9
#> A 28.5 45.0 0.979 9
#> B 28.5 45.3 0.929 9
#> C 28.5 42.3 1.690 9
#> A 32.8 49.8 1.650 9
#> B 32.8 49.0 1.690 9
#> C 32.8 46.0 2.520 9
#>
### Compactify results with a by variable
update(joint_tests(pigs.rg, by = "source"), by = NULL)
#> model term source df1 df2 F.ratio p.value
#> percent fish 3 17 1.712 0.2023
#> percent soy 3 17 1.290 0.3097
#> percent skim 3 17 6.676 0.0035
#>