exponenta event banner

nearcorr

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

Описание

пример

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

пример

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

Авторское право 2019 The MathWorks, Inc.

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

свернуть все

Входная корреляционная матрица, заданная как N-на-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 vector - при указании Weights как Nоколо-1 вектор w с положительными числовыми значениями, ближайшая корреляционная матрица Y вычисляется минимизацией нормы (diag(w) 0,5 × (A-Y) ×diag(w) 0,5).

Примечание

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

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

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

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

свернуть все

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

Ссылки

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

[2] Ци, Х. и Д. Сун. «Дополненный лагранжиановый двойной подход для Н-взвешенной ближайшей проблемы корреляционной матрицы». Журнал численного анализа IMA. Том 31, выпуск 2, 2011.

[3] Панг, Дж. С., Д. Сун и Дж. Сун. «Семизматические гомеоморфизмы и сильная стабильность проблем семидефинита и лоренцевой комплементарности». Математика исследования операции. Том 28, № 1, 2003.

См. также

| |

Представлен в R2019b