Rev 6496 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{mroot}\alias{mroot}%- Also NEED an `\alias' for EACH other topic documented here.\title{Smallest square root of matrix}\description{ Find a square root of a positive semi-definite matrix,having as few columns as possible. Uses either pivoted Choleskydecomposition or singular value decomposition to do this.}\usage{mroot(A,rank=NULL,method="chol")}%- maybe also `usage' for other objects documented here.\arguments{\item{A}{ The positive semi-definite matrix, a square root of which isto be found.}\item{rank}{if the rank of the matrix \code{A} is known then it shouldbe supplied. \code{NULL} or <1 imply that it should be estimated.}\item{method}{ \code{"chol"} to use pivoted Cholesky decompositon,which is fast but tends to over-estimate rank. \code{"svd"} to usesingular value decomposition, which is slower, but is the most accurate wayto estimate rank.}}\details{ The function is primarily of use for turning penalized regression problems into ordinary regression problems. Given that \code{A} is positive semi-definite the SVD option actually uses a symmetric eigen routine, which gives the same result more efficiently.}\value{ A matrix, \eqn{ {\bf B}}{B} with as many columns as the rank of\eqn{ {\bf A}}{A}, and such that \eqn{ {\bf A} = {\bf BB}^\prime}{A=BB'}.}\author{ Simon N. Wood \email{simon.wood@r-project.org}}\examples{require(mgcv)set.seed(0)a <- matrix(runif(24),6,4)A <- a\%*\%t(a) ## A is +ve semi-definite, rank 4B <- mroot(A) ## default pivoted choleski methodtol <- 100*.Machine$double.epschol.err <- max(abs(A-B\%*\%t(B)));chol.errif (chol.err>tol) warning("mroot (chol) suspect")B <- mroot(A,method="svd") ## svd methodsvd.err <- max(abs(A-B\%*\%t(B)));svd.errif (svd.err>tol) warning("mroot (svd) suspect")}\keyword{models} \keyword{smooth} \keyword{regression}%-- one or more ..