This function performs a QR decomposition (factorization) on a linear model design matrix (X) and returns useful results for subsequent analysis. This is intended as an internal function but can be used externally. Because base::qr and Matrix::qr have different options for QR algorithms, this function assures that results are consistent for other RRPP function use, whether X is a dense or sparse matrix.
X: A linear model design matrix, but can be any object coercible to matrix.
returnQ: A logical value whether to return the Q matrix. Generating a Q matrix can be computationally intense for large matrices. If it is not explicitly needed, this argument can be FALSE.
reduce: A logical value for whether redundant parameters in X should be removed. This should be TRUE (default) for most cases.
reQR: A logical value for whether to re-perform QR if reduce = TRUE, and X has been reduced.
...: Further arguments passed to base::qr.
Returns
An object of class QR is a list containing the following: - Q: The Q matrix, if requested.
R: The R matrix.
X: The X matrix, which could be changes from dense to sparse, or vice versa, and redundant columns removed.
rank: The rank of the X matrix.
fix: Logical value for whether redundant columns were removed form X. TRUE means columns were removed.
S4: Logical value for whether Q, R, and X are S4 class objects.
Examples
## Simple Exampledata(Pupfish)fit <- lm.rrpp(coords ~ Pop, data = Pupfish, print.progress =FALSE)QR <- QRforX(model.matrix(fit))QR$Q
QR$R
QR$rank
QR$S4
## Not run, but one could get base::qr and Matrix::qr results as# base::qr(as.matrix(QR$X))# Matrix::qr(QR$X)## Complex exampledata("PupfishHeads")fit <- suppressWarnings(lm.rrpp(headSize ~ sex +locality/year, data = PupfishHeads))X <- model.matrix(fit)dim(X)# Already reducedcolnames(X)X <- model.matrix(terms(fit), fit$LM$data)dim(X)# Retains redundant parameterscolnames(X)QR <- QRforX(X)QR$fixed
dim(QR$X)# Reduced againcolnames(QR$X)