当前位置: 首页 > news >正文

【应用多元统计分析】--数据矩阵及R语言表示

        在多元分析中,数据通常以矩阵的形式出现,下面结合R语言介绍基本的矩阵运算。主要包括:创建矩阵向量,矩阵加减、乘积,矩阵的逆,行列式的值,特征值与特征向量,QR分解,奇异值分解,取矩阵的上下三角元素,向量化算子等。

1.创建一个向量(随机变量、一维数组)

用函数c()来创建一个向量

#创建向量
x1=c(171,175,159,155,152,158,154,164,168,166,159,164)
x2=c(57,64,41,38,35,44,41,51,57,49,47,46)length(x1)#返回向量长度
length(x2)mode(x1)#返回向量的数据类型

2.创建一个矩阵(二维数组)

1)合并命令

可以用rbind()、cbind()将两个或两个以上的向量或矩阵合并起来,rbind()表示按行合并,cbind()按列合并。

#创建矩阵
rbind(x1,x2)#按行合并
cbind(x1,x2)#按列合并

2)生成矩阵

matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
#data为必要的矩阵元素,nrow为行数,ncol为列数,这俩乘积应为矩阵元素个数
#byrow控制排列元素是否按行进行
#dimnames给定行和列的名称
matrix(x1,nrow=3,ncol=4)#生成矩阵,matrix(x1,nrow=4,ncol=3)

3.矩阵转置

A为m*n矩阵,A'为其转置矩阵,求A’在R中可用函数t()或transpose()

#矩阵转置
A=matrix(1:12,nrow=3,ncol=4)
t(A)#用函数t()或transpose()转置

4.矩阵相加减 

#矩阵相加减
A=B=matrix(1:12,nrow=3,ncol=4)
A+B

5.矩阵相乘

A为m*n矩阵,B为n*k矩阵,在R 中求AB可用符号“%*%” 

#矩阵相乘
A=matrix(1:12,nrow=3,ncol=4)
B=matrix(1:12,nrow=4,ncol=3)
A%*%B

6.矩阵对角元素相关运算  

#矩阵对角元素相关运算
A=matrix(1:16,nrow=4,ncol = 4)
diag(A)#产生以这个向量为对角元素的对角矩阵
#对一个正整数k应用diag()函数将产生k维单位矩阵
diag(diag(A))
diag(3)

7.矩阵求逆

矩阵求逆可用函数solve(),应用solve(A,b)运算结果可解线性方程组Ax=b,
若b缺省,则系统默认为单位矩阵,因此可用其进行矩阵求逆

#矩阵求逆
A=matrix(rnorm(16),4,4);A
solve(A)
#矩阵求逆可用函数solve(),应用solve(A,b)运算结果可解线性方程组Ax=b,
#若b缺省,则系统默认为单位矩阵,因此可用其进行矩阵求逆

8.矩阵的特征值与特征向量

矩阵A的谱分解为A=U^U',其中^是由A的特征值组成的对角矩阵,
U的列为A的特征值对应的特征向量,可以用函数eigen()得到U和A
eigen(x,symmetric,only.values=FALSE,EISPACK = FALSE)
其中x为矩阵,symmetric项指定矩阵x是否为对称矩阵,不指定则系统自动检测

#矩阵特征值与特征向量
A=diag(4)+1
A
A.e=eigen(A,symmetric = T)
A.e
#矩阵A的谱分解为A=U^U',其中^是由A的特征值组成的对角矩阵,
#U的列为A的特征值对应的特征向量,可以用函数eigen()得到U和A
#eigen(x,symmetric,only.values=FALSE,EISPACK = FALSE)
#其中x为矩阵,symmetric项指定矩阵x是否为对称矩阵,不指定则系统自动检测
A.e$vectors%*%diag(A.e$values)%*%t(A.e$vectors)

9.矩阵的Choleskey分解

对于正定矩阵A,可对其进行Choleskey分解,A=P'P,P为上三角矩阵
在R中可以用chol()函数进行Choleskey分解

#矩阵的Choleskey分解
#对于正定矩阵A,可对其进行Choleskey分解,A=P'P,P为上三角矩阵
#在R中可以用chol()函数进行Choleskey分解
A.e=chol(A)
A.e
t(A.e)%*%A.e

10.矩阵奇异值分解

A为m*n矩阵,rank(A)=r,可以分解为A=UDV',其中U'U=V'V=I
在R中可以用函数svd()进行奇异值分解

