statsmodels.stats.correlation_tools.corr_nearest_factor¶
-
statsmodels.stats.correlation_tools.corr_nearest_factor(corr, rank, ctol=
1e-06, lam_min=1e-30, lam_max=1e+30, maxiter=1000)[source]¶ 找到与给定方阵最接近的具有因子结构的协方差矩阵。
- Parameters:¶
- Returns:¶
- rslt
Bunch rslt.corr 是一个定义估计相关结构的 FactoredPSDMatrix。rslt 的其他字段包含从 spg_optim 返回的值。
- rslt
注释
如果一个相关矩阵可以写成 I + XX’ - diag(XX’) 的形式,其中 X 是 n x k 且列线性无关,并且每行的平方和最多等于 1,那么它就具有因子结构。近似计算是基于 Frobenius 范数进行的。
当存在一个近似的非半正定相关矩阵,并且需要估计总体相关矩阵的逆、平方根或逆平方根时,此例程非常有用。因子结构允许在不构建任何 n x n 矩阵的情况下完成这些任务。
这是一个非凸问题,没有已知的保证全局收敛的算法来计算解决方案。Borsdof、Higham 和 Raydan (2010) 比较了几种方法并发现谱投影梯度 (SPG) 方法(此处使用)表现最佳。
输入矩阵 corr 可以是密集的 numpy 数组或任何 scipy 稀疏矩阵。如果输入矩阵是通过对非常大的样本相关矩阵进行阈值处理获得的,后者非常有用。如果 corr 是稀疏的,计算会进行优化以节省内存,因此不会构建超过 10^6 个元素的工作矩阵。
参考文献
示例
对相关矩阵进行硬阈值处理可能会导致矩阵不是半正定的。我们可以通过以下方法近似一个硬阈值处理后的相关矩阵为一个半正定矩阵,其中corr是输入的相关矩阵。
>>> import numpy as np >>> from statsmodels.stats.correlation_tools import corr_nearest_factor >>> np.random.seed(1234) >>> b = 1.5 - np.random.rand(10, 1) >>> x = np.random.randn(100,1).dot(b.T) + np.random.randn(100,10) >>> corr = np.corrcoef(x.T) >>> corr = corr * (np.abs(corr) >= 0.3) >>> rslt = corr_nearest_factor(corr, 3)
Last update:
Oct 16, 2024