nearcorr

Вычислите ближайшую корреляционную матрицу путем минимизации расстояния Фробениуса

Описание

пример

Y = nearcorr(A) возвращает ближайшую матрицу корреляции Y путем минимизации расстояния Фробениуса.

пример

Y = nearcorr(___,Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

Найдите ближайшую корреляционную матрицу в норме Фробениуса для заданной непозитивной полуопределенной матрицы.

Задайте N-by- N симметричная матрица со всеми элементами в интервале [-1, 1] и единичную диагональ.

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]; 

Вычислите собственные значения A использование eig.

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

В сложение можно навязывать N-by- 1 векторизованные веса путем определения 'Weights' аргумент пары "имя-значение". Для получения дополнительной информации о векторизованных весах смотрите '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

Копирайт 2019 The MathWorks, Inc.

Входные параметры

свернуть все

Входная корреляционная матрица, заданная как N -by N симметричная аппроксимационная корреляционная матрица со всеми элементами в интервале [-1 1] и единичную диагональ. The 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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 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'

Алгоритм Ньютона квадратично сходится.

Если вы задаете 'newton' метод, Weights может быть либо симметричной матрицей, либо N-by- 1 вектор.

'projection'

Алгоритм переменных проекций может сходиться к ближайшей корреляционной матрице с высокой точностью, в лучшем случае линейно.

Если вы задаете 'projection' метод, Weights должен быть N-by- 1 вектор.

Пример: 'Method','projection'

Типы данных: char | string

Веса для доверия уровней записей в матрице входа, заданные как разделенные запятой пары, состоящие из 'Weights' и либо симметричная матрица, либо N-by- 1 вектор.

  • Симметричная матрица - Когда вы задаете Weights как симметричная матрица W со всеми элементами > = 0 для выполнения элементарного взвешивания, ближайшей корреляционной матрицы Y вычисляется путем минимизации нормы (W ⚬ (A - Y)). Большие значения веса придают большую важность соответствующим элементам в A.

  • N-by- 1 вектор - Когда вы задаете Weights как N-by- 1 векторная w с положительными числовыми значениями, ближайшая матрица корреляции Y вычисляется путем минимизации нормы (diag(<reservedrangesplaceholder0>)0.5 × (A - Y) × <reservedrangesplaceholder0>(<reservedrangesplaceholder0>)0.5).

Примечание

Веса матриц ставят вес на отдельные записи корреляционной матрицы. Необходимо указать полную матрицу, но можно управлять, какие записи важнее соответствовать. Кроме того, веса векторов помещают вес на полный столбец (и соответствующую строку). Необходимо задать меньше весов по сравнению с весами матрицы, но целый столбец (и соответствующая строка) взвешивается одним весом.

Пример: 'Weights',W

Типы данных: single | double

Выходные аргументы

свернуть все

Ближайшая матрица корреляции к входу A, возвращается как положительная полуопределенная матрица.

Ссылки

[1] Хайам, Н. Дж. Вычисление ближайшей матрицы корреляции - задача из финансов. IMA Journal of Numerical Analysis. Том 22, Выпуск 3, 2002.

[2] Qi, H. and D. Sun. «An Augmented Lagrangian Dual Approach for the H-Weighted Near Correlation Matrix Problem». IMA Journal of Numerical Analysis. Том 31, Выпуск 2, 2011.

[3] Pang, J. S., D. Sun, and J. Sun. «Semismooth Homeomorphisms and Strong Stability of Semidefinite and Lorentz Complementarity Problems». Математика исследования операций. Том 28, № 1, 2003.

См. также

| |

Введенный в R2019b