nearcorr

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

Описание

пример

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

пример

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

Примеры

свернуть все

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

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

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- 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.

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

свернуть все

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

'projection'

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

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

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

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

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

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

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

Примечание

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

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

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

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

свернуть все

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

Ссылки

[1] Higham, N. J. "Вычисляя самую близкую корреляционную матрицу — проблема от финансов". Журнал IMA числового анализа. Издание 22, выпуск 3, 2002.

[2] Ци, H. и D. Sun. "Увеличенный лагранжевый двойной подход для самой близкой проблемы корреляционной матрицы H-Weighted". Журнал IMA числового анализа. Издание 31, выпуск 2, 2011.

[3] Причините острую боль, J. S. D. Sun и J. Sun. "Полусглаженные гомеоморфизмы и сильная устойчивость полуопределенных и проблем взаимозависимости Лоренца". Математика исследования операции. Издание 28, номер 1, 2003.

Смотрите также

| |

Введенный в R2019b