org.akutan.correlations
Class RMT

java.lang.Object
  extended by org.akutan.correlations.RMT

public class RMT
extends java.lang.Object

This class implements Random Matrix Theory methods for cleaning a correlation/covariance matrix and returning one which has had the noise element removed. This is done by taking the eigenvalues of the matrix, finding the theoretical band in which noisy eigenvalues will lie, making some modifications to the eigenvalues and the reassembling the matrix. There are a several ways to do this within the umbrella of RMT, this class will provide implementations of those multiple ways.

Since:
9 Oct 2008

Method Summary
static cern.colt.matrix.DoubleMatrix2D rmt(int n, int t, cern.colt.matrix.DoubleMatrix2D C)
          This method updates the correlation matrix by removing all the noisy eigenvalues from the paper "Portfolio Optimization and the Random Matrix Problem", Rosenow, et al, Europhysics Letters, 59, (4) pp 500-506 (2002).
static cern.colt.matrix.DoubleMatrix2D rmt0(int n, int t, cern.colt.matrix.DoubleMatrix2D C)
          I would also like to make the algorithm used in Sharifi, et al, Physica A 335 (2004) 629-643.
static cern.colt.matrix.DoubleMatrix2D scaledRmt(int n, int t, cern.colt.matrix.DoubleMatrix2D C)
          This method updates the correlation matrix by removing all the noisy eigenvalues from the paper "Portfolio Optimization and the Random Matrix Problem", Rosenow, et al, Europhysics Letters, 59, (4) pp 500-506 (2002).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

rmt

public static cern.colt.matrix.DoubleMatrix2D rmt(int n,
                                                  int t,
                                                  cern.colt.matrix.DoubleMatrix2D C)
This method updates the correlation matrix by removing all the noisy eigenvalues from the paper "Portfolio Optimization and the Random Matrix Problem", Rosenow, et al, Europhysics Letters, 59, (4) pp 500-506 (2002).

Parameters:
n - number of assets
t - number of samples
C - nxn Correlation matrix
Returns:
new nxn Correlation matrix

scaledRmt

public static cern.colt.matrix.DoubleMatrix2D scaledRmt(int n,
                                                        int t,
                                                        cern.colt.matrix.DoubleMatrix2D C)
This method updates the correlation matrix by removing all the noisy eigenvalues from the paper "Portfolio Optimization and the Random Matrix Problem", Rosenow, et al, Europhysics Letters, 59, (4) pp 500-506 (2002). It then uses the method from Rebonato and Jaeckel to scale each of the rows in the matrix such that they are on the unit sphere. This algorithm requires at least two Eigenvalues to be preserved, so it will lower the value of Lambda(max) such that at least two Eigenvalues are always used in the calculation of the output matrix.

Parameters:
n - number of assets
t - number of samples
C - nxn Correlation matrix
Returns:
new nxn Correlation matrix

rmt0

public static cern.colt.matrix.DoubleMatrix2D rmt0(int n,
                                                   int t,
                                                   cern.colt.matrix.DoubleMatrix2D C)
I would also like to make the algorithm used in Sharifi, et al, Physica A 335 (2004) 629-643. The problem is that when we reconstitute the matrix the correlations on the diagonal are not all = 1, some are more and some are less.