% File src/library/stats/man/contrasts.Rd % Part of the R package, https://www.R-project.org % Copyright 1995-2021 R Core Team % Distributed under GPL 2 or later \name{contrasts} \alias{contrasts} \alias{contrasts<-} \title{Get and Set Contrast Matrices} \description{ Set and view the contrasts associated with a factor. } \usage{ contrasts(x, contrasts = TRUE, sparse = FALSE) contrasts(x, how.many = NULL) <- value } \arguments{ \item{x}{a factor or a logical variable.} \item{contrasts}{logical. See \sQuote{Details}.} \item{sparse}{logical indicating if the result should be sparse (of class \code{\link[Matrix:dgCMatrix-class]{dgCMatrix}}), using package \CRANpkg{Matrix}.} \item{how.many}{integer number indicating how many contrasts should be made. Defaults to one less than the number of levels of \code{x}. This need not be the same as the number of columns of \code{value}.} \item{value}{either a numeric matrix (or a sparse or dense matrix of a class extending \code{\link[Matrix:dMatrix-class]{dMatrix}} from package \CRANpkg{Matrix}) whose columns give coefficients for contrasts in the levels of \code{x}, or (the quoted name of) a function which computes such matrices.} } \details{ If contrasts are not set for a factor the default functions from \code{\link{options}("contrasts")} are used. A logical vector \code{x} is converted into a two-level factor with levels \code{c(FALSE, TRUE)} (regardless of which levels occur in the variable). The argument \code{contrasts} is ignored if \code{x} has a matrix \code{contrasts} attribute set. Otherwise if \code{contrasts = TRUE} it is passed to a contrasts function such as \code{\link{contr.treatment}} and if \code{contrasts = FALSE} an identity matrix is returned. Suitable functions have a first argument which is the character vector of levels, a named argument \code{contrasts} (always called with \code{contrasts = TRUE}) and optionally a logical argument \code{sparse}. If \code{value} supplies more than \code{how.many} contrasts, the first \code{how.many} are used. If too few are supplied, a suitable contrast matrix is created by extending \code{value} after ensuring its columns are contrasts (orthogonal to the constant term) and not collinear. } \references{ Chambers, J. M. and Hastie, T. J. (1992) \emph{Statistical models.} Chapter 2 of \emph{Statistical Models in S} eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole. } \seealso{ \code{\link{C}},% ./zC.Rd \code{\link{contr.helmert}}, \code{\link{contr.poly}}, \code{\link{contr.sum}}, \code{\link{contr.treatment}}; \code{\link{glm}}, \code{\link{aov}}, \code{\link{lm}}. } \examples{ utils::example(factor) fff <- ff[, drop = TRUE] # reduce to 5 levels. contrasts(fff) # treatment contrasts by default contrasts(C(fff, sum)) contrasts(fff, contrasts = FALSE) # the 5x5 identity matrix contrasts(fff) <- contr.sum(5); contrasts(fff) # set sum contrasts contrasts(fff, 2) <- contr.sum(5); contrasts(fff) # set 2 contrasts # supply 2 contrasts, compute 2 more to make full set of 4. contrasts(fff) <- contr.sum(5)[, 1:2]; contrasts(fff) \donttest{## using sparse contrasts: % useful, once model.matrix() works with these : ffs <- fff contrasts(ffs) <- contr.sum(5, sparse = TRUE)[, 1:2]; contrasts(ffs) stopifnot(all.equal(ffs, fff)) contrasts(ffs) <- contr.sum(5, sparse = TRUE); contrasts(ffs) }} \keyword{design} \keyword{regression}