Positive Semi-Definite Matrix Example
To illustrate @POSD, suppose we have a covariance matrix for three stocks, AAPL, AMZN and GOOG. This covariance matrix was "computed" by making an educated guess of what the covariances are amongst our three stocks. A requirement for covariance matrices is that they be positive semi-definite (POSD). It turns out that by estimating the covariance matrix, it's possible that the resulting matrix is not truly POSD. To resolve this problem, we will find a new matrix that is close to our original matrix, but with the requirement that the new matrix be positive semi-definite. The model follows:
MODEL:
SETS:
STOCK;
SXS( STOCK, STOCK): XG, XP, ERROR;
ENDSETS
DATA:
STOCK= AAPL GOOG AMZN;
! We have some "guesstimates" of individual entries
of a covariance matrix, however, taken together,
the resulting matrix happens to not be Positive Definite
and thus not a valid covariance matrix;
XG =
.011 -.013 .012
-.013 .061 .07
.012 .07 .06 ;
ENDDATA
! Find a symmetric matrix XP that is close to XG
but is positive definite;
! Minimize some measure of difference between XG and XP;
MIN = @SUM( SXS( I, J): ERROR( I, J)^2);
! Measure the errors;
@FOR( SXS( I, J):
ERROR( I, J) = XP( I, J) - XG( I, J);
@FREE( ERROR);
);
! Off diagonal terms can be negative;
@FOR( SXS( I, J) | I #NE# J: @FREE( XP( I, J)));
! The new matrix must be positive semi-definite;
@POSD( XP);
DATA:
@TEXT() = 'Our initial guess matrix:';
@TEXT() = @TABLE(XG);
@TEXT() = '';
@TEXT() = 'A Positive Semi-Definite matrix close to our guess:';
@TEXT() = @TABLE(XP);
@TEXT() = '';
ENDDATA
END
Model: POSDCOVMTX
The basic idea behind the model is that the solver should find a new matrix, XP, that is close to our guess matrix, XG, as measured by the sum of the squared differences of each of the matrix elements, and that XP must be POSD. The following use of @POSD forces the POSD requirement on XP:
! The new matrix must be positive semi-definite;
@POSD( XP);
The data section of the model uses the @TABLE function to display both the original non-POSD matrix and the new POSD matrix:
Our initial guess matrix:
AAPL GOOG AMZN
AAPL 0.1100000E-01 -0.1300000E-01 0.100E-01
GOOG -0.1300000E-01 0.6100000E-01 0.7000000E-01
AMZN 0.1200000E-01 0.7000000E-01 0.6000000E-01
A Positive Semi-Definite matrix close to our guess:
AAPL GOOG AMZN
AAPL 0.1590567E-01 -0.6982941E-02 0.5975522E-02
GOOG -0.6982941E-02 0.6838027E-01 0.6261064E-01
AMZN 0.5975522E-02 0.6261064E-01 0.6739848E-01