Rev 15518 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{qr}\title{The QR Decomposition of a Matrix}\usage{qr(x, tol=1e-07)qr.coef(qr, y)qr.qy(qr, y)qr.qty(qr, y)qr.resid(qr, y)qr.fitted(qr, y, k = qr$rank)qr.solve(a, b, tol = 1e-7)is.qr(x)as.qr(x)}\alias{qr}\alias{qr.coef}\alias{qr.qy}\alias{qr.qty}\alias{qr.resid}\alias{qr.fitted}\alias{qr.solve}\alias{is.qr}\alias{as.qr}\arguments{\item{x}{a matrix whose QR decomposition is to be computed.}\item{tol}{the tolerance for detecting linear dependencies in thecolumns of \code{x}.}\item{qr}{a QR decomposition of the type computed by \code{qr}.}\item{y, b}{a vector or matrix of right-hand sides of equations.}\item{a}{A matrix or QR decomposition.}\item{k}{effective rank.}}\description{\code{qr} computes the QR decomposition of a matrix. It provides aninterface to the techniques used in the LINPACK routine DQRDCor the LAPACK routine ZGEQP3.}\details{The QR decomposition plays an important role in manystatistical techniques. In particular it can be used to solve theequation \eqn{\bold{Ax} = \bold{b}} for given matrix \eqn{\bold{A}},and vector \eqn{\bold{b}}. It is useful for computing regressioncoefficients and in applying the Newton-Raphson algorithm.The functions \code{qr.coef}, \code{qr.resid}, and \code{qr.fitted}return the coefficients, residuals and fitted values obtained whenfitting \code{y} to the matrix with QR decomposition \code{qr}.\code{qr.qy} and \code{qr.qty} return \code{Q \%*\% y} and\code{t(Q) \%*\% y}, where \code{Q} is the \eqn{\bold{Q}} matrix.\code{qr.solve} solves systems of equations via the QR decomposition.\code{is.qr} returns \code{TRUE} if \code{x} is a \code{\link{list}}with components named \code{qr}, \code{rank} and \code{qraux} and\code{FALSE} otherwise.It is not possible to coerce objects to mode \code{"qr"}. Objectseither are QR decompositions or they are not.}\value{The QR decomposition of the matrix as computed by LINPACK or LAPACK.The components in the returned value correspond directlyto the values returned by DQRDC.\item{qr}{a matrix with the same dimensions as \code{x}.The upper triangle contains the \eqn{\bold{R}} of the decompositionand the lower triangle contains information on the \eqn{\bold{Q}} ofthe decomposition (stored in compact form).}\item{qraux}{a vector of length \code{ncol(x)} which containsadditional information on \eqn{\bold{Q}}.}\item{rank}{the rank of \code{x} as computed by the decomposition:always full rank in the complex case.}\item{pivot}{information on the pivoting strategy used duringthe decomposition.}}\note{To compute the determinant of a matrix (do you \emph{really} need it?),the QR decomposition is much more efficient than using Eigen values(\code{\link{eigen}}). See \code{\link{det}}.The complex case uses column pivoting and does not attempt to detectrank-deficient matrices.}\references{Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978)\emph{LINPACK Users Guide.} Philadelphia: SIAM Publications.Anderson. E. and ten others (1995)\emph{LAPACK Users' Guide}. Second Edition. SIAM.}\seealso{\code{\link{qr.Q}}, \code{\link{qr.R}}, \code{\link{qr.X}} forreconstruction of the matrices.\code{\link{solve.qr}}, \code{\link{lsfit}},\code{\link{eigen}}, \code{\link{svd}}.\code{\link{det}} (using \code{qr}) to compute the determinant of a matrix.}\examples{hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }h9 <- hilbert(9); h9qr(h9)$rank #--> only 7qrh9 <- qr(h9, tol = 1e-10)qrh9$rank #--> 9##-- Solve linear equation system H \%*\% x = y :y <- 1:9/10x <- qr.solve(h9, y, tol = 1e-10) # or equivalently :x <- qr.coef(qrh9, y) #-- is == but much better than#-- solve(h9) \%*\% yh9 \%*\% x # = y\testonly{## tests of complex caseset.seed(1)A <- matrix(rnorm(25), 5, 5, dimnames=list(1:5, letters[1:5]))qr.solve(A, 1:5)A[] <- as.complex(A)qr.coef(qr(A), 1:5)qr.solve(A, 1:5)}\testonly{## check for rank-deficient casesX <- cbind(1:3, 1:3, 1)stopifnot(all.equal(qr.X(qr(X)), X))}}\keyword{algebra}\keyword{array}\keyword{regression}