repairMatrix | R Documentation |
The function ‘repairs’ an indefinite correlation matrix by replacing its negative eigenvalues by zero.
repairMatrix(C, eps = 0)
C |
a correlation matrix |
eps |
a small number |
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.
Returns a numeric matrix.
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
Gilli, M., Maringer, D. and Schumann, E. (2019) Numerical Methods and Optimization in Finance. 2nd edition. Elsevier. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1016/C2017-0-01621-X")}
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. (2023) Financial Optimisation with R (NMOF Manual). https://enricoschumann.net/NMOF.htm#NMOFmanual
## 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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.