#矩阵奇异值分解
#A为m*n矩阵,rank(A)=r,可以分解为A=UDV',其中U'U=V'V=I
#在R中可以用函数svd()进行奇异值分解
A=matrix(1:18,3,6)
A
A.s=svd(A)
A.s
A.s$u%*%diag(A.s$d)%*%t(A.s$v)

11.矩阵QR分解

A为m*n矩阵时可以进行QR分解,A=QR
其中Q'Q=I,在R中可以用函数qr()进行QR分解

#矩阵QR分解
#A为m*n矩阵时可以进行QR分解,A=QR
#其中Q'Q=I,在R中可以用函数qr()进行QR分解
A=matrix(1:16,4,4)
qr(A)

12.矩阵kronecker积

n*m矩阵A与h*k矩阵B的kronecker积为一个nh*mk维矩阵
在R中,kronecker积可以用函数kronecker()来计算

#矩阵kronecker积
#n*m矩阵A与h*k矩阵B的kronecker积为一个nh*mk维矩阵
#在R中,kronecker积可以用函数kronecker()来计算
A=matrix(1:4,2,2)
A
B=matrix(rep(1,4),2,2)
B
kronecker(A,B)

13.矩阵的维数

函数dim()将返回一个矩阵的维数
nrow()返回行数,ncol()返回列数

#矩阵的维数
#函数dim()将返回一个矩阵的维数
#nrow()返回行数,ncol()返回列数
A=matrix(1:12,3,4)
A
dim(A)
nrow(A)
ncol(A)

14.矩阵的行和、列和、行平均数与列平均

#矩阵的行和、列和、行平均数与列平均
rowSums(A)
rowMeans(A)
colSums(A)
colMeans(A)
#还可以用apply()函数实现:apply(X,MARGIN,FUN,......)
#x为矩阵,MARGIN指定对行还是对列操作,1表示行运算,2为对列运算
#FUN用来指定运算函数,“...”用来指定FUN中需要的其他参数
apply(A,1,sum)
apply(A,1,mean)
apply(A,2,sum)
apply(A,2,mean)A=matrix(rnorm(100),20,5)
apply(A,2,var)#计算每一列的方差
apply(A,2,function(x,a)x*a,a=2)

相关文章:

  • Flink CDC 3.0 Starrocks建表失败会导致任务卡主!
  • 吸猫毛空气净化器哪个好?推荐除猫毛效果好宠物空气净化器品牌
  • paper-ai :搜索真实文献并生成引用真实文献的AI论文
  • 华为 OD 一面算法原题
  • android TextView 实现富文本显示
  • golang gin单独部署vue3.0前后端分离应用
  • SpringCloud-同步异步通讯比较
  • 高效使用ELK 处理 SpringBoot 日志
  • Spring-Cloud-Gateway集成Sentinel限流
  • 2024全国水科技大会暨高氨氮废水厌氧氨氧化处理技术论坛(四)
  • 【C++从0到王者】第四十八站:最短路径
  • 论文设计任务书学习文档|基于Vue.js的库存管理系统的设计与实现
  • Spark Shuffle Tracking 原理分析
  • 【前端面试题1】伪类与伪元素有什么区别
  • 【c语言】内存函数
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • CentOS 7 修改主机名
  • centos安装java运行环境jdk+tomcat
  • express + mock 让前后台并行开发
  • HTTP 简介
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • MD5加密原理解析及OC版原理实现
  • PAT A1017 优先队列
  • Python3爬取英雄联盟英雄皮肤大图
  • supervisor 永不挂掉的进程 安装以及使用
  • ViewService——一种保证客户端与服务端同步的方法
  • 聊聊flink的BlobWriter
  • 聊聊flink的TableFactory
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 使用权重正则化较少模型过拟合
  • 世界上最简单的无等待算法(getAndIncrement)
  • 手机端车牌号码键盘的vue组件
  • 用 Swift 编写面向协议的视图
  • 通过调用文摘列表API获取文摘
  • #includecmath
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (五)关系数据库标准语言SQL
  • (小白学Java)Java简介和基本配置
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)编辑寄语:因为爱心,所以美丽
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • ./和../以及/和~之间的区别
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET Standard 的管理策略
  • .NET 使用配置文件
  • .net6 webapi log4net完整配置使用流程
  • .NET学习全景图
  • @PreAuthorize注解
  • [20171113]修改表结构删除列相关问题4.txt
  • [android] 切换界面的通用处理
  • [Asp.net mvc]国际化
  • [BZOJ3757] 苹果树