QRforX function

QR decomposition of linear model design matrices

QR decomposition of linear model design matrices

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.

QRforX(X, returnQ = TRUE, reduce = TRUE, reQR = TRUE, ...)

Arguments

  • 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 Example data(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 example data("PupfishHeads") fit <- suppressWarnings(lm.rrpp(headSize ~ sex + locality/year, data = PupfishHeads)) X <- model.matrix(fit) dim(X) # Already reduced colnames(X) X <- model.matrix(terms(fit), fit$LM$data) dim(X) # Retains redundant parameters colnames(X) QR <- QRforX(X) QR$fixed dim(QR$X) # Reduced again colnames(QR$X)

Author(s)

Michael Collyer