Fast Computation of the Inverse of the Covariance and Correlation Matrix
The functions invcov.shrink and invcor.shrink implement an
algorithm to efficiently compute
the inverses of shrinkage estimates of covariance (cov.shrink)
and correlation (cor.shrink).
invcov.shrink(x, lambda, lambda.var, w, verbose=TRUE) invcor.shrink(x, lambda, w, verbose=TRUE)
x |
a data matrix |
lambda |
the correlation shrinkage intensity (range 0-1).
If |
lambda.var |
the variance shrinkage intensity (range 0-1).
If |
w |
optional: weights for each data point - if not specified uniform weights are assumed
( |
verbose |
output status while computing (default: TRUE) |
Both invcov.shrink and invcor.shrink rely on
powcor.shrink. This allows to compute the inverses in
a very efficient fashion (much more efficient than directly inverting
the matrices - see the example).
invcov.shrink returns the inverse of the output from cov.shrink.
invcor.shrink returns the inverse of the output from cor.shrink.
Juliane Sch\"afer and Korbinian Strimmer (https://strimmerlab.github.io).
Sch\"afer, J., and K. Strimmer. 2005. A shrinkage approach to large-scale covariance estimation and implications for functional genomics. Statist. Appl. Genet. Mol. Biol. 4:32. <DOI:10.2202/1544-6115.1175>
# load corpcor library
library("corpcor")
# generate data matrix
p = 500
n = 10
X = matrix(rnorm(n*p), nrow = n, ncol = p)
lambda = 0.23 # some arbitrary lambda
# slow
system.time(
(W1 = solve(cov.shrink(X, lambda)))
)
# very fast
system.time(
(W2 = invcov.shrink(X, lambda))
)
# no difference
sum((W1-W2)^2)Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.