nearcorr
通过最小化Frobenius距离计算最近的相关矩阵
描述
例子
计算最近的相关矩阵
求一个给定的非正半定矩阵在Frobenius范数中最近的相关矩阵。
指定一个N
——- - - - - -N
具有区间内所有元素的对称矩阵[1]
单位对角线。
A = [1.0000 0000 -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
。
eig (A)
ans =5×1-0.1244 0.3396 1.0284 1.4457 2.3107
最小的特征值小于0
,表示一个
不是正的半定矩阵。
计算最近的相关矩阵使用nearcorr
默认的牛顿算法。
B = nearcorr(A)
B =5×51.0000 0.0372 0.0100 -0.0219 -0.8478 0.0372 1.0000 -0.5449 -0.3757 -0.4849 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×10.000 0.3266 1.0146 1.4113 2.2475
所有的特征值都大于或等于0
,这意味着B
是一个正的半定矩阵。
当你使用nearcorr
时,可以通过设置名称-值对参数指定交替投影算法“方法”
来“投影”
。
nearcorr (,“方法”,“投影”)
ans =5×51.0000 0.0372 0.0100 -0.0219 -0.8478 0.0372 1.0000 -0.5449 -0.3757 -0.4849 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
属性,也可以按元素施加权重“重量”
名称-值对参数。有关按元素权重的更多信息,请参见权重。
W = [0.0000 1.0000 0.1000 0.1500 0.2500 1.0000 0.0500 0.0250 0.1500 0.1000 0.0500 0.0000 0.2500 1 0.1500 0.0250 0.2500 0.2500 0.1500 1 0.2500 0.000];nearcorr (,“重量”W)
ans =5×51.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
向量化的权重“重量”
名称-值对参数。有关向量化权重的更多信息,请参见权重。
W = linspace(0.1,0.01,5)'
W =5×10.1000 0.0775 0.0550 0.0325 0.0100
C = nearcorr(A,“重量”W)
C =5×51.0000 0.0051 0.0021 -0.0056 -0.8490 0.51 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×10.0000 0.3350 1.0272 1.4308 2.2070
所有的特征值都大于或等于0
,这意味着C
是一个正的半定矩阵。
为缺少价值的股票生成一个相关矩阵
使用nearcorr
为缺失值股票的相关矩阵创建一个正半定矩阵。
假设你的股票价值缺少价值。
Stock_Missing = [59.875 42734 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 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 71.90 90.350 52.900 52.690 54.230 61.670 68.170 NaN 57.87088.640 57.370 59.040 59.870 62.090 61.620 66.470 65.370 85.840];
使用相关系数
来计算相关矩阵,然后使用eig
检验相关矩阵是否正半定。
A = corr(Stock_Missing,“行”,“成对”);eig (A)
ans =8×1-0.1300 -0.0398 0.0473 0.2325 0.6278 1.6276 1.7409 3.8936
一个
特征值小于0
,表明相关矩阵不是正半定的。
使用nearcorr
用这个相关矩阵生成一个正的半定矩阵其中所有的特征值都大于或等于0
。
B = nearcorr(A);特征值= eig(B)
特征值=8×10.0000 0.0000 0.0180 0.2205 0.5863 1.6026 1.7258 3.8469
版权所有2019 The MathWorks, Inc.
输入参数
一个
- - - - - -输入相关矩阵
矩阵
输入相关矩阵,指定为N——- - - - - -N区间内所有元素的对称近似相关矩阵[1]
单位对角线。的一个
输入可能是也可能不是一个正的半定矩阵。
例子:A = [1.0000 0000 -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]
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:nearcorr (A,“宽容”,1 e -“MaxIterations”,500年,“方法”,“牛顿”,“权重”,weight_vector)
通过最小化Frobenius距离返回一个最近的相关矩阵。
宽容
- - - - - -算法的终止容限
1 e-6
(默认)|积极的标量
算法的终止容差,指定为由逗号分隔的对组成“宽容”
一个正标量。
例子:“宽容”,1 e
数据类型:单
|双
MaxIterations
- - - - - -求解器迭代的最大次数
200
(默认)|正整数
求解器迭代的最大次数,指定为逗号分隔的对,由“MaxIterations”
一个正整数。
例子:“MaxIterations”,500年
数据类型:单
|双
方法
- - - - - -求解最近相关矩阵问题的方法
“牛顿”
(默认)|“投影”
求解最近相关矩阵问题的方法,指定为由逗号分隔的对组成“方法”
和下表中的值之一。
价值 | 描述 |
---|---|
“牛顿” |
牛顿算法是二次收敛的。 如果您指定 |
“投影” |
交替投影算法能以较高的精度收敛到最近的相关矩阵,最好是线性收敛。 如果您指定 |
例子:“方法”,“投影”
数据类型:字符
|字符串
权重
- - - - - -输入矩阵中输入项的置信度的权重
[]
(默认)|矩阵
|向量
输入矩阵中条目的置信度的权重,指定为逗号分隔的对,由“重量”
要么是对称矩阵,要么是N
——- - - - - -1
向量。
请注意
矩阵权重将权重放在相关矩阵的单个项上。必须指定完整的矩阵,但是您可以控制匹配哪些条目更重要。或者,向量权重将权重放在整个列(以及相应的行)上。与矩阵权重相比,需要指定的权重更少,但整个列(以及相应的行)都由单个权重进行加权。
例子:“重量”,W
数据类型:单
|双
参考文献
[1]海厄姆,新泽西《计算最近的相关矩阵——来自金融的一个问题》IMA数值分析杂志。2002年第3期,第22卷
[2] Qi, H.和D. Sun。h加权最近相关矩阵问题的增广拉格朗日对偶方法。IMA数值分析杂志。2011年第2期,第31卷
[3]庞俊生、孙德昌、孙杰。半定和洛伦兹互补问题的半光滑同胚和强稳定性。运筹学数学“,”第28卷第1期,2003年。
扩展功能
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
。
这个函数完全支持基于线程的环境。有关更多信息,请参见在线程环境中运行MATLAB函数。
版本历史
R2019b引入
另请参阅
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。