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.4Standard deviation     1.8817805 0.55980636 0.28179594 0.25711844Proportion of Variance 0.8852745 0.07834579 0.01985224 0.01652747Cumulative Proportion  0.8852745 0.96362029 0.98347253 1.00000000

Loadings:   Comp.1 Comp.2 Comp.3 Comp.4X1 -0.497  0.543 -0.450  0.506X2 -0.515 -0.210 -0.462 -0.691X3 -0.481 -0.725  0.175  0.461X4 -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)

时间: 2024-10-22 14:32:12

R与数据分析旧笔记(十七) 主成分分析的相关文章

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

因子分析 因子分析 降维的一种方法,是主成分分析的推广和发展 是用于分析隐藏在表面现象背后的因子作用的统计模型.试图用最少的个数的不可测的公共因子的线性函数与特殊因子之和来描述原来观测的每一分量 因子分析的主要用途 减少分析变量的个数 通过对变量间相关关系的探测,将原始变量分组,即将相关性高的变量分为一组,用共性因子来代替该变量 使问题背后的业务因素的意义更加清晰呈现 与主成分分析的区别 主成分分析侧重"变异量",通过转换原始变量为新的组合变量使到数据的"变异量"最

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

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

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

基于有代表性的点的技术:K中心聚类法 基于有代表性的点的技术:K中心聚类法 算法步骤 随机选择k个点作为"中心点" 计算剩余的点到这个k中心点的距离,每个点被分配到最近的中心点组成聚簇 随机选择一个非中心点,用它代替某个现有的中心点,计算这个代换的总代价S 如果S<0,则用代替,形成新的k个中心点集合 重复2,直至中心点集合不发生变化 K中心法的实现:PAM PAM使用离差平方和来计算成本S(类似于ward距离的计算) R语言的cluster包实现了PAM K中心法的优点:对于&

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

连线图 > a=c(2,3,4,5,6) > b=c(4,7,8,9,12) > plot(a,b,type="l") 多条曲线效果 plot(rain$Tokyo,type="l",col="red",ylim=c(0,300), main="Monthly Rainfall in major cities", xlab="Month of Year", ylab="Rainf

R与数据分析旧笔记(十二)分类

分类:分类的意义 分类:分类的意义 传统意义下的分类:生物物种 预测:天气预报 决策:yes or no 分类的传统模型 分类(判别分析)与聚类有什么差别 ? 常见分类模型与算法 线性判别法 距离判别法 叶贝斯分类器 决策树 支持向量机(SVM) 神经网络 线性判别法(Fisher) 例子:天气预报数据 > G=rep(c(1,2),c(10,10))> G [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2> x1=c(-1.9,-6.9,5.2,5

R与数据分析旧笔记(十二)分类 (支持向量机)

支持向量机(SVM) 支持向量机(SVM) 问题的提出:最优分离平面(决策边界) 优化目标 决策边界边缘距离最远 数学模型 问题转化为凸优化 拉格朗日乘子法--未知数太多 KKT变换和对偶公式 问题的解决和神经网络化 对偶公式是二次规划问题,有现成的数值方法可以求解 大部分的拉格朗日乘子为0,不为0的对应于"支持向量"(恰好在边界上的样本点) 只要支持向量不变,修改其他样本点的值,不影响结果,当支持变量发生改变时,结果一般就会变化 求解出拉格朗日乘子后,可以推出w和b,判别函数可以写成

R与数据分析旧笔记(四)画地图练习

> library(maps) > library(geosphere) 载入需要的程辑包:sp > map("state")#画美国地图 > map("world")#画世界地图 > xlim<-c(-171.738281,-56.601563) > ylim<-c(12.039321,71.856229) > map("world",col="#f2f2f2",fill

R与数据分析旧笔记(十四) 动态聚类:K-means

动态聚类:K-means方法 动态聚类:K-means方法 算法 选择K个点作为初始质心 将每个点指派到最近的质心,形成K个簇(聚类) 重新计算每个簇的质心 重复2-3直至质心不发生变化 kmeans()函数 > X=iris[,1:4]> km=kmeans(X,3)> kmK-means clustering with 3 clusters of sizes 62, 50, 38 Cluster means: Sepal.Length Sepal.Width Petal.Length

《R实战》读书笔记二

第一章 R简介 本章概要 1安装R 2理解R语言 3运行R程序 本章所介绍的内容概括如下. 一个典型的数据分析步骤如图1所示. 图1:典型数据分析步骤 简而言之,现今的数据分析要求我们从多种数据源中获取数据.数据合并.标注.清洗和分析,并且把分析的结果进行展示,形成报告或者系统,辅助决策.R能够满足现今数据分析的要求. 为什么用R? R是一个适合统计分析和绘图的环境与语言.它是开源.免费的,获得世界范围社区支持.统计分析和绘图工具已经很多了,例如:SPSS,SAS,Excel,Stata和Min