多元数据的数学表达及R使用

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    23    7    1
0-190    0    21    0    0
20-2921   17   3110    7    6
30-3931   30   4030   20   16
40-4931   30   2825   30   13
50-595   11    88   10    9
60-7    5    32    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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值