Learn R Programming

CovTools (version 0.4.0)

CovEst.hard: Covariance Estimation via Hard Thresholding

Description

Bickel and Levina (2008) proposed a sparse covariance estimation technique to apply thresholding on off-diagonal elements of the sample covariance matrix. The entry of sample covariance matrix \(S_{i,j}=0\) if \(|S_{i,j}|<=\tau\) where \(\tau\) is a thresholding value (thr). If thr is rather a vector of regularization parameters, it applies cross-validation scheme to select an optimal value.

Usage

CovEst.hard(X, thr = sqrt(log(ncol(X))/nrow(X)), nCV = 10,
  parallel = FALSE)

Arguments

X

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

thr

user-defined threshold value. If it is a vector of regularization values, it automatically selects one that minimizes cross validation risk.

nCV

the number of repetitions for 2-fold random cross validations for each threshold value.

parallel

a logical; TRUE to use half of available cores, FALSE to do every computation sequentially.

Value

a named list containing:

S

a \((p\times p)\) covariance matrix estimate.

CV

a dataframe containing vector of tested threshold values(thr) and corresponding cross validation scores(CVscore).

References

bickel_covariance_2008CovTools

Examples

Run this code
# NOT RUN {
## generate data from multivariate normal with Identity covariance.
data <- mvtnorm::rmvnorm(10, sigma=diag(10))

## apply 4 different schemes
#  mthr is a vector of regularization parameters to be tested
mthr <- exp(seq(from=log(0.1),to=log(10),length.out=10))

out1 <- CovEst.hard(data, thr=0.1)  # threshold value 0.1
out2 <- CovEst.hard(data, thr=1)    # threshold value 1
out3 <- CovEst.hard(data, thr=10)   # threshold value 10
out4 <- CovEst.hard(data, thr=mthr) # automatic threshold checking

## visualize 4 estimated matrices
par(mfrow=c(2,2), pty="s")
image(pracma::flipud(out1$S), col=gray((0:100)/100), main="thr=0.1")
image(pracma::flipud(out2$S), col=gray((0:100)/100), main="thr=1")
image(pracma::flipud(out3$S), col=gray((0:100)/100), main="thr=10")
image(pracma::flipud(out4$S), col=gray((0:100)/100), main="automatic")

# }

Run the code above in your browser using DataLab