最近傍相関行列問題とは?
固有値が負の値でないという条件を満たす行列は半正定値行列と呼ばれます。 相関行列は半正定値行列であり且つ正方対称実行列で対角上のすべての値が1となります。 (行列Cが相関行列である場合その要素C(I,J)は実体Iと実体Jの相関を表します。)
様々な理由により相関行列であるはずの行列が半正定値の条件を満たさなくなってしまう場合があります。 例えば金融の分野でのポートフォリオ構築において各銘柄間の相関が利用されますが、データの部分的な欠落等により相関行列の条件を満たさなくなってしまう場合がこれにあたります。
このような相関行列を近似的に表すような(しかし相関行列の条件を満たさない)行列であっても、その後の解析等に利用したい場合があります。しかしながらこのような解析の多くは入力行列が相関行列である事を前提に作られているため、そのまま近似行列を与えても正しい結果を得る事ができません。
このような背景から相関を近似的に表す行列からそれに最も近い相関行列を求める必要が出てきます。 これが最近傍行列(Nearest Correlation Matrix)問題です。
より詳しい説明は以下(英語)をご参照下さい。
Nearest Correlation Matrixについての説明 - nAG U.Kによる資料.
壊れた相関行列の修復(Fixing a broken correlation matrix) - nAG U.Kによる資料.
最近傍相関行列を計算するサンプルプログラム
最近傍相関行列を実際に求めるためのサンプルプログラムを公開しています。以下のリンクからC/C++, Fortran, C#, Pythonの各言語によるサンプルプログラムコードをご確認下さい。
Cによる最近傍相関行列の計算
Fortranによる最近傍相関行列の計算
C#(.NET)による最近傍相関行列の計算
Pythonによる最近傍相関行列の計算
nAGが提供する最近傍相関行列アルゴリズム
nAGライブラリでは最近傍相関行列の計算を行うために複数のアルゴリズム(ルーチン)を提供しています。
参考文献
-
Nick Higham,『The Nearest Correlation Matrix』, 2013
https://nickhigham.wordpress.com/2013/02/13/the-nearest-correlation-matrix/