R:矩阵工具

来源:互联网 发布:上海数据恢复公司 编辑:程序博客网 时间:2024/06/09 19:56


    R中包括许多对矩阵操作的操作符和函数。

 

►矩阵相乘

    操作符%*% 用于矩阵相乘。n ×1 或者1 ×n 矩阵在情况允许的时候可以作为一个长度为n 的向量处理。反之,向量若出现在矩阵相乘的表达式中会被自动转换成与矩阵对应的行或者列向量。

    如果A和B是大小一样的方阵,那么:> A * B 将是一个对应元素乘积的矩阵。而:

> A %*% B

    则是一个矩阵积。

 

►线性方程和求逆

    求解线性方程组是矩阵乘法的逆运算。当下面的命令运行后:

> b <- A %*% x

    如果仅仅给出A和b,那么x就是该线性方程组的根。在R里面,用命令:

> solve( A, b )

    求解线性方程组,并且返回x(可能会有一些精度丢失)。在现行代数里面,该值表示为x=A-1b,其中,A-1表示A的逆(inverse)。矩阵的逆可以用下面的命令计算:

> solve( A )

    在数学上,用直接求逆的办法解 x <- solve( A ) %*% b相比,solve( A, b )不仅低效,而且还有一种潜在的不稳定性。

 

►特征值和特征向量

    函数eigen(Sm)用来计算矩阵Sm的特征值和特征向量。这个函数的返回值是一个含有values和vectors两个分量的列表,命令:

> ev <- eigen( Sm )

    将把这个列表赋给ev。ev$val表示Sm的特征向量,ev$vec则是相应特征向量构成的一个矩阵。

注:对于大的矩阵,若无必要,最好不要用下面的表达式计算特征向量:

> ev <- eigen( Sm, only.values=TRUE )$values

 

►奇异值分解和行列式

    函数svd(M)可以把任意一个矩阵M作为一个参数,且对M进行奇异值分解。这包括一个和M列空间一致的正交列U的矩阵,一个和M行空间一致的正交列V的矩阵,以及一个正元素D的对角矩阵,如M = U %*% D %*% t(V)。D实际上以对角元素向量的形式返回。svd(M)的结果是由d、u、v构成的一个列表。

    如果M是一个方阵,则:

> absdetM <- prod( svd(M)$d )

    计算M行列式的绝对值。R有一个计算行列式(包括符号)的内置函数det和另外一个给出符号和模的函数。

 

►最小二乘法拟合QR分解

    函数lsfit()返回最小二乘法拟合(Least squares fitting)的结果列表。赋值可以采用以下命令:

> ans <- lsfit( X, y )

    这样就得到了最小二乘法拟合结果,其中y是观测向量,X是设计矩阵。注:总的平均值会被自动加入而没有必要显式的加入到X的列中。

注:同时可以参考相关的回归诊断函数ls.diag()。

    另外一个密切相关的函数是qr()及其相关函数。命令:

Xplus <- qr( X )

b <- qr.coef( Xplus, y )

fit <- qr.fitted( Xplus, y )

res <- qr.resid( Xplus, y )

    这些计算将会计算y在fit的X上的正交投影,在res正交补空间上的投影以及在b投影上的系数向量。

注:这里没有要求X有完整的列秩,因此可能会出现冗余。如果出现,就会被自动去掉。这里提到的方法是原始的底层实现的最小二乘法计算。

 

 

 

0 0