R与数据分析旧笔记(十七) 主成分分析
主成分分析
主成分分析
- Pearson于1901年提出的,再由Hotelling(1933)加以发展的一种多变量统计方法
- 通过析取主成分显出最大的个别差异,也用来削减回归分析和聚类分析中变量的数目
- 可以使用样本协方差矩阵或相关系数矩阵作为出发点进行分析
- 成分的保留:Kaiser主张(1960)将特征值小于1的成分放弃,只保留特征值大于1的成分
- 如果能用不超过3-5个成分就能解释变异的80%,就算是成功
- 通过对原是变量进行线性组合,得到优化的指标
- 把原先多个指标的计算降维为少量几个经过优化指标的计算(占去绝大部分份额)
- 基本思想:设法将原先众多具有一定相关性的指标,重新组合为一组新的互相独立的综合指标,并代替原先的指标
主成分分析的直观几何意义
简单例子
> 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)
> plot(x1,x2,xlim=c(145,180),ylim=c(25,75))
> lines(c(150,178),c(33,66));text(180,68,"y1")
> lines(c(161,168),c(60,38));text(161,63,"y2")
相关的R函数
princomp()
princomp(formula,data=NULL,subset,na.actioon,….)
其中formula是没有响应变量的公式(类似回归分析、方差分析,但无响应变量)
data是数据框(类似于回归分析、方差分析)
summary()
summary(object,loadings=FALSE,cutoff=0.1,…)
其中object是由princomp()得到的对象。loadings是逻辑变量,当loadings=TRUE表示显示loadings的内容,loadings=FALSE则不显示。
loadings()
loadings()函数是显示主成分分析或因子分析中loadings(载荷)的内容。在主成分分析中,该内容实际上是主成分对应的各列。在因子分析中,其内容就是载荷因子矩阵。
loadings(x)
其中x是由函数princomp()或factanal()得到的对象。
predict()
predict()函数是预测主成分的值。
predict(object,newdata,…)
其中object是由princomp()得到的对象。newdata是由预测值构成的数据框,当newdata缺省时,预测已有数据的主成分值。
screeplot()
screeplot()函数是画出主成分的碎石图。
screeplot(x,npcs=min(10,length(x$sdev)),type=c(“barplot”,”lines”),main=deparse(substitute(x)),…)
其中x是由princomp()得到的对象。npcs是画出主成分的个数。type是描述画出来的碎石图的类型。”barplot”是直方图类型,”lines”是直线图类型 。
biplot()
biplot()是画出数据关于主成分的散点图和原坐标在主成分下的方向。
biplot(x,choices=1:2,scale=1,pc.biplot=FALSE,…)
其中x是由princomp()得到的对象,choices是选择的主成分,缺省值是第1、第2主成分。pc.biplot是逻辑变量(缺省值是FALSE),当pc.biplot=TRUE,用Gabriel(1971)提出的画图方法。
实例
(中学生身体四项指标的主成分分析)
在某中学随机抽取某年级30名学生,测量其身高()、体重(
)、胸围(
)和坐高(
),数据如表。试对这30名中学生身体四项指标数据作主成分分析。
序号 | ||||
---|---|---|---|---|
1 | 148 | 41 | 72 | 78 |
2 | 139 | 34 | 71 | 76 |
3 | 160 | 49 | 77 | 86 |
4 | 149 | 36 | 67 | 79 |
5 | 159 | 45 | 80 | 86 |
6 | 142 | 31 | 66 | 76 |
7 | 153 | 43 | 76 | 83 |
8 | 150 | 43 | 77 | 79 |
9 | 151 | 42 | 77 | 80 |
10 | 139 | 31 | 68 | 74 |
11 | 140 | 29 | 64 | 74 |
12 | 161 | 47 | 78 | 84 |
13 | 158 | 49 | 78 | 83 |
14 | 140 | 33 | 67 | 77 |
15 | 137 | 31 | 66 | 73 |
16 | 152 | 35 | 73 | 79 |
17 | 149 | 47 | 82 | 79 |
18 | 145 | 35 | 70 | 77 |
19 | 160 | 47 | 74 | 87 |
20 | 156 | 44 | 78 | 85 |
21 | 151 | 42 | 73 | 82 |
22 | 147 | 38 | 73 | 78 |
23 | 157 | 39 | 68 | 80 |
24 | 147 | 30 | 65 | 75 |
25 | 157 | 48 | 80 | 88 |
26 | 151 | 36 | 74 | 80 |
27 | 144 | 36 | 68 | 76 |
28 | 141 | 30 | 67 | 76 |
29 | 139 | 32 | 68 | 73 |
30 | 148 | 38 | 70 | 78 |
* 解:*
> student<-data.frame(
+ X1=c(148, 139, 160, 149, 159, 142, 153, 150, 151, 139,
+ 140, 161, 158, 140, 137, 152, 149, 145, 160, 156,
+ 151, 147, 157, 147, 157, 151, 144, 141, 139, 148),
+ X2=c(41, 34, 49, 36, 45, 31, 43, 43, 42, 31,
+ 29, 47, 49, 33, 31, 35, 47, 35, 47, 44,
+ 42, 38, 39, 30, 48, 36, 36, 30, 32, 38),
+ X3=c(72, 71, 77, 67, 80, 66, 76, 77, 77, 68,
+ 64, 78, 78, 67, 66, 73, 82, 70, 74, 78,
+ 73, 73, 68, 65, 80, 74, 68, 67, 68, 70),
+ X4=c(78, 76, 86, 79, 86, 76, 83, 79, 80, 74,
+ 74, 84, 83, 77, 73, 79, 79, 77, 87, 85,
+ 82,78,80,75,88,80,76,76,73,78)
+ )
> student.pr<-princomp(student,cor=T)
> summary(student.pr,loadings=T)
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4
Standard deviation 1.8817805 0.55980636 0.28179594 0.25711844
Proportion of Variance 0.8852745 0.07834579 0.01985224 0.01652747
Cumulative Proportion 0.8852745 0.96362029 0.98347253 1.00000000
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
X1 -0.497 0.543 -0.450 0.506
X2 -0.515 -0.210 -0.462 -0.691
X3 -0.481 -0.725 0.175 0.461
X4 -0.507 0.368 0.744 -0.232
student.pr<-princomp(student,cor=T)
可以改成student.pr<-princomp(~X1+X2+X3+X4,data=student,cor=T)
。
summary()函数列出主成分分析的重要信息,Standard deviation行表示的是主成分的标准差,即主成分的方差的开方。Proportion of Variance行表示的是方差的贡献率,Cumulative Proportion行表示的是方方差的累积贡献率。
由于在summary函数的参数中选取了loadings=T,因此列出了loadings(载荷)的内容,因此得到:
由于前两个主成分的累积贡献率已达到96%,另外两个主成分可以舍去,达到降维的目的。
第1主成分对应系数的符号都相同,其值在0.5左右,它反映了中学生身材的魁梧(?)程度:身体高大的学生,他的4个部分的尺寸都比较大,因此,第1主成分的值就较小(因为系数均为负值);而身材矮小的学生,他的4部分的尺寸都比较小,因此,第1主成分绝对值就较大。我们称第1主成分为大小因子。第2主成分是高度与围度的差,第2主成分值大的学生表明该学生“细高”,而第2主成分值越小的学生表明该学生“矮胖”,因此,称第2主成分为体形因子。
> predict(student.pr)
Comp.1 Comp.2 Comp.3 Comp.4
[1,] 0.06990950 -0.23813701 -0.35509248 -0.266120139
[2,] 1.59526340 -0.71847399 0.32813232 -0.118056646
[3,] -2.84793151 0.38956679 -0.09731731 -0.279482487
[4,] 0.75996988 0.80604335 -0.04945722 -0.162949298
[5,] -2.73966777 0.01718087 0.36012615 0.358653044
[6,] 2.10583168 0.32284393 0.18600422 -0.036456084
[7,] -1.42105591 -0.06053165 0.21093321 -0.044223092
[8,] -0.82583977 -0.78102576 -0.27557798 0.057288572
[9,] -0.93464402 -0.58469242 -0.08814136 0.181037746
[10,] 2.36463820 -0.36532199 0.08840476 0.045520127
[11,] 2.83741916 0.34875841 0.03310423 -0.031146930
[12,] -2.60851224 0.21278728 -0.33398037 0.210157574
[13,] -2.44253342 -0.16769496 -0.46918095 -0.162987830
[14,] 1.86630669 0.05021384 0.37720280 -0.358821916
[15,] 2.81347421 -0.31790107 -0.03291329 -0.222035112
[16,] 0.06392983 0.20718448 0.04334340 0.703533624
[17,] -1.55561022 -1.70439674 -0.33126406 0.007551879
[18,] 1.07392251 -0.06763418 0.02283648 0.048606680
[19,] -2.52174212 0.97274301 0.12164633 -0.390667991
[20,] -2.14072377 0.02217881 0.37410972 0.129548960
[21,] -0.79624422 0.16307887 0.12781270 -0.294140762
[22,] 0.28708321 -0.35744666 -0.03962116 0.080991989
[23,] -0.25151075 1.25555188 -0.55617325 0.109068939
[24,] 2.05706032 0.78894494 -0.26552109 0.388088643
[25,] -3.08596855 -0.05775318 0.62110421 -0.218939612
[26,] -0.16367555 0.04317932 0.24481850 0.560248997
[27,] 1.37265053 0.02220972 -0.23378320 -0.257399715
[28,] 2.16097778 0.13733233 0.35589739 0.093123683
[29,] 2.40434827 -0.48613137 -0.16154441 -0.007914021
[30,] 0.50287468 0.14734317 -0.20590831 -0.122078819
从第1主成分来看,较小的几个值是25号样本、3号样本和5号样本,因此说明这几个学生身材魁梧;而11号样本、15号样本和29号样本的值较大,说明这几个学生身材瘦小。
从第2主成分来看,较大的几个值是23号样本、19号样本和4号样本,因此说明这几个学生属于“细高”型;而17号样本、8号样本和2号样本的值较小,说明这几个学生身材属于“矮胖”型。
画出主成分的碎石图:
> screeplot(student.pr,type="lines")
画出散点图:
> biplot(student.pr,choices=1:2,scale=1,pc.biplot=F)
R与数据分析旧笔记(十七) 主成分分析的更多相关文章
- R与数据分析旧笔记(十八完结) 因子分析
因子分析 因子分析 降维的一种方法,是主成分分析的推广和发展 是用于分析隐藏在表面现象背后的因子作用的统计模型.试图用最少的个数的不可测的公共因子的线性函数与特殊因子之和来描述原来观测的每一分量 因子 ...
- R与数据分析旧笔记(五)数学分析基本
R语言的各种分布函数 rnorm(n,mean=0,sd=1)#高斯(正态) rexp(n,rate=1)#指数 rgamma(n,shape,scale=1)#γ分布 rpois(n,lambda) ...
- R与数据分析旧笔记(三)不知道取什么题目
连线图 > a=c(2,3,4,5,6) > b=c(4,7,8,9,12) > plot(a,b,type="l") 多条曲线效果 plot(rain$Toky ...
- R与数据分析旧笔记(一)基本数学函数的使用
创建向量矩阵 > x1=c(2,3,6,8) > x2=c(1,2,3,4) > a1=(1:100) > length(a1) [1] 100 > length(x1) ...
- R与数据分析旧笔记(十六) 基于密度的方法:DBSCAN
基于密度的方法:DBSCAN 基于密度的方法:DBSCAN DBSCAN=Density-Based Spatial Clustering of Applications with Noise 本算法 ...
- R与数据分析旧笔记(十五) 基于有代表性的点的技术:K中心聚类法
基于有代表性的点的技术:K中心聚类法 基于有代表性的点的技术:K中心聚类法 算法步骤 随机选择k个点作为"中心点" 计算剩余的点到这个k中心点的距离,每个点被分配到最近的中心点组成 ...
- R与数据分析旧笔记(十三) 聚类初步
聚类 聚类 关键度量指标:距离 常用距离 绝对值距离 绝对值距离也称为"棋盘距离"或"城市街区距离". 欧氏(Euclide)距离 闵可夫斯基(Minkowsk ...
- R与数据分析旧笔记(十一)数据挖掘初步
PART 1 PART 1 传统回归模型的困难 1.为什么一定是线性的?或某种非线性模型? 2.过分依赖于分析者的经验 3.对于非连续的离散数据难以处理 网格方法 <Science>上的文 ...
- R与数据分析旧笔记(⑨)广义线性回归模型
广义线性回归模型 广义线性回归模型 例题1 R.Norell实验 为研究高压电线对牲畜的影响,R.Norell研究小的电流对农场动物的影响.他在实验中,选择了7头,6种电击强度, 0,1,2,3,4, ...
随机推荐
- B/S状态(同步)AJAX技术(异步)
同步(Synchronization).它是最常见的click-refresh状态,或提交一个表单,然后整个页面被刷新. 异步(Asynchrony).当前非常热的AJAX就是典型样例,提交请求返回对 ...
- 设置IE兼容模式
文件兼容性用于定义让IE如何编译你的网页.此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式. 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE ...
- SQL2012尝试读取或写入受保护的内存。这通常指示其他内存已损坏
SQL2012尝试读取或写入受保护的内存.这通常指示其他内存已损坏 今天打开SQL2012,突然就连接不了数据库,一开始还以为是某个服务器崩溃了,结果试了好几个,都还是如此,弹出提示如下: 尝试读取或 ...
- bootstrap-js(六)弹出框
实例 为任意元素添加一小块浮层,用于存放非主要信息. 弹出框的标题和内容的长度都是零的话将永远不会被显示出来. 初始化 由于性能的原因,工具提示和弹出框的 data 编程接口(data api)是必须 ...
- QRMaker生成二维码,支持中文
QRMaker如果想支持中文,可以将中文转为UTF8,然后用InputDateB直接传入Byte() Option Explicit Private Declare Function WideChar ...
- light oj 1027 A Dangerous Maze
一道数学期望题,唉唉,概率论学的不好啊~~ 求走出迷宫的期望时间. 由于有的门会回到起点,所以有可能会走很多遍,设能走出去的门的个数为n1,总的个数为n,那么一次走出去的概率为n1/n,走一次的用的平 ...
- 图的邻接矩阵实现(c)
参考:算法:c语言实现 一书 图的邻接矩阵实现 #ifndef GRAPH #define GRAPH /* 图的邻接矩阵实现 */ #include<stdio.h> #include& ...
- ORACLE同义词总结
ORACLE同义词总结 同义词概念 Oracle的同义词(synonyms) 从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多 ...
- Oracle EBS-SQL (SYS-12):查询各Profile的设置情况.sql
SELECT pro.profile_option_name, pro.user_profile_option_name, lev.level_type TYPE, --lev.level_code, ...
- C#实现邮件发送功能
发送邮件所用的核心知识点 微软封装好的MailMessage类:主要处理发送邮件的内容(如:收发人地址.标题.主体.图片等等) 微软封装好的SmtpClient类:主要处理用smtp方式发送此邮件的配 ...