calc_invsvd | R Documentation |
Calculate the reduced inverse of a matrix of data using Singular Value Decomposition (SVD).
calc_invsvd(matrixv, dimax = 0L, singmin = 0)
matrixv |
A matrix of data. |
dimax |
An integer equal to the number of singular
values used for calculating the reduced inverse of the matrix
|
singmin |
A numeric threshold level for discarding
small singular values in order to regularize the inverse of the
matrix |
The function calc_invsvd()
calculates the reduced
inverse of the matrix matrixv
using Singular Value Decomposition
(SVD).
The function calc_invsvd()
first performs Singular Value
Decomposition (SVD) of the matrix matrixv
.
The SVD of a matrix \strong{C}
is defined as the
factorization:
\strong{C} = \strong{U} \, \Sigma \, \strong{V}^T
Where \strong{U}
and \strong{V}
are the left and right
singular matrices, and \Sigma
is a diagonal matrix of
singular values.
The inverse \strong{C}^{-1}
of the matrix \strong{C}
can be
calculated from the SVD matrices as:
\strong{C}^{-1} = \strong{V} \, \Sigma^{-1} \, \strong{U}^T
The reduced inverse of the matrix \strong{C}
is obtained
by removing singular vectors with very small singular values:
\strong{C}^{-1} = \strong{V}_n \, \Sigma_n^{-1} \, \strong{U}_n^T
Where \strong{U}_n
, \strong{V}_n
and \Sigma_n
are the
SVD matrices with the rows and columns corresponding to very small
singular values removed.
The function calc_invsvd()
applies regularization to the matrix
inverse using the arguments dimax
and singmin
.
The function calc_invsvd()
applies regularization by discarding the
smallest singular values \sigma_i
that are less than the
threshold level singmin
times the sum of all the
singular values:
\sigma_i < eigen\_thresh \cdot
(\sum{\sigma_i})
It also discards additional singular vectors so that only the
highest order singular vectors remain, up to order dimax
. It
calculates the reduced inverse from the SVD matrices
using only the largest singular values up to order dimax
.
For example, if dimax = 3
then it only uses the 3
highest
order singular vectors, with the largest singular values.
This has the effect of dimension reduction.
If the matrix matrixv
has a large number of small singular
values, then the number of remaining singular values may be less
than dimax
.
A matrix equal to the reduced inverse of the
matrix matrixv
.
## Not run:
# Calculate ETF returns
retp <- na.omit(rutils::etfenv$returns[, c("VTI", "TLT", "DBC")])
# Calculate covariance matrix
covmat <- cov(retp)
# Calculate matrix inverse using RcppArmadillo
invmat <- HighFreq::calc_invsvd(covmat)
# Calculate matrix inverse in R
invr <- solve(covmat)
all.equal(invmat, invr, check.attributes=FALSE)
# Calculate reduced inverse using RcppArmadillo
invmat <- HighFreq::calc_invsvd(covmat, dimax=3)
# Calculate reduced inverse from SVD in R
svdec <- svd(covmat)
dimax <- 1:3
invr <- svdec$v[, dimax] %*% (t(svdec$u[, dimax])/svdec$d[dimax])
# Compare RcppArmadillo with R
all.equal(invmat, invr)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.