Make a design matrix full rank
When writing user-defined methods for use with weightit()
, it may be necessary to take the potentially non-full rank covs
data frame and make it full rank for use in a downstream function. This function performs that operation.
make_full_rank(mat, with.intercept = TRUE)
mat |
a numeric matrix or data frame to be transformed. Typically this contains covariates. |
with.intercept |
whether an intercept (i.e., a vector of 1s) should be added to |
make_full_rank()
calls qr()
to find the rank and linearly independent columns of mat
, which are retained while others are dropped. If with.intercept
is set to TRUE
, an intercept column is added to the matrix before calling qr()
. Note that dependent columns that appear later in mat
will be dropped first.
See example at method_user
.
An object of the same type as mat
containing only linearly independent columns.
Older versions would drop all columns that only had one value. With with.intercept = FALSE
, if only one column has only one value, it will not be removed, and it will function as though there was an intercept present; if more than only column has only one value, only the first one will remain.
Noah Greifer
set.seed(1000) c1 <- rbinom(10, 1, .4) c2 <- 1-c1 c3 <- rnorm(10) c4 <- 10*c3 mat <- data.frame(c1, c2, c3, c4) make_full_rank(mat) #leaves c2 and c4 make_full_rank(mat, with.intercept = FALSE) #leaves c1, c2, and c4
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.