Rev 77208 | Rev 84026 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{sigma}\title{Extract Residual Standard Deviation 'Sigma'}\alias{sigma}\alias{sigma.default}% lm, nls, glm\alias{sigma.mlm}\description{Extract the estimated standard deviation of the errors, the\dQuote{residual standard deviation} (misnamed also\dQuote{residual standard error}, e.g., in\code{\link{summary.lm}()}'s output, from a fitted model).Many classical statistical models have a \emph{scale parameter},typically the standard deviation of a zero-mean normal (or Gaussian)random variable which is denoted as \eqn{\sigma}.\code{sigma(.)} extracts the \emph{estimated} parameter from a fittedmodel, i.e., \eqn{\hat\sigma}{sigma^}.}\usage{sigma(object, ...)\S3method{sigma}{default}(object, use.fallback = TRUE, ...)}\arguments{\item{object}{an \R object, typically resulting from a model fittingfunction such as \code{\link{lm}}.}\item{use.fallback}{logical, passed to \code{\link{nobs}}.}\item{\dots}{potentially further arguments passed to and frommethods. Passed to \code{\link{deviance}(*, ...)} for the default method.}}\details{The \pkg{stats} package provides the S3 generic and a default method.The latter is correct typically for (asymptotically / approximately)generalized gaussian (\dQuote{least squares}) problems, since it isdefined as\preformatted{sigma.default <- function (object, use.fallback = TRUE, ...)sqrt( deviance(object, ...) / (NN - PP) )}where \code{NN <- \link{nobs}(object, use.fallback = use.fallback)}and \code{PP <- sum(!is.na(\link{coef}(object)))} -- where in older \Rversions this was \code{length(coef(object))} which is too large incase of undetermined coefficients, e.g., for rank deficient model fits.}\value{typically a number, the estimated standard deviation of theerrors (\dQuote{residual standard deviation}) for Gaussianmodels, and---less interpretably---the square root of the residualdeviance per degree of freedom in more general models.In some generalized linear modelling (\code{\link{glm}}) contexts,\eqn{sigma^2} (\code{sigma(.)^2}) is called \dQuote{dispersion(parameter)}. Consequently, for well-fitting binomial or PoissonGLMs, \code{sigma} is around 1.Very strictly speaking, \eqn{\hat{\sigma}}{\sigma^} (\dQuote{\eqn{\sigma} hat})is actually \eqn{\sqrt{\widehat{\sigma^2}}}{\sqrt(hat(\sigma^2))}.For multivariate linear models (class \code{"mlm"}), a \emph{vector}of sigmas is returned, each corresponding to one column of \eqn{Y}.}\note{The misnomer \dQuote{Residual standard \bold{error}} has been part oftoo many \R (and S) outputs to be easily changed there.}\seealso{\code{\link{deviance}}, \code{\link{nobs}}, \code{\link{vcov}}.}\examples{## -- lm() ------------------------------lm1 <- lm(Fertility ~ . , data = swiss)sigma(lm1) # ~= 7.165 = "Residual standard error" printed from summary(lm1)stopifnot(all.equal(sigma(lm1), summary(lm1)$sigma, tol=1e-15))## -- nls() -----------------------------DNase1 <- subset(DNase, Run == 1)fm.DN1 <- nls(density ~ SSlogis(log(conc), Asym, xmid, scal), DNase1)sigma(fm.DN1) # ~= 0.01919 as from summary(..)stopifnot(all.equal(sigma(fm.DN1), summary(fm.DN1)$sigma, tol=1e-15))% example from ./predict.glm.R## -- glm() -----------------------------## -- a) Binomial -- Example from MASSldose <- rep(0:5, 2)numdead <- c(1, 4, 9, 13, 18, 20, 0, 2, 6, 10, 12, 16)sex <- factor(rep(c("M", "F"), c(6, 6)))SF <- cbind(numdead, numalive = 20-numdead)sigma(budworm.lg <- glm(SF ~ sex*ldose, family = binomial))## -- b) Poisson -- from ?glm :## Dobson (1990) Page 93: Randomized Controlled Trial :counts <- c(18,17,15,20,10,20,25,13,12)outcome <- gl(3,1,9)treatment <- gl(3,3)sigma(glm.D93 <- glm(counts ~ outcome + treatment, family = poisson()))## (currently) *differs* fromsummary(glm.D93)$dispersion # == 1## and the *Quasi*poisson's dispersionsigma(glm.qD93 <- update(glm.D93, family = quasipoisson()))sigma (glm.qD93)^2 # 1.282285 is close, but not the samesummary(glm.qD93)$dispersion # == 1.2933## -- Multivariate lm() "mlm" -----------utils::example("SSD", echo=FALSE)sigma(mlmfit) # is the same as {but more efficient than}sqrt(diag(estVar(mlmfit)))\dontshow{stopifnot(all.equal(sigma(mlmfit), sqrt(diag(estVar(mlmfit)))))}}\keyword{models}