Is x in the column span of matrix A and what columns are linearly dependent?
The function in.span
checks if the vector x
(or
columns of the matrix x
) is in the column span of the matrix
A
. If desired, it returns the coefficient matrix B
so that
AB=x
. The function thinCol
removes linearly dependent
columns an returns a matrix of full rank.
in.span( A, x, coef = FALSE, tol = 1e-08 ) inSpan( A, x, coef=FALSE, tol=1e-08 ) id.span( A, B, tol=1e-08 ) idSpan( A, B, tol=1e-08 ) thinCol( A, tol = 1e-06, col.num = FALSE )
A |
A matrix. |
B |
A matrix. |
x |
A vector or matrix. |
coef |
Logical. Should the coefficient matrix ( |
tol |
Tolerance for identity of matrices in check
( |
col.num |
Logical. Should the positions of dependent columns be returned instead of the full-rank matrix? |
in.span
and inSpan
are just different names for the same
to accommodate different naming schools.
in.span
(inSpan
) is handy in checking whether different
parametrizations of a model are identical in the sense of spanning the
same linear space. Equivalent to checking whether fitted values under
different parametrizations are identical, but has the further use of
checking if subspaces of models are equivalent. The function
simply checks if the regression of (columns of) x
on the
columns of A
produces residuals that are all 0.
id.span
(equivalent to idSpan
) checks whether two
matrices have the same column span.
in.span
returns a logical: is x
is in
span(A)
? If coef=TRUE
it returns a matrix k
so
that Ak=x
. k
is not necessarily unique (A may not have
full rank).
id.span
returns a logical: is span(A)
the same as
span(B)
?
thinCol
returns a matrix of full rank, formed from A
by
deleting columns linearly dependent on other. If col.num=TRUE
(one possible set of) positions of columns forming a full rank basis
for the column space of A
is returned.
Bendix Carstensen, http://bendixcarstensen.com with essential help from Lars Jorge Diaz and Peter Dalgaard.
# Matrices and vectors, x in span(A), z (hopefully) not A <- matrix(round(rnorm(15)*20),5,3) B <- matrix(round(rnorm(15)*20),5,3) B <- cbind( B, B%*%c(3,4,2) ) x <- A %*% c(3,4,2) z <- 5:9 # how they look data.frame( A=A, x=x, z=z, B=B ) # vectors in span(A)? in.span(A,x) in.span(x,A) in.span(A,x,coef=TRUE) in.span(A,z) in.span(A,z,coef=TRUE) # Do matrices span the same space ? in.span( A, B ) in.span( B, A ) # B is not in span of a subspace of B columns, but vice versa ( M <- matrix( rnorm(8)*7, 4, 2 ) ) in.span( B%*%M, B ) in.span( B, B%*%M ) id.span( B, B%*%M ) # But not unique for singular matrices: ( xx <- in.span( B, B%*%M, coef=TRUE ) ) cbind( B%*%M, B%*%xx ) cbind( xx, M ) # Easier for full rank matrices: ( K <- matrix( rnorm(9)*7, 3, 3 ) ) in.span( A%*%K, A ) in.span( A, A%*%K ) id.span( A, A%*%K ) in.span( A, A%*%K, coef=TRUE )
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.