## 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)

## Arguments

`x` | a matrix whose QR decomposition is to be computed.
`tol` | the tolerance for detecting linear dependencies in the columns of `x`.
`qr` | a QR decomposition of the type computed by `qr`.
`y, b` | a vector or matrix of right-hand sides of equations.
`a` | A matrix or QR decomposition.

## Description

`qr` computes the QR decomposition of a matrix. It provides an interface to the techniques used in the LINPACK routine DQRDC.

## Details

The QR decomposition plays an important role in many statistical techniques. In particular it can be used to solve the equation Ax = b for given matrix A, and vector 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`. `qr.qy` and `qr.qty` return `Q %*% y` and `t(Q) %*% y`, where `Q` is the Q matrix.

`qr.solve` solves systems of equations via the QR decomposition.

`is.qr` returns `TRUE` if `x` is a list with a component named `qr` and `FALSE` otherwise.

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

## Value

The QR decomposition of the matrix as computed by LINPACK. The components in the returned value correspond directly to the values returned by DQRDC.

`qr` | a matrix with the same dimensions as `x`. The upper triangle contains the R of the decomposition and the lower triangle contains information on the Q of the decomposition (stored in compact form).
`qraux` | a vector of length `ncol(x)` which contains additional information on Q.
`rank` | the rank of `x` as computed by the decomposition.
`pivot` | information on the pivoting strategy used during the decomposition.

## Note

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 `det2` in the examples below.

## References

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

## See Also

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

## Examples

    ## The determinant of a matrix  -- if you really must have it
    det2 <- function(x) prod(diag(qr(x)$qr))*(-1)^(ncol(x)-1)
    det2(print(cbind(1,1:3,c(2,0,1))))

    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
    h9 %*% x              # = y

[Package Contents]