首页 > 代码库 > 主成分分析(PCA)原理及R语言实现

主成分分析(PCA)原理及R语言实现

原理:

主成分分析 - stanford

主成分分析法 - 智库

主成分分析(Principal Component Analysis)原理

主成分分析及R语言案例 - 文库

主成分分析法的原理应用及计算步骤 - 文库

主成分分析之R篇

关于主成分分析的五个问题


多变量统计方法,通过析取主成分显出最大的个别差异,也用来削减回归分析和聚类分析中变量的数目,可以使用样本协方差矩阵或相关系数矩阵作为出发点进行分析。

通过对原始变量进行线性组合,得到优化的指标:把原先多个指标的计算降维为少量几个经过优化指标的计算(占去绝大部分份额)

基本思想:设法将原先众多具有一定相关性的指标,重新组合为一组新的互相独立的综合指标,并代替原先的指标。

小例子:以小学生基本生理属性为案例分享下R语言的具体实现,分别选取身高(x1)、体重(x2)、胸围(x3)和坐高(x4)。具体如下:

> student<- data.frame(  
+     x1=c(148,139,160,149,159,142,153,150,151),  
+     x2=c(41 ,34 , 49 ,36 ,45 ,31 ,43 ,43, 42),  
+     x3=c(72 ,71 , 77 ,67 ,80 ,66 ,76 ,77,77),  
+     x4=c(78 ,76 , 86 ,79 ,86 ,76 ,83 ,79 ,80)  
+ ) 
> student.pr <- princomp(student,cor=TRUE)
> summary(student.pr,loadings=TRUE)
Importance of components:
                         Comp.1     Comp.2     Comp.3      Comp.4
Standard deviation     1.884603 0.57380073 0.30944099 0.152548760
Proportion of Variance 0.887932 0.08231182 0.02393843 0.005817781
Cumulative Proportion  0.887932 0.97024379 0.99418222 1.000000000

Loadings:
   Comp.1 Comp.2 Comp.3 Comp.4
x1 -0.510  0.436 -0.139  0.728
x2 -0.513 -0.172 -0.741 -0.398
x3 -0.473 -0.761  0.396  0.201
x4 -0.504  0.448  0.524 -0.520
> screeplot(student.pr,type="lines")
技术分享

standard deviation:标准差

Proportion of Variance:方差的占比

Cumulative Proportion:累计贡献率

由上图可见四项指标做分析后,给出了4个成分,他们的重要性分别为:0.887932、0.08231182、0.02393843、0.005817781,累积贡献为:0.887932、0.97024379、0.99418222 1.000000000各个成分的碎石图也如上,可见成份1和成份2的累积贡献已经达到95%,因此采用这两个成份便可充分解释学生的基本信息。

可以算出 Z1 和 Z2的公式

> temp<-predict(student.pr) 
> plot(temp[,1:2])

技术分享

参考链接:R语言与数据分析之五:主成分分析(还有很多系列,慢慢看)


主成分分析在生物信息学中的运用:

主成分分析的主要步骤

主成份分析(PCA)在生物芯片样本筛选中的应用及在R语言中的实现

R语言多元分析

利用GCAT做主成分分析(PCA)

基因表达数据分析主成分分析 PCA

主成分分析(PCA)在组学数据质控中的运用

生物信息PCA主成分分析(原创)

RNA-seq高级分析之——主成分分析


RNA-seq中,主成分分析有什么意义?说白了,还是聚类!

主成分分析(Principal Component Analysis,PCA)的目标是用一组较少的不相关的变量代替大量相关变量,同时尽可能保留原始变量的信息,推导所得的变量就成为主成分,是原始变量的线性组合。也就是将N个变量(N维),通过线性组合,降维到K个综合变量(K维,K <N)来归纳性解释某一个现象。

技术分享

先举个简单例子帮助理解吧:

某篮球俱乐部有40名男同学,同学之间各个指标存在或大或小的差异,包括身高、体重、视力、百米速度、肺活量、每天练球时长、睡眠时间等指标。在季度选拔中,40名同学进球得分数(成绩)存在差异,那么这些指标是否均与成绩相关?或者相关性有多大?

此时可能就要用到PCA,分析方法简述如下:

1选择初始变量

比如以上7个指标作为变量(a1 - a7),40名同学作为样本。

2对原始数据矩阵进行标准化,做相关系数矩阵

(1)原始数据矩阵:每行为40名男同学的各项指标值,每列为各项指标在40名同学中的体现;

(2)因为各个指标度量单位不同,取值范围不同,不宜直接由协方差矩阵出发,因此选择相关系数矩阵。

3计算特征值及相应特征向量

4判断主成分的个数

最常见的方式是根据特征值判断,一般选择特征值大于1的变量数作为PC个数,假如,此项分析中特征值大于1的有两个,则最终可以有2个主成分(具体主成分个数可以根据实际研究调整)。

5得到主成分表达式

通过分析得到第一主成分(PC1)和第二主成分(PC2),假设表达式如:(a1*表示a1标准化后的数值)

技术分享

6结合数据的实际意义开展分析

PC1比PC2更能解释样本间差异的原因(如下图中横纵轴的百分比)。PC1的线性组合中a1、a2、a3、a6贡献度较大(前面的系数较大),PC2的线性组合中a5贡献度较大。以PC1为横轴,各个样本根据成绩大小有明显区分,说明以上7个指标中,身高、体重、视力、每天练球时长这4个指标与同学的成绩相关性更强。为了迎合线性组合的概念,应该找个更合适的词语来综合描述身高、体重、视力、每天练球时间这4个指标,以涵盖这4个指标的意义(好吧,可能小编举例不当,或者小编才疏学浅暂时想不出来~)。理解了以上的概念,再将主成分分析用于RNA-seq也很容易理解。

技术分享

 

例如:

某个单细胞RNA-seq项目研究胚胎发育不同时期细胞的基因表达模式,研究这些细胞样本的分期是受哪些基因的调控?

样本可以是受精卵、2细胞胚、4细胞胚、8细胞胚、桑椹胚、囊胚等细胞。

PCA分析中,可以以样本为变量,对基因进行聚类。亦可以以基因为变量,对样本进行聚类,通过PC1便可以发现究竟是哪些基因对细胞分型具有重要意义。

 

额外资料:生物信息概述

主成分分析(PCA)原理及R语言实现