协方差估计的收缩算法比较

在统计学中,协方差矩阵的估计对于许多应用领域都是至关重要的。然而,在样本量较少的情况下,传统的样本协方差矩阵可能不稳定。为了解决这个问题,Ledoit和Wolf提出了一种计算渐近最优收缩参数的闭合公式,该参数最小化了均方误差(MSE)标准,从而得到了Ledoit-Wolf协方差估计。Chen等人提出了Ledoit-Wolf收缩参数的改进版本,即OAS系数,其在假设数据为高斯分布的情况下,收敛性能显著更好。本例受到Chen等人发表的文献[1]的启发,展示了使用高斯分布数据估计LW和OAS方法的MSE,并进行了比较。

在进行协方差估计时,收缩算法是一种常用的技术,它通过将样本协方差矩阵向一个目标矩阵(通常是单位矩阵)收缩来提高估计的稳定性。Ledoit-Wolf方法和OAS方法都是基于这种思想,但它们在收缩参数的计算上有所不同。Ledoit-Wolf方法通过最小化MSE准则来确定收缩参数,而OAS方法则在此基础上进行了改进,以获得更好的收敛性能。

为了比较这两种方法的性能,进行了模拟实验。首先,生成了一个具有AR(1)过程的模拟协方差矩阵,然后使用高斯分布数据来模拟不同的样本大小。对于每个样本大小,重复了100次实验,并计算了Ledoit-Wolf和OAS方法的MSE。实验结果表明,OAS方法在大多数情况下都能提供比Ledoit-Wolf方法更小的MSE,这表明了其在高斯分布数据下的优越性。

此外,还绘制了两种方法的收缩系数。收缩系数是衡量协方差矩阵收缩程度的一个指标,其值越接近1,表示收缩程度越小。从图中可以看出,随着样本量的增加,两种方法的收缩系数都趋向于1,这意味着在大样本情况下,两种方法的性能逐渐接近。然而,在小样本情况下,OAS方法的收缩系数更接近1,这表明其在小样本情况下具有更好的稳定性。

import matplotlib.pyplot as plt import numpy as np from scipy.linalg import cholesky, toeplitz from sklearn.covariance import OAS, LedoitWolf np.random.seed(0) n_features = 100 r = 0.1 real_cov = toeplitz(r**np.arange(n_features)) coloring_matrix = cholesky(real_cov) n_samples_range = np.arange(6, 31, 1) repeat = 100 lw_mse = np.zeros((n_samples_range.size, repeat)) oa_mse = np.zeros((n_samples_range.size, repeat)) lw_shrinkage = np.zeros((n_samples_range.size, repeat)) oa_shrinkage = np.zeros((n_samples_range.size, repeat)) for i, n_samples in enumerate(n_samples_range): for j in range(repeat): X = np.dot(np.random.normal(size=(n_samples, n_features)), coloring_matrix.T) lw = LedoitWolf(store_precision=False, assume_centered=True) lw.fit(X) lw_mse[i, j] = lw.error_norm(real_cov, scaling=False) lw_shrinkage[i, j] = lw.shrinkage_ oa = OAS(store_precision=False, assume_centered=True) oa.fit(X) oa_mse[i, j] = oa.error_norm(real_cov, scaling=False) oa_shrinkage[i, j] = oa.shrinkage_ plt.subplot(2, 1, 1) plt.errorbar(n_samples_range, lw_mse.mean(1), yerr=lw_mse.std(1), label="Ledoit-Wolf", color="navy", lw=2) plt.errorbar(n_samples_range, oa_mse.mean(1), yerr=oa_mse.std(1), label="OAS", color="darkorange", lw=2) plt.ylabel("Squared error") plt.legend(loc="upper right") plt.title("Comparison of covariance estimators") plt.xlim(5, 31) plt.subplot(2, 1, 2) plt.errorbar(n_samples_range, lw_shrinkage.mean(1), yerr=lw_shrinkage.std(1), label="Ledoit-Wolf", color="navy", lw=2) plt.errorbar(n_samples_range, oa_shrinkage.mean(1), yerr=oa_shrinkage.std(1), label="OAS", color="darkorange", lw=2) plt.xlabel("n_samples") plt.ylabel("Shrinkage") plt.legend(loc="lower right") plt.ylim(plt.ylim()[0], 1.0 + (plt.ylim()[1] - plt.ylim()[0]) / 10.0) plt.xlim(5, 31) plt.show()

总的来说,Ledoit-Wolf和OAS方法都是有效的协方差估计收缩算法,但OAS方法在高斯分布数据下具有更好的收敛性能。在实际应用中,可以根据数据的分布特性和样本量的大小来选择合适的方法。此外,通过绘制收缩系数的图表,可以直观地了解不同方法在不同样本量下的表现,从而为实际问题提供更准确的解决方案。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485