nearcorr
フロベニウス距離を最小化することで最近相関行列を計算します。
説明
例
特定の半負定値行列について、フロベニウス ノルムの最近相関行列を求めます。
区間 [-1, 1] 内のすべての要素と単位対角をもつ N 行 N 列の対称行列を指定します。
A = [1.0000 0 0 0 -0.9360
0 1.0000 -0.5500 -0.3645 -0.5300
0 -0.5500 1.0000 -0.0351 0.0875
0 -0.3645 -0.0351 1.0000 0.4557
-0.9360 -0.5300 0.0875 0.4557 1.0000]; eigを使用して A の固有値を計算します。
eig(A)
ans = 5×1
-0.1244
0.3396
1.0284
1.4457
2.3107
最小固有値は 0 より小さくなっています。これは、A が半正定値行列ではないことを示しています。
既定のニュートン アルゴリズムをもつ nearcorr を使用して、最近相関行列を計算します。
B = nearcorr(A)
B = 5×5
1.0000 0.0372 0.0100 -0.0219 -0.8478
0.0372 1.0000 -0.5449 -0.3757 -0.4849
0.0100 -0.5449 1.0000 -0.0381 0.0996
-0.0219 -0.3757 -0.0381 1.0000 0.4292
-0.8478 -0.4849 0.0996 0.4292 1.0000
B の固有値を計算します。
eig(B)
ans = 5×1
0.0000
0.3266
1.0146
1.4113
2.2475
固有値はすべて 0 以上です。これは、B が半正定値行列であることを意味しています。
nearcorr を使用する場合、名前と値のペアの引数 'method' を 'projection' に設定することで、交代射影アルゴリズムを指定できます。
nearcorr(A,'method','projection')
ans = 5×5
1.0000 0.0372 0.0100 -0.0219 -0.8478
0.0372 1.0000 -0.5449 -0.3757 -0.4849
0.0100 -0.5449 1.0000 -0.0381 0.0996
-0.0219 -0.3757 -0.0381 1.0000 0.4292
-0.8478 -0.4849 0.0996 0.4292 1.0000
また、'Weights' の名前と値のペアの引数を指定することで、要素単位の重みを課すこともできます。要素単位の重みの詳細については、Weightsを参照してください。
W = [0.0000 1.0000 0.1000 0.1500 0.2500
1.0000 0.0000 0.0500 0.0250 0.1500
0.1000 0.0500 0.0000 0.2500 1
0.1500 0.0250 0.2500 0.0000 0.2500
0.2500 0.1500 1 0.2500 0.0000];
nearcorr(A,'Weights',W) ans = 5×5
1.0000 0.0014 0.0287 -0.0222 -0.8777
0.0014 1.0000 -0.4980 -0.7268 -0.4567
0.0287 -0.4980 1.0000 -0.0358 0.0878
-0.0222 -0.7268 -0.0358 1.0000 0.4465
-0.8777 -0.4567 0.0878 0.4465 1.0000
さらに、'Weights' の名前と値のペアの引数を指定することで、N 行 1 列のベクトル化された重みを課すこともできます。ベクトル化された重みの詳細については、Weightsを参照してください。
W = linspace(0.1,0.01,5)'
W = 5×1
0.1000
0.0775
0.0550
0.0325
0.0100
C = nearcorr(A,'Weights', W) C = 5×5
1.0000 0.0051 0.0021 -0.0056 -0.8490
0.0051 1.0000 -0.5486 -0.3684 -0.4691
0.0021 -0.5486 1.0000 -0.0367 0.1119
-0.0056 -0.3684 -0.0367 1.0000 0.3890
-0.8490 -0.4691 0.1119 0.3890 1.0000
C の固有値を計算します。
eig(C)
ans = 5×1
0.0000
0.3350
1.0272
1.4308
2.2070
固有値はすべて 0 以上です。これは、C が半正定値行列であることを意味しています。
nearcorr を使用して、欠損値のある株の相関行列の半正定値行列を作成します。
株価に欠損値があると仮定します。
Stock_Missing = [59.875 42.734 47.938 60.359 NaN 69.625 61.500 62.125
53.188 49.000 39.500 64.813 34.750 56.625 83.000 44.500
55.750 50.000 38.938 62.875 30.188 43.375 NaN 29.938
65.500 51.063 45.563 69.313 48.250 62.375 85.250 46.875
69.938 47.000 52.313 71.016 37.500 59.359 61.188 48.219
61.500 44.188 NaN 57.000 35.313 55.813 51.500 62.188
59.230 48.210 62.190 61.390 54.310 70.170 61.750 91.080
NaN 48.700 60.300 68.580 61.250 70.340 61.590 90.350
52.900 52.690 54.230 61.670 68.170 NaN 57.870 88.640
57.370 59.040 59.870 62.090 61.620 66.470 65.370 85.840];
corrを使用して相関行列を計算してから、eigを使用して相関行列が半正定値かどうか確認します。
A = corr(Stock_Missing, 'Rows','pairwise'); eig(A)
ans = 8×1
-0.1300
-0.0398
0.0473
0.2325
0.6278
1.6276
1.7409
3.8936
A は 0 より小さい固有値を持っています。これは、相関行列が半正定値ではないことを示しています。
この相関行列で nearcorr を使用して、すべての固有値が 0 以上である半正定値行列を生成します。
B = nearcorr(A); eigenvalues = eig(B)
eigenvalues = 8×1
0.0000
0.0000
0.0180
0.2205
0.5863
1.6026
1.7258
3.8469
Copyright 2019 The MathWorks, Inc.
入力引数
入力相関行列。区間 [-1 1] 内のすべての要素と単位対角をもつ N 行 N 列の対称近似相関行列を指定します。A の入力は半正定値行列である場合と、そうでない場合があります。
例: A = [1.0000 0 0 0 -0.9360 0 1.0000 -0.5500 -0.3645 -0.5300 0 -0.5500 1.0000 -0.0351 0.0875 0 -0.3645 -0.0351 1.0000 0.4557 -0.9360 -0.5300 0.0875 0.4557 1.0000]
データ型: single | double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: nearcorr(A,'Tolerance',1e-7,'MaxIterations',500,'Method','newton','Weights',weight_vector) は、フロベニウス距離を最小化することで、最近相関行列を返します。
アルゴリズムの終了許容誤差。'Tolerance' と正のスカラーから構成されるコンマ区切りのペアとして指定します。
例: 'Tolerance',1e-7
データ型: single | double
ソルバーの最大反復回数。'MaxIterations' と正の整数から構成されるコンマ区切りのペアとして指定します。
例: 'MaxIterations',500
データ型: single | double
最近相関行列の問題を解くメソッド。'Method' と次のテーブルのいずれかの値から構成されるコンマ区切りのペアとして指定します。
| 値 | 説明 |
|---|---|
'newton' | ニュートン アルゴリズムは二次収束アルゴリズムです。
|
'projection' | 交代射影アルゴリズムは、高精度かつ最高の線形で最近相関行列に収束できます。
|
例: 'Method','projection'
データ型: char | string
入力行列のエントリの信頼水準に関する重み。'Weights' と、対称行列または N 行 1 列のベクトルのいずれかで構成されるコンマ区切りのペアとして指定します。
メモ
行列の重みは相関行列の個々のエントリに重みを適用します。完全な行列を指定しなければなりませんが、どのエントリが一致するのがより重要であるかを制御できます。あるいは、ベクトルの重みはすべての列 (および対応する行) に重みを適用します。行列の重みと比較して、指定しなければならない重みは小さいですが、列全体 (および対応する行) が単一の重みで重み付けされます。
例: 'Weights',W
データ型: single | double
参照
[1] Higham, N. J. "Computing the Nearest Correlation Matrix — A Problem from Finance." IMA Journal of Numerical Analysis. Vol. 22, Issue 3, 2002.
[2] Qi, H. and D. Sun. "An Augmented Lagrangian Dual Approach for the H-Weighted Nearest Correlation Matrix Problem." IMA Journal of Numerical Analysis. Vol. 31, Issue 2, 2011.
[3] Pang, J. S., D. Sun, and J. Sun. "Semismooth Homeomorphisms and Strong Stability of Semidefinite and Lorentz Complementarity Problems." Mathematics of Operation Research. Vol. 28, Number 1, 2003.
拡張機能
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2019b で導入
参考
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)