Calculates type-II or type-III analysis-of-variance tables for
model objects produced by lm
, glm
, multinom
(in the nnet package), polr
(in the MASS
package), coxph
(in the survival package),
coxme
(in the coxme pckage),
svyglm
and svycoxph
(in the survey package), rlm
(in the MASS package),
lmer
in the lme4 package,
lme
in the nlme package, and (by the default method) for most
models with a linear predictor and asymptotically normal coefficients (see details below). For linear
models, F-tests are calculated; for generalized linear models,
likelihood-ratio chisquare, Wald chisquare, or F-tests are calculated;
for multinomial logit and proportional-odds logit models, likelihood-ratio
tests are calculated. Various test statistics are provided for multivariate
linear models produced by lm
or manova
. Partial-likelihood-ratio tests
or Wald tests are provided for Cox models. Wald chi-square tests are provided for fixed effects in
linear and generalized linear mixed-effects models. Wald chi-square or F tests are provided
in the default case.
Anova(mod, ...)Manova(mod, ...)
# S3 method for lm
Anova(mod, error, type=c("II","III", 2, 3),
white.adjust=c(FALSE, TRUE, "hc3", "hc0", "hc1", "hc2", "hc4"),
vcov.=NULL, singular.ok, ...)
# S3 method for aov
Anova(mod, ...)
# S3 method for glm
Anova(mod, type=c("II","III", 2, 3),
test.statistic=c("LR", "Wald", "F"),
error, error.estimate=c("pearson", "dispersion", "deviance"),
vcov.=vcov(mod, complete=TRUE), singular.ok, ...)
# S3 method for multinom
Anova(mod, type = c("II","III", 2, 3), ...)
# S3 method for polr
Anova(mod, type = c("II","III", 2, 3), ...)
# S3 method for mlm
Anova(mod, type=c("II","III", 2, 3), SSPE, error.df,
idata, idesign, icontrasts=c("contr.sum", "contr.poly"), imatrix,
test.statistic=c("Pillai", "Wilks", "Hotelling-Lawley", "Roy"),...)
# S3 method for manova
Anova(mod, ...)
# S3 method for mlm
Manova(mod, ...)
# S3 method for Anova.mlm
print(x, ...)
# S3 method for Anova.mlm
summary(object, test.statistic, univariate=object$repeated,
multivariate=TRUE, p.adjust.method, ...)
# S3 method for summary.Anova.mlm
print(x, digits = getOption("digits"),
SSP=TRUE, SSPE=SSP, ... )
# S3 method for univaov
print(x, digits = max(getOption("digits") - 2L, 3L),
style=c("wide", "long"),
by=c("response", "term"),
...)
# S3 method for univaov
as.data.frame(x, row.names, optional, by=c("response", "term"), ...)
# S3 method for coxph
Anova(mod, type=c("II", "III", 2, 3),
test.statistic=c("LR", "Wald"), ...)
# S3 method for coxme
Anova(mod, type=c("II", "III", 2, 3),
test.statistic=c("Wald", "LR"), ...)
# S3 method for lme
Anova(mod, type=c("II","III", 2, 3),
vcov.=vcov(mod, complete=FALSE), singular.ok, ...)
# S3 method for mer
Anova(mod, type=c("II", "III", 2, 3),
test.statistic=c("Chisq", "F"), vcov.=vcov(mod, complete=FALSE), singular.ok, ...)
# S3 method for merMod
Anova(mod, type=c("II", "III", 2, 3),
test.statistic=c("Chisq", "F"), vcov.=vcov(mod, complete=FALSE), singular.ok, ...)
# S3 method for svyglm
Anova(mod, ...)
# S3 method for svycoxph
Anova(mod, type=c("II", "III", 2, 3),
test.statistic="Wald", ...)
# S3 method for rlm
Anova(mod, ...)
# S3 method for default
Anova(mod, type=c("II", "III", 2, 3),
test.statistic=c("Chisq", "F"), vcov.=vcov(mod, complete=FALSE),
singular.ok, error.df, ...)
An object of class "anova"
, or "Anova.mlm"
, which usually is printed.
For objects of class "Anova.mlm"
, there is also a summary
method,
which provides much more detail than the print
method about the MANOVA, including
traditional mixed-model univariate F-tests with Greenhouse-Geisser and Huynh-Feldt
corrections.
lm
, aov
, glm
, multinom
, polr
mlm
, coxph
, coxme
, lme
, mer
, merMod
, svyglm
, svycoxph
,
rlm
, or other suitable model object.
for a linear model, an lm
model object from which the
error sum of squares and degrees of freedom are to be calculated. For
F-tests for a generalized linear model, a glm
object from which the
dispersion is to be estimated. If not specified, mod
is used.
type of test, "II"
, "III"
, 2
, or 3
. Roman numerals are equivalent to
the corresponding Arabic numerals.
defaults to TRUE
for type-II tests, and FALSE
for type-III tests where the tests for models with aliased coefficients
will not be straightforwardly interpretable;
if FALSE
, a model with aliased coefficients produces an error. This argument is available only for some Anova
methods.
for a generalized linear model, whether to calculate
"LR"
(likelihood-ratio), "Wald"
, or "F"
tests; for a Cox
or Cox mixed-effects model, whether to calculate "LR"
(partial-likelihood ratio) or
"Wald"
tests; in the default case or for linear mixed models fit by
lmer
, whether to calculate Wald "Chisq"
or Kenward-Roger
"F"
tests with Satterthwaite degrees of freedom (warning: the KR F-tests
can be very time-consuming).
For a multivariate linear model, the multivariate test statistic to compute --- one of
"Pillai"
, "Wilks"
, "Hotelling-Lawley"
, or "Roy"
,
with "Pillai"
as the default. The summary
method for Anova.mlm
objects permits the specification of more than one multivariate
test statistic, and the default is to report all four.
for F-tests for a generalized linear model, base the
dispersion estimate on the Pearson residuals ("pearson"
, the default); use the
dispersion estimate in the model object ("dispersion"
); or base the dispersion estimate on
the residual deviance ("deviance"
). For binomial or Poisson GLMs, where the dispersion
is fixed to 1, setting error.estimate="dispersion"
is changed to "pearson"
,
with a warning.
if not FALSE
, the default,
tests use a heteroscedasticity-corrected coefficient
covariance matrix; the various values of the argument specify different corrections.
See the documentation for hccm
for details. If white.adjust=TRUE
then the "hc3"
correction is selected.
For Anova
for a multivariate linear model, the
error sum-of-squares-and-products matrix; if missing, will be computed
from the residuals of the model; for the print
method for the summary
of
an Anova
of a multivariate linear model,
whether or not to print the error SSP matrix (defaults to TRUE
).
if TRUE
(the default), print the sum-of-squares and
cross-products matrix for the hypothesis and the response-transformation matrix.
The degrees of freedom for error; if error.df
missing for a multivariate linear model (object of class "mlm"
), the error degrees of freedom will be taken from the model.
For the default
Anova
method, if an F-test is requested and if error.df
is missing, the error degrees of freedom will be computed by applying the df.residual
function to the model; if df.residual
returns NULL
or NA
, then a chi-square test will be substituted for the F-test (with a message to that effect.
an optional data frame giving a factor or factors defining the intra-subject model for multivariate repeated-measures data. See Details for an explanation of the intra-subject design and for further explanation of the other arguments relating to intra-subject factors.
a one-sided model formula using the ``data'' in idata
and
specifying the intra-subject design.
names of contrast-generating functions to be applied by default
to factors and ordered factors, respectively, in the within-subject
``data''; the contrasts must produce an intra-subject model
matrix in which different terms are orthogonal. The default is
c("contr.sum", "contr.poly")
.
as an alternative to specifying idata
, idesign
, and
(optionally) icontrasts
, the model matrix for the within-subject design
can be given directly in the form of list of named elements. Each element gives
the columns of the within-subject model matrix for a term to be tested, and must
have as many rows as there are responses; the columns of the within-subject model
matrix for different terms must be mutually orthogonal.
object of class "Anova.mlm"
to print or summarize.
compute and print multivariate and univariate tests for a repeated-measures
ANOVA or multivariate linear model; the default is TRUE
for both for repeated measures and TRUE
for multivariate
for a multivariate linear model.
if given for a multivariate linear model when univariate tests are requested, the
univariate tests are corrected for simultaneous inference by term; if specified, should be one of the methods
recognized by p.adjust
or TRUE
, in which case the default (Holm) adjustment is used.
minimum number of significant digits to print.
for printing univariate tests if requested for a multivariate linear model; one of "wide"
,
the default, or "long"
.
if univariate tests are printed in "long"
style
, they can be ordered by
"response"
, the default, or by "term"
.
not used.
in the default
method, an optional coefficient-covariance matrix or function
to compute a covariance matrix, computed by default by applying the generic vcov
function to the model object.
A similar argument may be supplied to the lm
method, and the default (NULL
) is to ignore the argument;
if both vcov.
and white.adjust
are supplied to the lm
method, the latter is used.
In the glm
method, vcov.
is ignored unless test="Wald"
; in the mer
and merMod
methods, vcov.
is ignored if test="F"
.
do not use.
John Fox jfox@mcmaster.ca; the code for the Mauchly test and Greenhouse-Geisser and Huynh-Feldt
corrections for non-spericity in repeated-measures ANOVA are adapted from the functions
stats:::stats:::mauchly.test.SSD
and stats:::sphericity
by R Core; summary.Anova.mlm
and print.summary.Anova.mlm
incorporates code contributed by Gabriel Baud-Bovy.
Be careful of type-III tests: For a traditional multifactor ANOVA model with interactions, for example, these tests will normally only be sensible when using contrasts that, for different terms, are
orthogonal in the row-basis of the model, such as those produced by contr.sum
, contr.poly
, or contr.helmert
, but not by the default
contr.treatment
. In a model that contains factors, numeric covariates, and interactions, main-effect tests for factors will be for differences over the origin. In contrast (pun intended),
type-II tests are invariant with respect to (full-rank) contrast coding. If you don't understand this issue, then you probably shouldn't use Anova
for type-III tests.
The designations "type-II" and "type-III" are borrowed from SAS, but the definitions used here do not correspond precisely to those employed by SAS. Type-II tests are calculated according to the principle of marginality, testing each term after all others, except ignoring the term's higher-order relatives; so-called type-III tests violate marginality, testing each term in the model after all of the others. This definition of Type-II tests corresponds to the tests produced by SAS for analysis-of-variance models, where all of the predictors are factors, but not more generally (i.e., when there are quantitative predictors). Be very careful in formulating the model for type-III tests, or the hypotheses tested will not make sense.
As implemented here, type-II Wald tests are a generalization of the linear hypotheses used to generate these tests in linear models.
For tests for linear models, multivariate linear models, and Wald tests for generalized linear models,
Cox models, mixed-effects models, generalized linear models fit to survey data, and in the default case,
Anova
finds the test statistics without refitting the model. The svyglm
method simply
calls the default
method and therefore can take the same arguments.
The standard R anova
function calculates sequential ("type-I") tests.
These rarely test interesting hypotheses in unbalanced designs.
A MANOVA for a multivariate linear model (i.e., an object of
class "mlm"
or "manova"
) can optionally include an
intra-subject repeated-measures design.
If the intra-subject design is absent (the default), the multivariate
tests concern all of the response variables.
To specify a repeated-measures design, a data frame is provided defining the repeated-measures factor or
factors
via idata
, with default contrasts given by the icontrasts
argument. An intra-subject model-matrix is generated from the formula
specified by the idesign
argument; columns of the model matrix
corresponding to different terms in the intra-subject model must be orthogonal
(as is insured by the default contrasts). Note that the contrasts given in
icontrasts
can be overridden by assigning specific contrasts to the
factors in idata
. As an alternative, the within-subjects model matrix
can be specified directly via the imatrix
argument.
Manova
is essentially a synonym for Anova
for multivariate linear models.
If univariate tests are requested for the summary
of a multivariate linear model, the object returned
contains a univaov
component of "univaov"
; print
and as.data.frame
methods are
provided for the "univaov"
class.
For the default method to work, the model object must contain a standard
terms
element, and must respond to the vcov
, coef
, and model.matrix
functions.
If any of these requirements is missing, then it may be possible to supply it reasonably simply (e.g., by
writing a missing vcov
method for the class of the model object).
Fox, J. (2016) Applied Regression Analysis and Generalized Linear Models, Third Edition. Sage.
Fox, J. and Weisberg, S. (2019) An R Companion to Applied Regression, Third Edition, Sage.
Hand, D. J., and Taylor, C. C. (1987) Multivariate Analysis of Variance and Repeated Measures: A Practical Approach for Behavioural Scientists. Chapman and Hall.
O'Brien, R. G., and Kaiser, M. K. (1985) MANOVA method for analyzing repeated measures designs: An extensive primer. Psychological Bulletin 97, 316--333.
## Two-Way Anova
mod <- lm(conformity ~ fcategory*partner.status, data=Moore,
contrasts=list(fcategory=contr.sum, partner.status=contr.sum))
Anova(mod)
Anova(mod, type=3) # note use of contr.sum in call to lm()
## One-Way MANOVA
## See ?Pottery for a description of the data set used in this example.
summary(Anova(lm(cbind(Al, Fe, Mg, Ca, Na) ~ Site, data=Pottery)))
## MANOVA for a randomized block design (example courtesy of Michael Friendly:
## See ?Soils for description of the data set)
soils.mod <- lm(cbind(pH,N,Dens,P,Ca,Mg,K,Na,Conduc) ~ Block + Contour*Depth,
data=Soils)
Manova(soils.mod)
summary(Anova(soils.mod), univariate=TRUE, multivariate=FALSE,
p.adjust.method=TRUE)
## a multivariate linear model for repeated-measures data
## See ?OBrienKaiser for a description of the data set used in this example.
phase <- factor(rep(c("pretest", "posttest", "followup"), c(5, 5, 5)),
levels=c("pretest", "posttest", "followup"))
hour <- ordered(rep(1:5, 3))
idata <- data.frame(phase, hour)
idata
mod.ok <- lm(cbind(pre.1, pre.2, pre.3, pre.4, pre.5,
post.1, post.2, post.3, post.4, post.5,
fup.1, fup.2, fup.3, fup.4, fup.5) ~ treatment*gender,
data=OBrienKaiser)
(av.ok <- Anova(mod.ok, idata=idata, idesign=~phase*hour))
summary(av.ok, multivariate=FALSE)
## A "doubly multivariate" design with two distinct repeated-measures variables
## (example courtesy of Michael Friendly)
## See ?WeightLoss for a description of the dataset.
imatrix <- matrix(c(
1,0,-1, 1, 0, 0,
1,0, 0,-2, 0, 0,
1,0, 1, 1, 0, 0,
0,1, 0, 0,-1, 1,
0,1, 0, 0, 0,-2,
0,1, 0, 0, 1, 1), 6, 6, byrow=TRUE)
colnames(imatrix) <- c("WL", "SE", "WL.L", "WL.Q", "SE.L", "SE.Q")
rownames(imatrix) <- colnames(WeightLoss)[-1]
(imatrix <- list(measure=imatrix[,1:2], month=imatrix[,3:6]))
contrasts(WeightLoss$group) <- matrix(c(-2,1,1, 0,-1,1), ncol=2)
(wl.mod<-lm(cbind(wl1, wl2, wl3, se1, se2, se3)~group, data=WeightLoss))
Anova(wl.mod, imatrix=imatrix, test="Roy")
## mixed-effects models examples:
if (FALSE) # loads nlme package
library(nlme)
example(lme)
Anova(fm2)
if (FALSE) # loads lme4 package
library(lme4)
example(glmer)
Anova(gm1)
Run the code above in your browser using DataLab