CovEst.2010OAS {CovTools}R Documentation

Oracle Approximating Shrinkage Estimator

Description

Authors propose to estimate covariance matrix by iteratively approximating the shrinkage with

\hat{\Sigma} = \rho \hat{F} + (1-\rho) \hat{S}

where \rho \in (0,1) a control parameter/weight, \hat{S} an empirical covariance matrix, and \hat{F} a target matrix. It is proposed to use a structured estimate \hat{F} = \textrm{Tr} (\hat{S}/p) \cdot I_{p\times p} where I_{p\times p} is an identity matrix of dimension p.

Usage

CovEst.2010OAS(X)

Arguments

X

an (n\times p) matrix where each row is an observation.

Value

a named list containing:

S

a (p\times p) covariance matrix estimate.

rho

an estimate for convex combination weight.

References

Chen Y, Wiesel A, Eldar YC, Hero AO (2010). “Shrinkage Algorithms for MMSE Covariance Estimation.” IEEE Transactions on Signal Processing, 58(10), 5016–5029. ISSN 1053-587X, 1941-0476.

Examples

## CRAN-purpose small computation
# set a seed for reproducibility
set.seed(11)

#  small data with identity covariance
pdim      <- 5
dat.small <- matrix(rnorm(10*pdim), ncol=pdim)

#  run the code
out.small <- CovEst.2010OAS(dat.small)

#  visualize
opar <- par(no.readonly=TRUE)
par(mfrow=c(1,3), pty="s")
image(diag(pdim)[,pdim:1],     main="true cov")
image(cov(dat.small)[,pdim:1], main="sample cov")
image(out.small$S[,pdim:1],    main="estimated cov")
par(opar)

## Not run: 
## want to see how delta is determined according to
#  the number of observations we have.
nsamples = seq(from=5, to=200, by=5)
nnsample = length(nsamples)

#  we will record two values; rho and norm difference
vec.rho   = rep(0, nnsample)
vec.normd = rep(0, nnsample)
for (i in 1:nnsample){
  dat.norun <- matrix(rnorm(nsamples[i]*pdim), ncol=pdim) # sample in R^5
  out.norun <- CovEst.2010OAS(dat.norun)                  # run with default

  vec.rho[i]   = out.norun$rho
  vec.normd[i] = norm(out.norun$S - diag(pdim),"f")       # Frobenius norm
}

# let's visualize the results
opar <- par(no.readonly=TRUE)
par(mfrow=c(1,2))
plot(nsamples, vec.rho,   lwd=2, type="b", col="red", main="estimated rhos")
plot(nsamples, vec.normd, lwd=2, type="b", col="blue",main="Frobenius error")
par(opar)

## End(Not run)


[Package CovTools version 0.5.4 Index]