33 R中的矩阵计算(*)

33.1 Base包的矩阵功能

可以用matrix()函数生成一个矩阵,如

matrix(1:12, nrow=4, ncol=3)
##      [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

A + B是矩阵加法, A - B是矩阵减法, A %*% B是矩阵乘法。 x * Ax是标量,A是矩阵,作矩阵数乘。 如果x是向量,A是矩阵, 则x %*% A表示行向量x左乘矩阵AA %*% x表示列向量x右乘矩阵A

对矩阵\(A, B\)crossprod(A)计算\(A^T A\), crossprod(A, B)计算\(A^T B\)。 注意,如果x是向量, 为了计算x的元素平方和, 不应该使用crossprod而应写成sum(x^2)。 为了计算两个向量x, y的内积, 应该写成sum(x * y)

solve(A)求方阵A的逆矩阵; solve(A, x)解线性方程组\(A x = b\)\(x\)solve(A, B),若B也是矩阵,求\(A^{-1}B\)

R函数backsolve (R, b)求解上三角方程组 \(R x = b\)forwardsolve(L, b)求解下三角方程组\(L x = b\)

R函数chol(x)对正定矩阵作Cholesky分解\(R^T R\), 结果\(R\)是上三角矩阵。 默认不使用主元,加pivot=TRUE选项可以使用主元法, 可以对半正定矩阵分解。

如果对正定矩阵\(A\)做了Cholesky分解\(A = R^T R\), 可以从\(R\)计算\(A = R^{-1} R^{-T}\); 如果对矩阵\(X\)得到了QR分解\(X = QR\), 可以从\(R\)计算\((X^T X)^{-1} = (R^T R)^{-1} = R^{-1} R^{-T}\)。 R函数chol2inv(x)计算这两种逆矩阵, 其中x是满秩上三角阵。

qr(A)计算QR分解\(A = QR\), 并返回压缩格式的计算结果与辅助信息的列表, 设结果为z, 可以用qr.Q(z)返回矩阵\(Q\), qr.R(z)返回矩阵\(R\)qr.solve(z, b)利用得到的QR分解求解线性方程组\(A x = b\)

在统计计算中QR分解经常用来计算回归分析的最小二乘估计, 或用在Newton-Raphson优化时计算逆矩阵乘以梯度。 设zqr(X)的结果, 则qr.coef(z, y)利用QR分解求最小二乘估计\((X^T X)^{-1} X^T y\)qr.qy(z, y)计算\(Q y\), qr.qty(z, y)计算\(Q^T y\)qr.resid(z, y)计算残差, qr.fitted(z, y)计算拟合值。

eigen(A)求方阵\(A\)的特征值和特征向量, 结果返回一个列表, 其中元素values为各特征值, vectors是一个方阵, 矩阵的各列为对应的特征向量。 可以加选项symmetric=TRUE表示输入的A是对称阵(输入复数矩阵时表示是Hermite阵)。 加选项only.values=TRUE表示仅要求计算并输出特征值, 不需要输出特征向量。

svd(A, nu, nv)求奇异值分解\(A = Q \Lambda V^T\), 其中\(A\)\(n \times p\)矩阵, nu表示要计算的左奇异向量个数, nv表示要计算的右奇异向量个数, 默认nu, nv都是\(A\)的行、列数最小值。 因为计算奇异向量比较慢, 所以不需要所有奇异向量时可以取较小的nunv。 结果是包含d, u, v三个元素的列表, d是长度为\min(n,p)的保存奇异值的向量, u是行数为\(n\)、列数为nu的左奇异值列向量组成的矩阵, 当nu=0时不输出此项; v是行数为\(n\)、列数为nv的右奇异值列向量组成的矩阵, 当nv=0时不输出此项。

33.2 Matrix包的矩阵功能

Matrix扩展包补充了许多base部分没有提供的稠密矩阵功能, 并提供了base部分没有的稀疏矩阵的支持。 Matrix包使用特有的Matrix类型, 此类型又有对角阵、三角阵、分块对角阵、稀疏矩阵等变种, Matrix包的矩阵类型在做了分解后会将分解结果保存在原始矩阵的变量中,有利用分解结果的重复利用。

Matrix(x, nr, nc)生成一个稠密矩阵, 与matrix()函数类似。 cBind()rBind()cbind()rbind()类似。 t(A)返回转置。

as(A, "sparseMatrix")返回A转换为稀疏矩阵的结果。 系数矩阵的运算结果尽可能保持为稀疏矩阵。

详见Matrix包的文档。

33.3 其它包的矩阵功能

MASS::ginv(X)X的加号逆(Moore-Penrose广义逆)。