对于鲁棒拟合问题,我想通过杠杆值找到异常值,杠杆值是'Hat'矩阵的对角元素。设数据矩阵为X
(n * p),Hat矩阵为:
Hat = X(X'X)^{-1}X'
其中X'
是X
的转置。
当n
很大时,Hat矩阵是一个巨大的(n * n
)。因此计算它是耗时的。我想知道有没有更快的方法来计算杠杆值?
答案 0 :(得分:1)
您没有指定编程语言,所以我只关注算法部分。
如果你已经拟合了最小二乘问题正交方法,如QR分解和SVD,那么帽子矩阵就是简单的形式。您可以查看我的答案Compute projection / hat matrix via QR factorization, SVD (and Cholesky factorization?),了解帽子矩阵的明确形式(用LaTeX编写)。注意,OP需要完整的帽子矩阵,所以我没有演示如何有效地计算对角线元素。但它真的很简单。请注意,对于正交方法,hat矩阵最终以QQ'
形式结束。对角线是行内产品。不同行之间的交叉产品给出了对角线。在R中,这样的行内积可以计算为rowSums(Q ^ 2)
。
我的回答How to compute diag(X %% solve(A) %% t(X)) efficiently without taking matrix inverse?处于更一般的环境中。 Hat矩阵是A = X'X
的特例。这个答案集中在使用像Cholesky分解和LU分解这样的三角分解,并展示了如何仅计算对角元素。您会在此处看到colSums
而不是rowSums
,因为帽子矩阵的格式为Q'Q
。
最后,我想指出一些统计数据。单独的高杠杆率并不表示异常值。高杠杆和高残差(即高库克距离)的组合表示异常值。