\Header{aov}{Fit an Analysis of Variance Model}
\alias{Error}{aov}
\alias{print.aov}{aov}
\alias{print.aovlist}{aov}
\keyword{models}{aov}
\keyword{regression}{aov}
\begin{Description}\relax
Fit an analysis of variance model by a call to \code{lm} for each stratum.\end{Description}
\begin{Usage}
\begin{verbatim}
aov(formula, data = NULL, projections = FALSE, qr = TRUE,
    contrasts = NULL, ...)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{formula}] A formula specifying the model.
\item[\code{data}] A data frame in which the variables specified in the
formula will be found. If missing, the variables are searched for in
the standard way.
\item[\code{projections}] Logical flag: should the projections be returned?
\item[\code{qr}] Logical flag: should the QR decomposition be returned?
\item[\code{contrasts}] A list of contrasts to be used for some of the factors
in the formula. These are not used for any \code{Error} term, and
supplying contrasts for factors only in the \code{Error} term will give
a warning.
\item[\code{...}] Arguments to be passed to \code{lm}, such as \code{subset}
or \code{na.action}.
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
This provides a wrapper to \code{lm} for fitting linear models to
balanced or unbalanced experimental designs.

The main difference from \code{lm} is in the way \code{print},
\code{summary} and so on handle the fit: this is expressed in the
traditional language of the analysis of variance rather than of linear
models.

If the formula contains a single \code{Error} term, this is used to
specify error strata, and appropriate models are fitted within each
error stratum.

The formula can specify multiple responses.

Weights can be specified by a \code{weights} argument, but should not
be used with an \code{Error} term, and are incompletely supported
(e.g., not by \code{\Link{model.tables}}).\end{Details}
\begin{Value}
An object of class \code{c("aov", "lm")} or for multiple responses
of class \code{c("maov", "aov", "mlm", "lm")} or for multiple error
strata of class \code{"aovlist"}.  There are
\code{\Link{print}} and \code{\Link{summary}} methods available for these.\end{Value}
\begin{Author}\relax
The design was inspired by the S function of the same name described
in Chambers \emph{et al.} (1992).\end{Author}
\begin{References}\relax
Chambers, J. M., Freeny, A and Heiberger, R. M. (1992)
\emph{Analysis of variance; designed experiments.}
Chapter 5 of \emph{Statistical Models in S}
eds J. M. Chambers and T. J. Hastie, Wadsworth \& Brooks/Cole.\end{References}
\begin{SeeAlso}\relax
\code{\Link{lm}}, \code{\Link{summary.aov}}, \code{\Link{alias}},
\code{\Link{proj}}, \code{\Link{model.tables}}, \code{\Link{TukeyHSD}}\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
## From Venables and Ripley (2002) p.165.
N <- c(0,1,0,1,1,1,0,0,0,1,1,0,1,1,0,0,1,0,1,0,1,1,0,0)
P <- c(1,1,0,0,0,1,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,0)
K <- c(1,0,0,1,0,1,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0)
yield <- c(49.5,62.8,46.8,57.0,59.8,58.5,55.5,56.0,62.8,55.8,69.5,55.0,
           62.0,48.8,45.5,44.2,52.0,51.5,49.8,48.8,57.2,59.0,53.2,56.0)
npk <- data.frame(block=gl(6,4), N=factor(N), P=factor(P),
                  K=factor(K), yield=yield)

( npk.aov <- aov(yield ~ block + N*P*K, npk) )
summary(npk.aov)
coefficients(npk.aov)

## as a test, not particularly sensible statistically
op <- options(contrasts=c("contr.helmert", "contr.treatment"))
npk.aovE <- aov(yield ~  N*P*K + Error(block), npk)
npk.aovE
summary(npk.aovE)
options(op)# reset to previous
\end{ExampleCode}
\end{Examples}

