雁起平沙的网络日志

数量金融与R

R的矩阵代数

| Comments

本文翻译自R in Action的附录E,如果对该书感兴趣,请自行购买或去图书馆阅读。
更多的例子请看http://yishuo.org/2011/08/matrix-operations/

书中描述的很多函数都是在矩阵上的操作。矩阵的处理根植于R语言底层。下表描述了求解线性代数问题中重要的操作符和函数。下表中,A和B是矩阵,x和b是向量,k是标量。

矩阵代数的R函数和操作符
操作符或函数描述
+ - * / ^对应元素相加、相减、相乘、相除、求幂
A %*% B矩阵相乘
A %o% B矩阵的外积。AB'
cbind(A, B, ...)横向组合矩阵或向量
col(A)求A的Choleski因子。如果R <- chol(A),则chol(A)包含上三角因子,并有R'R=A
colMeans(A)返回一个向量,包含A每列的均值
crossprod(A)A'A
crossprod(A,B)    A'B
colSums(A)返回一个向量,包含A每列的和
diag(A)返回一个向量,包含主对角线元素
diag(x)以x为主对角线元素创建对角矩阵
diag(k)如果k是标量,则创建一个k × k的单位矩阵
eigen(A)A的特征值和特征向量。如果y <- eigen(A),则
y$val是A的特征值,y$vec是A的特征向量
ginv(A)A的Moore-Penrose广义逆。(需要MASS包)
qr(A)A的QR分解。如果y <- qr(A),则
y$qr有一个包含分解值的上三角矩阵和一个包含分解值信息的下三角矩阵,y$rank是A的秩,y$qraux是包含Q其他信息的向量,y$pivot包含旋转策略的信息。
rbind(A, B, ...)纵向组合矩阵或向量
rowMeans(A)返回一个向量,包含A每行的均值
rowSums(A)返回一个向量,包含A每行的和
solve(A)求A的逆,其中A是方阵
solve(A, b)解出方程b=Ax里的向量x
svd(A)A的奇异值分解。如果y <- svd(A),则 y$d是包含A的奇异值的向量,矩阵y$u的列向量包含A的左奇异值向量,矩阵y$v的列向量包含A的右奇异值向量。
t(A)求A的转置

还有一些用户贡献的包专门用于矩阵代数。matlab 包封装了类似MATLAB语言的矩阵操作函数和变量。这些函数可以帮助用户将MATLAB程序移植到R语言代码。http://mathesaurus.sourceforge.net/octave-r.html上有一份很有用的清单可以帮助你将MATLAB语句转化为R语句。

Matrix 包提供的函数使R可以处理高密度矩阵或稀疏矩阵。它提供了对BLAS(Basic Linear Algebra Subroutines)、Lapack(dense matrix)、TAUCS(sparse matrix)和UMFPACK(sparse matrix)的高效调用。

最后,matrixStats 包提供了对矩阵的行和列的操作方法,例如计数、求和、中心趋势、离差(dispersion)等。每一个函数都进过了优化,使得可以高速高效地运行。

Comments