Reconstruct the Q, R, or X Matrices from a QR Object (original) (raw)
QR.Auxiliaries {base} | R Documentation |
---|
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 =)
qr.R(qr, complete = FALSE)
Arguments
qr | object representing a QR decomposition. This will typically have come from a previous call to qr orlsfit. |
---|---|
complete | logical expression of length 1. Indicates whether an arbitrary orthogonal completion of the \bold{Q} or\bold{X} matrices is to be made, or whether the \bold{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 \bold{X}. The default when complete is FALSE is the firstmin(ncol(X), nrow(X)) columns of the original \bold{X}from which the qr object was constructed. The default whencomplete is TRUE is a square matrix with the original\bold{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 \bold{Q} will be multiplied by the corresponding diagonal value. Defaults to all 1s. |
Value
qr.X
returns \bold{X}
, the original matrix from which the qr object was constructed, provided ncol(X) <= nrow(X)
. If complete
is TRUE
or the argument ncol
is greater thanncol(X)
, additional columns from an arbitrary orthogonal (unitary) completion of X
are returned.
qr.Q
returns part or all of Q, the orthogonal (unitary) transformation of order nrow(X)
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
.
Note that qr.Q(qr, *)
is a special case of[qr.qy](../../base/help/qr.qy.html)(qr, y)
(with a “diagonal” y
), andqr.X(qr, *)
is basically [qr.qy](../../base/help/qr.qy.html)(qr, R)
(apart from pivoting and dimnames
setting).
qr.R
returns R. This may be pivoted, e.g., ifa <- qr(x)
then x[, a$pivot]
= QR. The number of rows of R is either nrow(X)
or ncol(X)
(and may depend on whether complete
is TRUE
or FALSE
).
See Also
[qr](../../base/help/qr.html)
,[qr.qy](../../base/help/qr.qy.html)
.
Examples
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 if there has been no pivoting, as here:
all.equal(unname(X),
unname(Q %*% R))
# example of pivoting
x <- cbind(int = 1,
b1 = rep(1:0, each = 3), b2 = rep(0:1, each = 3),
c1 = rep(c(1,0,0), 2), c2 = rep(c(0,1,0), 2), c3 = rep(c(0,0,1),2))
x # is singular, columns "b2" and "c3" are "extra"
a <- qr(x)
zapsmall(qr.R(a)) # columns are int b1 c1 c2 b2 c3
a$pivot
pivI <- sort.list(a$pivot) # the inverse permutation
all.equal (x, qr.Q(a) %*% qr.R(a)) # no, no
stopifnot(
all.equal(x[, a$pivot], qr.Q(a) %*% qr.R(a)), # TRUE
all.equal(x , qr.Q(a) %*% qr.R(a)[, pivI])) # TRUE too!
[Package _base_ version 4.6.0 Index]