R: Fast Computation of the Inverse of the Covariance and...

invcov.shrink {corpcor} | R Documentation

## Fast Computation of the Inverse of the Covariance and Correlation Matrix

### Description

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`).

### Usage

    invcov.shrink(x, lambda, lambda.var, w, verbose=TRUE)
    invcor.shrink(x, lambda, w, verbose=TRUE)

### Arguments

`x` | a data matrix
`lambda` | the correlation shrinkage intensity (range 0-1). If `lambda` is not specified (the default) it is estimated using an analytic formula from Sch\"afer and Strimmer (2005) - see `cor.shrink`. For `lambda=0` the empirical correlations are recovered.
`lambda.var` | the variance shrinkage intensity (range 0-1). If `lambda.var` is not specified (the default) it is estimated using an analytic formula from Sch\"afer and Strimmer (2005) - see `var.shrink`. For `lambda.var=0` the empirical variances are recovered.
`w` | optional: weights for each data point - if not specified uniform weights are assumed (`w = rep(1/n, n)` with `n = nrow(x)`).
`verbose` | output status while computing (default: TRUE)

### Details

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).

### Value

`invcov.shrink` returns the inverse of the output from `cov.shrink`.

`invcor.shrink` returns the inverse of the output from `cor.shrink`.

### Author(s)

Juliane Sch\"afer and Korbinian Strimmer (http://strimmerlab.org).

### References

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>

### See Also

`powcor.shrink`, `cov.shrink`, `pcor.shrink`, `cor2pcor`

### Examples

    # 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)

[Package corpcor version 1.6.9 Index]