You are on page 1of 4

R: The QR Decomposition of a Matrix


qr {base} R Documentation

The QR Decomposition of a Matrix


qr computes the QR decomposition of a matrix.


qr(x, ...)
## Default S3 method:
qr(x, tol = 1e-07 , LAPACK = FALSE, ...)

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)
## S3 method for class 'qr'
solve(a, b, ...)



a numeric or complex matrix whose QR decomposition is to be computed. Logical
matrices are coerced to numeric.

the tolerance for detecting linear dependencies in the columns of x. Only used if LAPACK
is false and x is real.

a QR decomposition of the type computed by qr.

y, b
a vector or matrix of right-hand sides of equations.

a QR decomposition or (qr.solve only) a rectangular matrix.

effective rank.

logical. For real x, if true use LAPACK otherwise use LINPACK (the default).

further arguments passed to or from other methods

1 of 4 17/Sep/2017, 4:41 PM
R: The QR Decomposition of a Matrix


The QR decomposition plays an important role in many statistical techniques. In particular it can
be used to solve the equation \bold{Ax} = \bold{b} for given matrix \bold{A}, and vector \bold{b}.
It is useful for computing regression coefficients and in applying the Newton-Raphson algorithm.

The functions qr.coef, qr.resid, and qr.fitted return the coefficients, residuals and fitted
values obtained when fitting y to the matrix with QR decomposition qr. (If pivoting is used, some
of the coefficients will be NA.) qr.qy and qr.qty return Q %*% y and t(Q) %*% y, where Q is the
(complete) \bold{Q} matrix.

All the above functions keep dimnames (and names) of x and y if there are any.

solve.qr is the method for solve for qr objects. qr.solve solves systems of equations via the
QR decomposition: if a is a QR decomposition it is the same as solve.qr, but if a is a rectangular
matrix the QR decomposition is computed first. Either will handle over- and under-determined
systems, providing a least-squares fit if appropriate.

is.qr returns TRUE if x is a list and inherits from "qr".

It is not possible to coerce objects to mode "qr". Objects either are QR decompositions or they are

The LINPACK interface is restricted to matrices x with less than 2^31 elements.

qr.fitted and qr.resid only support the LINPACK interface.

Unsuccessful results from the underlying LAPACK code will result in an error giving a positive
error code: these can only be interpreted by detailed study of the FORTRAN code.


The QR decomposition of the matrix as computed by LINPACK(*) or LAPACK. The components

in the returned value correspond directly to the values returned by DQRDC(2)/DGEQP3

a matrix with the same dimensions as x. The upper triangle contains the \bold{R} of the
decomposition and the lower triangle contains information on the \bold{Q} of the
decomposition (stored in compact form). Note that the storage used by DQRDC and
DGEQP3 differs.

a vector of length ncol(x) which contains additional information on \bold{Q}.

the rank of x as computed by the decomposition(*): always full rank in the LAPACK case.

information on the pivoting strategy used during the decomposition.

2 of 4 17/Sep/2017, 4:41 PM
R: The QR Decomposition of a Matrix

Non-complex QR objects computed by LAPACK have the attribute "useLAPACK" with value TRUE.

*) dqrdc2 instead of LINPACK's DQRDC

In the (default) LINPACK case (LAPACK = FALSE), qr() uses a modified version of LINPACK's
DQRDC, called dqrdc2. It differs by using the tolerance tol for a pivoting strategy which
moves columns with near-zero 2-norm to the right-hand edge of the x matrix. This strategy means
that sequential one degree-of-freedom effects can be computed in a natural way.


To compute the determinant of a matrix (do you really need it?), the QR decomposition is much
more efficient than using Eigen values (eigen). See det.

Using LAPACK (including in the complex case) uses column pivoting and does not attempt to
detect rank-deficient matrices.


For qr, the LINPACK routine DQRDC (but modified to dqrdc2(*)) and the LAPACK routines
DGEQP3 and ZGEQP3. Further LINPACK and LAPACK routines are used for qr.coef, qr.qy and

LAPACK and LINPACK are from and

and their guides are listed in the references.


Anderson. E. and ten others (1999) LAPACK Users' Guide. Third Edition. SIAM.
Available on-line at

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth &

Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) LINPACK Users Guide.
Philadelphia: SIAM Publications.

See Also

qr.Q, qr.R, qr.X for reconstruction of the matrices., lsfit, eigen, svd.

det (using qr) to compute the determinant of a matrix.


hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }

h9 <- hilbert(9); h9
qr(h9)$rank #--> only 7
qrh9 <- qr(h9, tol = 1e-10)
qrh9$rank #--> 9
##-- Solve linear equation system H %*% x = y :
y <- 1:9/10
x <- qr.solve(h9, y, tol = 1e-10) # or equivalently :
x <- qr.coef(qrh9, y) #-- is == but much better than
#-- solve(h9) %*% y

3 of 4 17/Sep/2017, 4:41 PM
R: The QR Decomposition of a Matrix

h9 %*% x # = y

## overdetermined system
A <- matrix(runif(12), 4)
b <- 1:4
qr.solve(A, b) # or solve(qr(A), b)
solve(qr(A, LAPACK = TRUE), b)
# this is a least-squares solution, cf. lm(b ~ 0 + A)

## underdetermined system
A <- matrix(runif(12), 3)
b <- 1:3
qr.solve(A, b)
solve(qr(A, LAPACK = TRUE), b)
# solutions will have one zero, not necessarily the same one

[Package base version 3.4.1 Index]

4 of 4 17/Sep/2017, 4:41 PM