sparseQR-class
Sparse QR decomposition of a sparse matrix
Description
Objects class "sparseQR"
represent a QR decomposition of a sparse m x n (“long”: m >= n) rectangular matrix A, typically resulting from qr()
, see ‘Details’ notably about row and column permutations for pivoting.
Details
For a sparse m x n (“long”: m >= n) rectangular matrix A, the sparse QR decomposition is either
of the form P A = Q R with a (row) permutation matrix P, (encoded in the p
slot of the result) if the q
slot is of length 0,
or of the form P A P* = Q R with an extra (column) permutation matrix P* (encoded in the q
slot). Note that the row permutation P A in R is simply A[p+1, ]
where p
is the p
-slot, a 0-based permutation of 1:m
applied to the rows of the original matrix.
If the q
slot has length n
it is a 0-based permutation of 1:n
applied to the columns of the original matrix to reduce the amount of “fill-in” in the matrix R, and A P* in R is simply A[ , q+1]
.
R is an m by n matrix that is zero below the main diagonal, i.e., upper triangular (m by n) with m-n extra zero rows.
The matrix Q is a "virtual matrix". It is the product of n Householder transformations. The information to generate these Householder transformations is stored in the V
and beta
slots.
Note however that qr.Q()
returns the row permuted matrix Q* := P^(-1) Q = P'Q as permutation matrices are orthogonal; and Q* is orthogonal itself because Q and P are. This is useful because then, as in the dense matrix and base R matrix qr
case, we have the mathematical identity
P A = Q* R,
in R as
A[p+1,] == qr.Q(*) %*% R .
The "sparseQR"
methods for the qr.*
functions return objects of class "dgeMatrix"
(see dgeMatrix
). Results from qr.coef
, qr.resid
and qr.fitted
(when k == ncol(R)
) are well-defined and should match those from the corresponding dense matrix calculations. However, because the matrix Q
is not uniquely defined, the results of qr.qy
and qr.qty
do not necessarily match those from the corresponding dense matrix calculations.
Also, the results of qr.qy
and qr.qty
apply to the permuted column order when the q
slot has length n
.
Objects from the Class
Objects can be created by calls of the form new("sparseQR", ...)
but are more commonly created by function qr
applied to a sparse matrix such as a matrix of class dgCMatrix
.
Slots
-
V
: -
Object of class
"dgCMatrix"
. The columns ofV
are the vectors that generate the Householder transformations of which the matrix Q is composed. -
beta
: -
Object of class
"numeric"
, the normalizing factors for the Householder transformations. -
p
: -
Object of class
"integer"
: Permutation (of0:(n-1)
) applied to the rows of the original matrix. -
R
: -
Object of class
"dgCMatrix"
: An upper triangular matrix of the same dimension as X. -
q
: -
Object of class
"integer"
: Permutation applied from the right, i.e., to the columns of the original matrix. Can be of length 0 which implies no permutation.
Methods
- qr.R
-
signature(qr = "sparseQR")
: compute the upper triangular R matrix of the QR decomposition. Note that this currently warns because of possible permutation mismatch with the classicalqr.R()
result, and you can suppress these warnings by settingoptions()
either"Matrix.quiet.qr.R"
or (the more general) either"Matrix.quiet"
toTRUE
. - qr.Q
-
signature(qr = "sparseQR")
: compute the orthogonal Q matrix of the QR decomposition. - qr.coef
-
signature(qr = "sparseQR", y = "ddenseMatrix")
: ... - qr.coef
-
signature(qr = "sparseQR", y = "matrix")
: ... - qr.coef
-
signature(qr = "sparseQR", y = "numeric")
: ... - qr.fitted
-
signature(qr = "sparseQR", y = "ddenseMatrix")
: ... - qr.fitted
-
signature(qr = "sparseQR", y = "matrix")
: ... - qr.fitted
-
signature(qr = "sparseQR", y = "numeric")
: ... - qr.qty
-
signature(qr = "sparseQR", y = "ddenseMatrix")
: ... - qr.qty
-
signature(qr = "sparseQR", y = "matrix")
: ... - qr.qty
-
signature(qr = "sparseQR", y = "numeric")
: ... - qr.qy
-
signature(qr = "sparseQR", y = "ddenseMatrix")
: ... - qr.qy
-
signature(qr = "sparseQR", y = "matrix")
: ... - qr.qy
-
signature(qr = "sparseQR", y = "numeric")
: ... - qr.resid
-
signature(qr = "sparseQR", y = "ddenseMatrix")
: ... - qr.resid
-
signature(qr = "sparseQR", y = "matrix")
: ... - qr.resid
-
signature(qr = "sparseQR", y = "numeric")
: ... - solve
-
signature(a = "sparseQR", b = "ANY")
: Forsolve(a,b)
, simply usesqr.coef(a,b)
.
See Also
qr
, qr.Q
, qr.R
, qr.fitted
, qr.resid
, qr.coef
, qr.qty
, qr.qy
,
Permutation matrices in the Matrix package: pMatrix
; dgCMatrix
, dgeMatrix
.
Examples
data(KNex) mm <- KNex $ mm y <- KNex $ y y. <- as(as.matrix(y), "dgCMatrix") str(qrm <- qr(mm)) qc <- qr.coef (qrm, y); qc. <- qr.coef (qrm, y.) # 2nd failed in Matrix <= 1.1-0 qf <- qr.fitted(qrm, y); qf. <- qr.fitted(qrm, y.) qs <- qr.resid (qrm, y); qs. <- qr.resid (qrm, y.) stopifnot(all.equal(qc, as.numeric(qc.), tolerance=1e-12), all.equal(qf, as.numeric(qf.), tolerance=1e-12), all.equal(qs, as.numeric(qs.), tolerance=1e-12), all.equal(qf+qs, y, tolerance=1e-12))
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.