skfolio.utils.stats.cov_nearest#

skfolio.utils.stats.cov_nearest(cov, higham=False, higham_max_iteration=100, warn=False)[来源]#

计算最近的正定协方差矩阵,并且可以计算出Cholesky分解。方差保持不变。非正定的协方差矩阵通常出现在高维问题中。这可能是由于多重共线性、浮点不准确性,或者当观测数量小于资产数量时。

首先,它将协方差矩阵转换为相关性矩阵。然后,它找到最近的相关性矩阵,并使用初始标准差将其转换回协方差矩阵。

Cholesky分解对于对称正定(SPD)矩阵可能由于浮点错误而失败,反之,Cholesky分解对于非SPD矩阵可能成功。因此,我们需要对两者进行测试。我们总是首先测试Cholesky分解,因为它明显比检查正特征值更快。

Parameters:
covndarray of shape (n, n)

协方差矩阵。

highambool, default=False

如果将此设置为 True,则使用 Higham & Nick (2002) 算法 [1],否则特征值被裁剪到零以上的阈值 (1e-13)。默认值 (False) 是使用裁剪方法,因为 Higham & Nick 算法在处理大型数据集时可能较慢。

higham_max_iterationint, default=100

Higham & Nick (2002) 算法的最大迭代次数。默认值是 100

warnbool, default=False

如果设置为 True,当协方差矩阵不是正定的并被替换为最近的矩阵时,将发出用户警告。默认值为 False。

Returns:
covndarray

最近的协方差矩阵。

参考文献

[1]

“计算最近的相关矩阵 - 一个来自金融的问题”

IMA 数值分析期刊

Higham & Nick (2002)