2.多元数据的数学表达

一、如何收集和整理多元分析资料

【例2.1】为了了解股民的投资状况,研究股民的股票投资特征,我们在2002年组 织统计系本科生进行小范围的“股民投资状况抽样调查”。本次调查的抽样框主要 涉及广东省的6个城市(广州、深圳、珠 海、中山、佛山和东莞,其中,广州、深圳各100份,其他城市各80份),共发放问卷520份,回收有效问卷514份。问卷中设计了18个问题。为了简化分析,本例只 考虑:年龄、性别、风险意识、是否专兼职、职业状况、教育程度和投资结果共7 个变量进行分析。

#本例性别、风险、专兼职、职业、教育和结果 为定性变量,年龄是定量变量,有时为了分析问 题方便,也可将其定量化,例如:

  • 年龄(age):19岁以下(1);20至29岁(2); 30 至39岁(3);40至49岁(4);50至59岁 (5);60岁 及以上(6);缺失(*)。
  • 性别(sex): 男(1),女(2)。
  • 风险(risk):有(1);无(2)。
  • 专兼职(post):专职(1);业余(2)。
  • 职业(career):干部(1);管理(2);3科教(3);金融(4);工人(5);农民(6);个体(7);无业(8)。
  • 教育(edu):文盲(1);小学(2);中学(3);高中(4);中专(5); 大专(6);大学(7);研究生(8)。
  • 投资结果(result):赚钱(1);不赔不赚(2); 赔钱(3)。

二、数据的表达

三、数据矩阵

例子: 测得6名学生的生长发育指标:身高(x1)、体重(x2)的数据,试用R语言表达该数据。 x1 171,175,159,155,152,158 x2 57,64,41,38,35,44

在R中可以用函数c()来创建向量:

x1<- c(171,175,159,155,152,158)
x2<-  c(57,64,41,38,35,44)

在R中结果输入如下:

> x1
[1] 171 175 159 155 152 158
> x2
[1] 57 64 41 38 35 44

将数据按列或行合并:

> cbind(x1,x2)
      x1 x2
[1,] 171 57
[2,] 175 64
[3,] 159 41
[4,] 155 38
[5,] 152 35
[6,] 158 44

> rbind(x1,x2)
   [,1] [,2] [,3] [,4] [,5] [,6]
x1  171  175  159  155  152  158
x2   57   64   41   38   35   44

例如X1数据创建矩阵

> matrix(x1,nrow=2,ncol=3)
     [,1] [,2] [,3]
[1,]  171  159  152
[2,]  175  155  158

> matrix(x1,nrow=2,ncol=3,byrow=T)
     [,1] [,2] [,3]
[1,]  171  175  159
[2,]  155  152  158

创建两个相同的矩阵

> A=B=matrix(1:12,nrow=3,ncol=4)
> A;B
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
     [,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
     [,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

创建3阶单位矩阵

> diag(,3)
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

求逆矩阵

> A=matrix(rnorm(16),4,4)
> solve(A)
           [,1]       [,2]       [,3]       [,4]
[1,]  1.2998253 -0.3175322 -0.1917545 -0.5471261
[2,] -0.2408282  0.2416272  0.8053506  0.3751143
[3,]  0.1446213 -0.9719391  0.3048494  0.2430967
[4,] -1.6550310  0.4938167  0.3151761 -0.2233315

求矩阵特征根与特征向量

> A=diag(4)+1
> A.e=eigen(A,symmetric=T)
> A.e
$values
[1] 5 1 1 1

$vectors
     [,1]          [,2]       [,3]       [,4]
[1,]  0.5  0.000000e+00  0.8660254  0.0000000
[2,]  0.5 -6.993624e-17 -0.2886751  0.8164966
[3,]  0.5 -7.071068e-01 -0.2886751 -0.4082483
[4,]  0.5  7.071068e-01 -0.2886751 -0.4082483

矩阵的Choleskey分解

> A.c=chol(A)
> A.c
         [,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

矩阵奇异值分解

> A=matrix(1:18,3,6)
> A.s = svd(A)
> A.s
$d
[1] 4.589453e+01 1.640705e+00 3.239794e-16

$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.43794775
[2,] -0.19033085 -0.50893247  0.55470939
[3,] -0.30329950 -0.29826463 -0.19567625
[4,] -0.41626816 -0.08759679  0.50574529
[5,] -0.52923682  0.12307105 -0.45356066
[6,] -0.64220548  0.33373889  0.02672998

矩阵的维数

> A=matrix(1:12,3,4)
> dim(A)
[1] 3 4

矩阵的行数

> nrow(A)
[1] 3

矩阵的列数

> ncol(A)
[1] 4

矩阵按行求和

> rowSums(A)
[1] 22 26 30

矩阵按行求均值

> rowMeans(A)
[1] 5.5 6.5 7.5

矩阵按列求和

> colSums(A)
[1]  6 15 24 33

矩阵按列求均值

> colMeans(A)
[1]  2  5  8 11

矩阵按行求和

> apply(A,1,sum)
[1] 22 26 30

矩阵按列求均值

> apply(A,2,mean)
[1]  2  5  8 11

矩阵按列求方差

> A=matrix(rnorm(100),20,5) 
> apply(A,2,var)
[1] 1.2346288 1.1629615 1.1187072 0.5887739 0.7559932

矩阵按列求函数结果

> 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语音表示–数据框

数据框(data frame)是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据。

  1. 分量必须是向量(数值,字符,逻辑),因子,数值矩阵,列表或者其他数据库。
  2. 矩阵、列表和数据框为新的数据框提供了尽可能多的变量,因为他们各自拥有列、元素或变量。
  3. 数值向量、逻辑值、因子保持原有的格式,而字符向量会被强制转换成因子并且它的水平就是向量中出现的独立值。
  4. 在数据框中以变量形式出现的向量长度必须一致,矩阵结构必须有一样的行数。

由x1和x2构建数据框

> X=data.frame(x1,x2)
> X
   x1 x2
1 171 57
2 175 64
3 159 41
4 155 38
5 152 35
6 158 44

赋予数据框新的列标签

> X=data.frame('身高'=x1,'体重'=x2)
> X
  身高 体重
1  171   57
2  175   64
3  159   41
4  155   38
5  152   35
6  158   44

数据的读取

1.从剪切板读取

选择需要进行计算的数据块(比如上例中名为UG的数据),拷贝。在R中使用

dat<-read.table('clipboard',header=T)

2.从文本中读取文件

X=read.table('textdata.txt',header=T)

header作为标题

3.读取CSV格式和excel格式

x =read.csv('textdata.csv')

library(readxl)
X=read_excel(“data.xls”)

简单的图形

身高的直方图

hist(x1)

身高与体重散点图

plot(x1,x2)

将剪切板数据读入数据框d2.1中

d2.1=read.table("clipboard",header=T) 

显示数据前6行

head(d2.1)

绑定数据

attach(d2.1) 

一维列联表

table(年龄)

条形图

barplot(table(年龄),col=1:7)

#以性别分组的年龄条图 
barplot(table(年龄,性别),beside =T, col = 1:7)

#以年龄分组的性别条图 
barplot(table(性别,年龄),beside=T,col =1:2)

饼图

pie(table(结果))

以年龄、性别排列的结果频数三维列联表 ftable(年龄,性别,结果)

求ft的行和

rowSums(ft)

求ft的列和

colSums(ft)

当数据框不使用时,解除绑定!!

detach(d2.1)

参考资料

暨南大学 王斌会老师 《多元统计分析及R语言建模》课件

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn

Sam avatar
About Sam
专注生物信息 专注转化医学