什么是PCA?
我们简单介绍一下什么是PCA,比如我们常见的芯片数据,每一个样本都可以测出上万个基因的表达量,一个基因就是一个维度,上万个基因有上万个维度,难道只有上万个维度才能区分出不同的样本吗?答案当然是NO,所以我们就要找到那些对于区分不同样本的高贡献度的维度,那我要怎么找呢?答案就是降维,降维最常用的也就是PCA分析了。
PCA如果两组无法完全分开就没意义了吗?
当然不是,假设我们有正常组和疾病组两组配对样本,PCA分析最理想的结果当然是疾病组和正常组区分度高,同一组的样本聚合在一起,不同组的样本距离较远并且能完全分开。
万一不理想情况下,疾病组和正常组并不能完全分开,那怎么办呢?
这时候可以把映射改一下,正常映射是疾病组一个颜色,正常组一个颜色,然后看两种颜色是否能够分开,现在我们改成一对配对样本是一种颜色,这样我们就能看到每对配对样本之间的距离,像我的结果就是疾病组和正常组无法完全区分,那是每对配对样本之间距离接近,同时不同对样本之间能够互相区分,这说明我的样本之间差异较大。
这样的情况还可以适应于什么情形呢?
比如有文章收集了肿瘤动静脉的血液样本,并且使用液相色谱仪提取上百种代谢物,接着进行PCA分析,结果发现动脉组的样本和静脉组的样本不能区分开,但是同一患者间动脉样本和静脉样本聚集在一起,且不同患者的样本明显区分,这就表明患者间的代谢组差异大于同一患者的动静脉样本差异,后续讨论沿着这个方向,就能把原本已经“绝望”的PCA结果又“起死回生”了。
不同的PCA分析方法,相同的分析结果
在前面的推文中,已经有老师给大家展示使用factoextra包进行PCA分析并可视化,这里我们用两种新的方法:prcomp()和PCAtools包。
但是在进行PCA分析之前,我们先来看看怎么绘制一个PCA散点图。在打赏营我们说过,任何复杂的图形的可视化复现都可以分为两个字:“拆”和“叠”,一张PCA结果图片无非就是把点映射上去,然后进行相应修饰,那么就还是一个散点图,所以我们先来看看一个简单的散点图可以怎么画,这里先使用R自带的iris函数:
1 library(ggforce)
2 library(ggsci)
3 head(iris)
4 ## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5 ## 1 5.1 3.5 1.4 0.2 setosa
6 ## 2 4.9 3.0 1.4 0.2 setosa
7 ## 3 4.7 3.2 1.3 0.2 setosa
8 ## 4 4.6 3.1 1.5 0.2 setosa
9 ## 5 5.0 3.6 1.4 0.2 setosa
10 ## 6