Learn R Programming

NMOF (version 0.20-0)

repairMatrix: Repair an Indefinite Correlation Matrix

Description

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

Usage

repairMatrix(C)

Arguments

C
a correlation matrix

Value

  • Returns a numeric matrix.

Details

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

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. http://www.riccardorebonato.co.uk/papers/ValCorMat.pdf

Examples

Run this code
# 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)

Run the code above in your browser using DataLab