我需要以下对角线:
diag(X %*% solve(A) %*% t(X))
其中A
是满秩矩阵,X
是矩形矩阵。 A
和X
都很稀疏。
我知道发现矩阵的逆是坏的,除非你真的需要它。但是,我无法看到如何重写公式,使solve(A)
被solve
替换为两个参数,这样线性系统就可以在没有显式反转的情况下得到解决。这可能吗?
答案 0 :(得分:8)
也许在我真正开始之前,我需要提一下,如果你这样做
diag(X %*% solve(A, t(X)))
避免了矩阵逆。 solve(A, B)
执行LU分解并使用生成的三角矩阵因子来求解线性系统A x = B
。如果您未指定B
,则默认为对角矩阵,因此您将明确计算A
的矩阵逆。
您应该仔细阅读?solve
,可能需要多次提示。它表示它基于LAPACK
例程DGESV
,您可以在其中找到场景背后的数字线性代数。
DGESV computes the solution to a real system of linear equations
A * X = B,
where A is an N-by-N matrix and X and B are N-by-N RHS matrices.
The LU decomposition with partial pivoting and row interchanges is
used to factor A as
A = P * L * U,
where P is a permutation matrix, L is unit lower triangular, and U is
upper triangular. The factored form of A is then used to solve the
system of equations A * X = B.
solve(A, t(X))
和solve(A) %*% t(X)
之间的差异是效率问题。后者中的一般矩阵乘法%*%
比solve
本身贵得多。
然而,即使你使用solve(A, t(X))
,你也不是最快的,因为你有另一个%*%
。
另外,由于您只需要对角元素,因此在首次获得完整矩阵时会浪费大量时间。 我的回答将让您走上最快的轨道。
我已经重写了LaTeX中的所有内容,内容也大大扩展,包括对R实现的引用。如果您发现QR分解,奇异值分解和Pivoted Cholesky分解,最后会给出额外的资源。
额外资源
如果您对旋转Cholesky分解感兴趣,可以参考Compute projection / hat matrix via QR factorization, SVD (and Cholesky factorization?)。在那里我还讨论了QR分解和奇异值分解。
以上链接在普通最小二乘回归上下文中设置。对于加权最小二乘,您可以参考Get hat matrix from QR decomposition for weighted least square regression。
QR分解也采用紧凑的形式。如果您想了解有关如何完成和存储QR分解的更多信息,请参阅What is "qraux" returned by QR decomposition。
这些问题和答案都集中在数值矩阵计算上。以下给出了一些统计应用: