# repairMatrix: Repair an Indefinite Correlation Matrix In enricoschumann/NMOF: Numerical Methods and Optimization in Finance

## Description

The function ‘repairs’ an indefinite correlation matrix by replacing its negative eigenvalues by zero.

## Usage

 `1` ```repairMatrix(C, eps = 0) ```

## Arguments

 `C` a correlation matrix `eps` a small number

## Details

The function ‘repairs’ a correlation matrix: it replaces negative eigenvalues with `eps` and rescales the matrix such that all elements on the main diagonal become unity again.

## Value

Returns a numeric matrix.

## Note

This function may help to cure a numerical problem, but it will rarely help to cure an empirical problem. (Garbage in, garbage out.)

See also the function `nearPD` in the Matrix package.

Enrico Schumann

## References

Gilli, M., Maringer, D. and Schumann, E. (2011) Numerical Methods and Optimization in Finance. Elsevier. http://www.elsevierdirect.com/product.jsp?isbn=9780123756626

Rebonato, R. and Jaeckel, P. (1999) The most general methodology to create a valid correlation matrix for risk management and option pricing purposes.

Schumann, E. (2016) Financial Optimisation with R (NMOF Manual). http://enricoschumann.net/NMOF.htm#NMOFmanual

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14``` ```## example: build a portfolio of three assets C <- c(1,.9,.9,.9,1,.2,.9,.2,1) dim(C) <- c(3L, 3L) eigen(C, only.values = TRUE) vols <- c(.3, .3, .3) ## volatilities S <- C * outer(vols,vols) ## covariance matrix w <- c(-1, 1, 1) ## a portfolio w %*% S %*% w ## variance of portfolio is negative! sqrt(as.complex(w %*% S %*% w)) S <- repairMatrix(C) * outer(vols,vols) w %*% S %*% w ## more reasonable sqrt(w %*% S %*% w) ```

enricoschumann/NMOF documentation built on Feb. 14, 2019, 2:21 p.m.