## Estimation

**spdm** implements several types of covariance estimation through the `spd.estimate()`

function, which acts as a wrapper around estimators from different R packages. The function is called as follows

```
spd.estimate(x, method = c('sample', 'linshrink', 'nlshrink', 'glasso'), ...)
```

and accepts an \(n\) observations by \(p\) variables numeric matrix `x`

, a character string `method`

specifying the estimator, and any additional arguments `...`

. The list of supported estimators is below. In all cases, `spd.estimate()`

will return a warning if the estimate is not positive-definite.

#### sample

The standard sample covariance matrix, computed by calling `cov(x, ...)`

. Implemented to allow easy comparison between the sample covariance and other estimators within **spdm**, although the sample covariance is generally a poor estimator, and is not guaranteed to be positive-definite. Itâ€™s use is not recommended unless there are several times more observations than variables.

Example:

```
x <- matrix(rnorm(100), ncol = 20)
S <- spd.estimate(x, method = 'sample')
```

#### linshrink (default)

The linear shrinkage estimator proposed by Ledoit and Wolf (2004), and implemented by the **nlshrink** package using `linshrink_cov(x, ...)`

. It is a convex combination of the sample covariance matrix and the identity matrix, equivalent to linearly shrinking the eigenvalues of the sample covariance to their mean.

Example:

```
x <- matrix(rnorm(100), ncol = 20)
S <- spd.estimate(x, method = 'linshrink')
```

#### nlshrink

The non-linear shrinkage estimator proposed by Ledoit and Wolf (2012), and implemented by the **nlshrink** package using `nlshrink_cov(x, ...)`

. Equivalent to non-linearly shrinking the eigenvalues of the sample covariance to their mean. Although the authors find that this estimator generally achieves superior performance to **linshrink**, **nlshrink** can be substantially slower, and so is not used as the default.

#### glasso

The graphical lasso estimate proposed by Friedman, Hastie, and Tibishiranit (2007), implemented by the **huge** package, and generally used for the estimation of Gaussian graphical models. Roughly, the Glasso operates by estimating a sparse inverse covariance matrix using an \(\ell_1\)-penalty.

Glasso model fitting and selection involve a rather large number of possible tuning parameters, all of which can be provided by passing additional arguments to `spd.estimate()`

. The user should study the **huge** package documentation in detail for instructions.

The internal function calls are roughly

```
huge.fit <- huge(x, method = 'glasso', cov.output = T, ...)
S <- huge.select(huge.fit, ...)$opt.cov
return(S)
```

Arguments to `huge()`

should be prepended with `huge.`

, while arguments to `huge.select()`

should be prepended with `select.`

. The user should note that not all estimation/selection settings result in the exporting of a covariance matrix, in which case the function will return an error.

Example:

```
x <- matrix(rnorm(100), ncol = 20)
S <- spd.estimate(x, method = 'glasso', huge.scr = T, select.criterion = 'ebic')
```