Author:龙箬
Data Science and Big Data Technology
Change the world with data!
CSDN@weixin_43975035
没有可怕的深度,就没有美丽的水面。——尼采
多元数据的数学表达及R使用
数据矩阵及R语言表示
创建一个向量(随机变量、一维数组)
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()
length(x1)
length(x2)
创建一个矩阵(二维数组)
(1)合并命令
rbind(x1,x2) # 按行合并
运行结果如下:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
x1 171 175 159 155 152 158 154 164 168 166 159 164
x2 57 64 41 38 35 44 41 51 57 49 47 46
cbind(x1,x2) # 按列合并
运行结果如下:
x1 x2
[1,] 171 57
[2,] 175 64
[3,] 159 41
[4,] 155 38
[5,] 152 35
[6,] 158 44
[7,] 154 41
[8,] 164 51
[9,] 168 57
[10,] 166 49
[11,] 159 47
[12,] 164 46
(2)生成矩阵
matrix(x1,nrow = 3,ncol = 4) # 利用x1数据创建矩阵
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 171 155 154 166
[2,] 175 152 164 159
[3,] 159 158 168 164
matrix(x1,nrow = 4,ncol = 3) #创建行数列数发生变化的矩阵
运行结果如下:
[,1] [,2] [,3]
[1,] 171 152 168
[2,] 175 158 166
[3,] 159 154 159
[4,] 155 164 164
matrix(x1,nrow = 4,ncol = 3,byrow = T) # 创建按照行排列的矩阵
运行结果如下:
[,1] [,2] [,3]
[1,] 171 175 159
[2,] 155 152 158
[3,] 154 164 168
[4,] 166 159 164
矩阵转置
A=matrix(1:12,nrow=3,ncol=4) #创建矩阵
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
t(A) # 求矩阵转置
运行结果如下:
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
矩阵相加减
A=B=matrix(1:12,nrow=3,ncol=4) #创建两个相同的矩阵
A+B
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 2 8 14 20
[2,] 4 10 16 22
[3,] 6 12 18 24
A-B
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
矩阵相乘
> A=matrix(1:12,nrow=3,ncol=4)
> B=matrix(1:12,nrow=4,ncol=3)
> A%*%B #求矩阵的乘法
运行结果如下:
[,1] [,2] [,3]
[1,] 70 158 246
[2,] 80 184 288
[3,] 90 210 330
矩阵对角元素相关运算
> A=matrix(1:16,nrow=4,ncol=4)
> diag(A) # 获得矩阵对角元素
运行结果如下:
[1] 1 6 11 16
> diag(diag(A)) # 利用对角元素创建对角矩阵
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 6 0 0
[3,] 0 0 11 0
[4,] 0 0 0 16
diag(3) # 创建3阶单位矩阵
运行结果如下:
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
矩阵求逆
> A=matrix(rnorm(16),4,4)
> A
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 1.3229247 -0.04830517 0.4619649 -1.0327892
[2,] -0.5160307 -2.13080597 0.3100382 1.3273853
[3,] 0.1255166 -0.64111910 -1.1490769 -0.7886591
[4,] -0.3101173 0.32906424 0.1032359 1.6765040
> solve(A) # 求矩阵的逆
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 0.88438156 -0.02762097 0.4166163 0.7626654
[2,] -0.09748522 -0.39820209 -0.1291618 0.1944650
[3,] 0.02671088 0.17647834 -0.8593010 -0.5275046
[4,] 0.18108125 0.06218263 0.1553311 0.7318692
矩阵的特征值与特征向量
> A=diag(4)+1
> A
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 2 1 1 1
[2,] 1 2 1 1
[3,] 1 1 2 1
[4,] 1 1 1 2
> A.e=eigen(A,symmetric = T) # 求矩阵的特征值与特征向量
> A.e
运行结果如下:
eigen() decomposition
$values
[1] 5 1 1 1
$vectors
[,1] [,2] [,3] [,4]
[1,] -0.5 0.8660254 0.0000000 0.0000000
[2,] -0.5 -0.2886751 -0.5773503 -0.5773503
[3,] -0.5 -0.2886751 -0.2113249 0.7886751
[4,] -0.5 -0.2886751 0.7886751 -0.2113249
> A.e$vectors%*%diag(A.e$values)%*%t(A.e$vectors) #特征向量矩阵U和特征值矩阵D与原矩阵A的关系A=UDU'
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 2 1 1 1
[2,] 1 2 1 1
[3,] 1 1 2 1
[4,] 1 1 1 2
矩阵的Choleskey分解
> A.e=chol(A) #矩阵的Choleskey分解
> A.e
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 1.414214 0.7071068 0.7071068 0.7071068
[2,] 0.000000 1.2247449 0.4082483 0.4082483
[3,] 0.000000 0.0000000 1.1547005 0.2886751
[4,] 0.000000 0.0000000 0.0000000 1.1180340
> t(A.e)%*%A.e #Choleskey分解矩阵V和原矩阵A.e的关系A.e=V'V
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 2 1 1 1
[2,] 1 2 1 1
[3,] 1 1 2 1
[4,] 1 1 1 2
矩阵的奇异值分解
> A=matrix(1:18,3,6)
> A.s=svd(A) # 矩阵的奇异值分解
> A.s
运行结果如下:
$d
[1] 4.589453e+01 1.640705e+00 1.366522e-15
$u
[,1] [,2] [,3]
[1,] -0.5290354 0.74394551 0.4082483
[2,] -0.5760715 0.03840487 -0.8164966
[3,] -0.6231077 -0.66713577 0.4082483
$v
[,1] [,2] [,3]
[1,] -0.07736219 -0.71960032 -0.4076688
[2,] -0.19033085 -0.50893247 0.5745647
[3,] -0.30329950 -0.29826463 -0.0280114
[4,] -0.41626816 -0.08759679 0.2226621
[5,] -0.52923682 0.12307105 -0.6212052
[6,] -0.64220548 0.33373889 0.2596585
矩阵的维数
> A=matrix(1:12,3,4)
> dim(A) #矩阵的维数
> nrow(A) # 矩阵的行数
> ncol(A) # 矩阵的列数
矩阵的行和、列和、行平均与列平均
> rowSums(A) #矩阵按行求和
> colMeans(A) # 矩阵按列求均值
> colSums(A) #矩阵按列求和
> rowMeans(A) #矩阵按行求均值
> apply(A,1,sum) #矩阵按行求和
> apply(A,2,mean)# 矩阵按列求均值
> apply(A,2,sum) #矩阵按列求和
> apply(A,1,mean) #矩阵按行求均值
> A=matrix(rnorm(100),20,5)
> apply(A,2,var) # 矩阵按列求方差
运行结果如下:
[1] 1.3000371 0.8282086 1.1217169 1.2222226 0.3465753
> B=matrix(1:12,3,4)
> apply(B,2,function(x,a)x*a,a=2) #矩阵按列求函数结果
运行结果如下:
[,1] [,2] [,3] [,4]
[1,] 2 8 14 20
[2,] 4 10 16 22
[3,] 6 12 18 24
数据的R语言表示——数据框
> X=data.frame(x1,x2) # 产生由x1和x2构建的数据框
> X
运行结果如下:
x1 x2
1 171 57
2 175 64
3 159 41
4 155 38
5 152 35
6 158 44
7 154 41
8 164 51
9 168 57
10 166 49
11 159 47
12 164 46
> X=data.frame('身高'=x1,'体重'=x2) # 赋予数据框新的列标签
> X
运行结果如下:
身高 体重
1 171 57
2 175 64
3 159 41
4 155 38
5 152 35
6 158 44
7 154 41
8 164 51
9 168 57
10 166 49
11 159 47
12 164 46
多元数据的R语言调用
> X=read.table("C:/Users/lenovo/Desktop/R语言/textdata.txt") # 读取名为textdata.txt文档
> X
V1 V2
1 x1 x2
2 171 57
3 175 64
4 159 41
5 155 38
6 152 35
7 158 44
8 154 41
9 164 51
10 168 57
11 166 49
12 159 47
13 164 46
> X=read.table("C:/Users/lenovo/Desktop/R语言/textdata.txt",header=T) # 读取具有列标签的名为textdata的txt文档
> X
x1 x2
1 171 57
2 175 64
3 159 41
4 155 38
5 152 35
6 158 44
7 154 41
8 164 51
9 168 57
10 166 49
11 159 47
12 164 46
> X=read.csv("C:/Users/lenovo/Desktop/R语言/textdata.csv")
> X
多元数据的简单R语言分析
定量变量的分析
hist(x1) # 身高直方图
plot(x1,x2)
定性变量的分析
(1)单因素分析
> d2.1=read.table("clipboard",header = T) # 将剪切板数据读入数据框d2.1中
> head(d2.1) # 显示前6组数据
运行结果如下:
年龄 性别 风险 专兼职 职业 教育 结果
1 20-29 男 有 兼职 金融 高中 赚钱
2 50-59 女 有 兼职 科教 中学 持平
3 40-49 女 无 专职 科教 中学 赔钱
4 30-39 男 有 0 工人 中专 赚钱
5 50-59 女 有 专职 农民 大专 赚钱
6 40-49 女 有 兼职 管理 小学 赚钱
> attach(d2.1) #绑定数据
> table(年龄)# 一维列联表
运行结果如下:
年龄
* 0-19 20-29 30-39 40-49 50-59 60-
20 3 92 167 157 51 24
> barplot(table(年龄),col=1:7) # 条形图
> pie(table(结果)) #饼图
(2)两因素分析
table(年龄,性别) # 二维列联表
运行结果如下:
性别
年龄 男 女
* 9 11
0-19 2 1
20-29 69 23
30-39 101 66
40-49 89 68
50-59 24 27
60- 15 9
> barplot(table(年龄,性别),beside=T,col=1:7) # 以性别分组的年龄条图
> barplot(table(性别,年龄),beside=T,col=1:2) # 以年龄分组的年龄条图
(3)三因素分析
ftable(年龄,性别,结果) # 以年龄、性别排列的结果频数三维列联表
运行结果如下:
结果 持平 赔钱 赚钱
年龄 性别
* 男 4 3 2
女 3 7 1
0-19 男 0 0 2
女 1 0 0
20-29 男 21 17 31
女 10 7 6
30-39 男 31 30 40
女 30 20 16
40-49 男 31 30 28
女 25 30 13
50-59 男 5 11 8
女 8 10 9
60- 男 7 5 3
女 2 5 2
> ftable(性别,年龄,结果) # 以性别、年龄排列的结果频数三维列联表
运行结果如下:
结果 持平 赔钱 赚钱
性别 年龄
男 * 4 3 2
0-19 0 0 2
20-29 21 17 31
30-39 31 30 40
40-49 31 30 28
50-59 5 11 8
60- 7 5 3
女 * 3 7 1
0-19 1 0 0
20-29 10 7 6
30-39 30 20 16
40-49 25 30 13
50-59 8 10 9
60- 2 5 2
> ft=ftable(性别,结果,年龄) # 以性别、结果排列的结果频数三维列联表
> ft
运行结果如下:
年龄 * 0-19 20-29 30-39 40-49 50-59 60-
性别 结果
男 持平 4 0 21 31 31 5 7
赔钱 3 0 17 30 30 11 5
赚钱 2 2 31 40 28 8 3
女 持平 3 1 10 30 25 8 2
赔钱 7 0 7 20 30 10 5
赚钱 1 0 6 16 13 9 2
> rowSums(ft)
[1] 99 96 114 79 79 47
> colSums(ft)
[1] 20 3 92 167 157 51 24
> sum(ft)
[1] 514
参考致谢:
王斌会.多元统计分析及R语言建模(第四版)
如有侵权,请联系侵删
需要本实验源数据及代码的小伙伴请联系QQ:2225872659