QR.Auxiliaries             package:base             R Documentation

Reconstruct the Q, R, or X Matrices from a QR Object

Description:

     Returns the original matrix from which the object was constructed
     or the components of the decomposition.

Usage:

     qr.X(qr, complete = FALSE, ncol =)
     qr.Q(qr, complete = FALSE, Dvec = 1)
     qr.R(qr, complete = FALSE)

Arguments:

      qr: object representing a QR decomposition.  This will typically
          have come from a previous call to `qr' or `lsfit'.

complete: logical expression of length 1.  Indicates whether an
          arbitrary  orthogonal completion of the Q or X matrices is to
          be made, or whether the R matrix is to be completed  by
          binding zero-value rows beneath the square upper triangle.

    ncol: integer in the range `1:nrow(qr$qr)'.  The number of columns
          to be in the reconstructed X.  The default when `complete' is
          `FALSE' is the original X from which the qr object was
          constructed.  The default when `complete' is `TRUE' is a
          square matrix with the original X in the first `ncol(X)'
          columns and an arbitrary orthogonal completion (unitary
          completion in the complex case) in the remaining columns.

    Dvec: vector (not matrix) of diagonal values.  Each column of the
          returned Q will be multiplied by the corresponding diagonal
          value.

Value:

     `qr.X' returns X, the original matrix from which the qr object was
     constructed.  If `complete' is `TRUE' or the argument `ncol' is
     greater than `ncol(X)', additional columns from an arbitrary
     orthogonal (unitary) completion of `X' are returned.

     `qr.Q' returns Q, the order-nrow(X) orthogonal (unitary)
     transformation represented by `qr'.  If `complete' is `TRUE', Q
     has `nrow(X)' columns.  If `complete' is `FALSE', Q has `ncol(X)'
     columns.  When `Dvec' is specified, each column of Q is multiplied
     by the corresponding value in `Dvec'.

     `qr.R' returns R, the upper triangular matrix such that `X == Q
     %*% R'.  The number of rows of R is `nrow(X)' or `ncol(X)',
     depending on whether `complete' is `TRUE' or `FALSE'.

See Also:

     `qr', `qr.qy'.

Examples:

     data(LifeCycleSavings)
     p <- ncol(x <- LifeCycleSavings[,-1]) # not the `sr'
     qrstr <- qr(x)   # dim(x) == c(n,p)
     qrstr $ rank # = 4 = p
     Q <- qr.Q(qrstr) # dim(Q) == dim(x)
     R <- qr.R(qrstr) # dim(R) == ncol(x)
     X <- qr.X(qrstr) # X == x
     range(X - as.matrix(x))# ~ < 6e-12

     ## X == Q %*% R :
     all((1 - X /( Q %*% R))< 100*.Machine$double.eps)#TRUE

     dim(Qc <- qr.Q(qrstr, complete=TRUE)) # Square: dim(Qc) == rep(nrow(x),2)
     all((crossprod(Qc) - diag(nrow(x))) < 10*.Machine $double.eps)

     QD <- qr.Q(qrstr, D=1:p)      # QD == Q %*% diag(1:p)
     all(QD - Q %*% diag(1:p)  < 8* .Machine$double.eps)

     dim(Rc <- qr.R(qrstr, complete=TRUE)) # == dim(x)
     dim(Xc <- qr.X(qrstr, complete=TRUE)) # square: nrow(x) ^ 2
     all(Xc[,1:p] == X)

