主成分分析

主成分分析

  • 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与数据分析旧笔记(十七) 主成分分析的更多相关文章

  1. R与数据分析旧笔记(十八完结) 因子分析

    因子分析 因子分析 降维的一种方法,是主成分分析的推广和发展 是用于分析隐藏在表面现象背后的因子作用的统计模型.试图用最少的个数的不可测的公共因子的线性函数与特殊因子之和来描述原来观测的每一分量 因子 ...

  2. R与数据分析旧笔记(五)数学分析基本

    R语言的各种分布函数 rnorm(n,mean=0,sd=1)#高斯(正态) rexp(n,rate=1)#指数 rgamma(n,shape,scale=1)#γ分布 rpois(n,lambda) ...

  3. R与数据分析旧笔记(三)不知道取什么题目

    连线图 > a=c(2,3,4,5,6) > b=c(4,7,8,9,12) > plot(a,b,type="l") 多条曲线效果 plot(rain$Toky ...

  4. R与数据分析旧笔记(一)基本数学函数的使用

    创建向量矩阵 > x1=c(2,3,6,8) > x2=c(1,2,3,4) > a1=(1:100) > length(a1) [1] 100 > length(x1) ...

  5. R与数据分析旧笔记(十六) 基于密度的方法:DBSCAN

    基于密度的方法:DBSCAN 基于密度的方法:DBSCAN DBSCAN=Density-Based Spatial Clustering of Applications with Noise 本算法 ...

  6. R与数据分析旧笔记(十五) 基于有代表性的点的技术:K中心聚类法

    基于有代表性的点的技术:K中心聚类法 基于有代表性的点的技术:K中心聚类法 算法步骤 随机选择k个点作为"中心点" 计算剩余的点到这个k中心点的距离,每个点被分配到最近的中心点组成 ...

  7. R与数据分析旧笔记(十三) 聚类初步

    聚类 聚类 关键度量指标:距离 常用距离 绝对值距离 绝对值距离也称为"棋盘距离"或"城市街区距离". 欧氏(Euclide)距离 闵可夫斯基(Minkowsk ...

  8. R与数据分析旧笔记(十一)数据挖掘初步

    PART 1 PART 1 传统回归模型的困难 1.为什么一定是线性的?或某种非线性模型? 2.过分依赖于分析者的经验 3.对于非连续的离散数据难以处理 网格方法 <Science>上的文 ...

  9. R与数据分析旧笔记(⑨)广义线性回归模型

    广义线性回归模型 广义线性回归模型 例题1 R.Norell实验 为研究高压电线对牲畜的影响,R.Norell研究小的电流对农场动物的影响.他在实验中,选择了7头,6种电击强度, 0,1,2,3,4, ...

随机推荐

  1. VS2010在C盘下生成的.iTrace文件解决办法 ,c盘偷偷的减少,心很烦啊,找了半天才知道是这个问题

    用Visual Studio 2010后发现我的c盘变得越来越小了,刚开始通过优化工具清理c盘,但是无论怎么做都不能将c的内存有效提升,之后一个一个目录的查找之后才知道有个文件夹C:\ProgramD ...

  2. 给自己保存份CSS初始值样式

    @charset "utf-8";body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,text ...

  3. LocalStorage存储

     1.localStorage存储服务: .factory('storageSvc', [function () { return { //保存数据 save: function (key, valu ...

  4. 获取iOS设备属性

    通过使用UIDevice: [[UIDevice currentDevice] systemName]; [[UIDevice currentDevice] systemVersion];//os v ...

  5. php 接收curl json 数据

    curl -H "Content-Type: application/json" http://127.0.0.1:8000 -X POST -d 'xxxx' php $strP ...

  6. MAC上使用maven打android的包,报错:No Android SDK path could be found. 解决办法

    对android工程运行mvn compile出现如下信息: No Android SDK path could be found. You may configure it in the pom u ...

  7. jquery插件anccordion

    (function(){ $.fn.YAccordion=function(options){ var settings={ trigger:'click', speed:300, }; if(opt ...

  8. hdu 4635 Strongly connected 强连通

    题目链接 给一个有向图, 问你最多可以加多少条边, 使得加完边后的图不是一个强连通图. 只做过加多少条边变成强连通的, 一下子就懵逼了 我们可以反过来想. 最后的图不是强连通, 那么我们一定可以将它分 ...

  9. odi增量更新策略

    增量更新策略:通过一个“update key”比较流数据记录与目标表中的记录比较进行数据整合.具有相同“update key”的记录当相关联列不同时将被更新:在目标表中不存在的记录将被插入.这种方式用 ...

  10. Oracle EBS-SQL (SYS-21):sys_用户名与人员对应关系查询.sql

    select fu.user_name 用户名,         fu.description 描述,              (select ppf.FULL_NAME              ...