Skip to content

PCA #5

Description

@WJT0925

PCA和PCoA

讲解很详细:http://blog.genesino.com/2016/10/PCA/

PCA分析一般流程: 中心化(centering, 均值中心化,或者中位数中心化),定标(scale,如果数据没有定标,则原始数据中方差大的变量对主成分的贡献会很大。)

根据前面的描述,原始变量的协方差矩阵表示原始变量自身的方差(协方差矩阵的主对角线位置)和原始变量之间的相关程度(非主对角线位置)。如果从这些数据中筛选主成分,则要选择方差大(主对角线值大),且与其它已选变量之间相关性最小的变量(非主对角线值很小)。如果这些原始变量之间毫不相关,则它们的协方差矩阵在除主对角线处外其它地方的值都为0,这种矩阵成为对角矩阵。

而做PCA分析就是产生一组新的变量,使得新变量的协方差矩阵为对角阵,满足上面的要求。从而达到去冗余的目的。然后再选取方差大的变量,实现降维和去噪。

如果正向推导,这种组合可能会有很多种,一一计算会比较麻烦。那反过来看呢? 我们不去寻找这种组合,而是计算如何使原变量的协方差矩阵变为对角阵。

数学推导中谨记的两个概念:

假设: 把未求解到的变量假设出来,用符号代替;这样有助于思考和演算

逆向:如果正向推导求不出,不妨倒着来;尽量多的利用已有信息

前面提到,新变量(Ym,k)是原始变量(Xm,n)(原始变量的协方差矩阵为(Cn,n))的线性组合,那么假设我们找到了这么一个线性组合(命名为特征矩阵(Pn,k)),得到一组新变量Ym,k=Xm,nPn,k,并且新变量的协方差矩阵(Dk,k)为对角阵。那么这个特征矩阵(Pn,k)需要符合什么条件呢?

从矩阵运算可以看出,最终的特征矩阵(Pn,k)需要把原变量协方差矩阵(Cn,n)转换为对角阵(因为新变量的协方差矩阵(Dk,k)为对角阵),并且对角元素从大到小排列(保证每个主成分的贡献度依次降低)。

现在就把求解新变量的任务转变为了求解原变量协方差矩阵的对角化问题了。在线性代数中,矩阵对角化的问题就是求解矩阵的特征值和特征向量的问题。

所以,只要求出原矩阵协方差的特征值和特征向量,将特征值按从大到小排序,得到相应特征向量,即P矩阵,就是新的变量。用R的promp包计算得到的就是该变量。

求出原限量的协方差特征矩阵,乘以原向量(标准化后) 得到新的向量,,,,即可用于作图。

三文读懂PCA和PCoA(一)

在微生物NGS测序领域的高分文章中,PCA(主成分分析)和PCoA(主坐标分析)会很常见。甚至在RNA分析领域,很多研究和文章也会依据基因的表达量作PCA和PCoA分析。

常见的PCA和PCoA分析以下图的形式呈现:

国际空间站与喷气推进实验室依据种群多样性进行的PCoA分析

不同培养条件马铃薯浆发酵液的菌群差异

很明显,我们可以通过分析坐标轴中样本和样本之间的距离直观地看到2个样本或2组样本之间的菌群差异性。若2个样本或2组样本之间的直线距离较近,则表示这2个样本或2组样本的菌群差异性较小;相反,若2个样本或2组样本之间的直线距离较远,则表示它们之间菌群差异性较大。所以,PCA和PCoA所呈现的结果,具有直观性(直接看两点之间的距离)和完整性(呈现所有样本),且数据易于分析和解读(大家都看得懂)。

那么,PCA和PCoA是如何定义的?PCA和PCoA之间是否有区别?何时该选用PCA或何时该选用PCoA?PCA和PCoA背后的分析原理如何?相信这些问题是比较困扰读者的。

PCA和PCoA的定义

PCA(Principal Components Analysis)即主成分分析,也称主分量分析或主成分回归分析法,首先利用线性变换,将数据变换到一个新的坐标系统中;然后再利用降维的思想,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上。这种降维的思想首先减少数据集的维数,同时还保持数据集的对方差贡献最大的特征,最终使数据直观呈现在二维坐标系。

PCoA(Principal Co-ordinates Analysis)分析即主坐标分析,可呈现研究数据相似性或差异性的可视化坐标,是一种非约束性的数据降维分析方法,可用来研究样本群落组成的相似性或相异性。它与PCA类似,通过一系列的特征值和特征向量进行排序后,选择主要排在前几位的特征值,找到距离矩阵中最主要的坐标,结果是数据矩阵的一个旋转,它没有改变样本点之间的相互位置关系,只是改变了坐标系统。两者的区别为PCA是基于样本的相似系数矩阵(如欧式距离)来寻找主成分,而PCoA是基于距离矩阵(欧式距离以外的其他距离)来寻找主坐标。

好吧,定义比较抽象,我们还是无法看懂看透PCA和PCoA。不急,下面的文字很重要~~~

PCA和PCoA的区别

1.PCA的理解

a. 假如有3个实验样本,它们共有1个物种x,那么我们其实可以用物种x的相对丰度来表示样本和样本之间的差异。这样我们就可以画一个一维坐标轴,将这3个样本的物种x的丰度表示在一维轴线上,如下图所示:

不同培养条件马铃薯浆发酵液的菌群差异

此时数据不发生偏移,样本和样本之间的距离代表样本之间的物种丰度差异(实际上样本A和B间的距离即为A中的物种x的丰度与B中物种x的丰度的差值)。

b. 假如有3个实验样本,它们共有2个物种:x和y。那么我们其实可以用物种x和物种y的相对丰度来在二维坐标系中定位样本。A=(x1,y1), B=(x2,y2),C=(x3,y3),如下图所示:

物种x和y在A, B, C三个样本中的相对丰度
此时数据不发生偏移,样本和样本之间的距离代表样本之间的物种丰度差异。

c. 假如有3个实验样本,它们共有k个物种: x, y, z…………k。那么我们其实可以用物种x, y, z…………k的丰度来定位样本A=(x1,y1,z1……………k1)。同理,样本B与C也可以用这种形式表示。细心的同学可以发现,其实A=(x1,y1,z1……………k1)是一组向量,而且是k维向量(A=(x1)是一维向量,A=(x1,y1)是二维向量,A=(x1,y1,z1)是三维向量)。但是k维向量无法在二维坐标系(平面)中表示(一维和二维向量可以,如上a和b两种情况)。此时我们要么将K维向量作出一些取舍,如削去一些不重要的向量仅保留2个关键向量(削去一些不重要的物种仅保留2个关键物种);要么将K维向量投射到二维坐标系中(降维),但是此时数据便会损失,例如下图,我们将二维坐标系中的数据投射到一维坐标系中,实际数据会折扣掉一部分(A和B的直线距离为5,投射到x轴的一维距离为4,投射到y轴的一维距离为3。从第一维坐标轴上观察A和B的距离只有4,从第二维坐标轴上观察A和B的距离只有3。)。

将二维空间数据投射到一维空间中存在数据损失
因此将k维空间的数据投射到二维空间上(降维),就会产生数据损失,此时坐标轴的贡献率就不再是100%,而是小于100%(而a和b两种情况无需降维处理,因此贡献率为100%)。此时数据如下图所示:

将k维空间数据投射到二维空间中

因降维处理,数据发生损失,样本和样本之间的距离代表样本之间的物种丰度差异。

那么如何来选择投影?这就是定义当中所提到的“使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上”。

2.PCoA的理解

a. 假如有2个实验样本,它们都有很多物种,那么我们可以用Bray-Curtis或UniFrac(或其他算法)计算每个样本的物种组成差异度(用一个数值表示物种相对丰度),数值之间的差异就代表了2个样本的物种相对丰度的差异。这样我们就可以画一个一维坐标轴,将这2个样本表示在一维轴线上,如下图所示:

2个样本在一维坐标系中呈现

此时数据不发生偏移,样本和样本之间的距离代表样本之间的物种丰度差异。

b. 假如有3个实验样本,同样可以用Bray-Curtis或UniFrac(或其他算法)计算每个样本的物种组成差异度(用一个数值表示物种相对丰度),数值之间的差异就代表了每2个样本的物种相对丰度的差异。这样我们就可以画一个二维坐标轴(三点组成一个面),将这3个样本表示在二维轴线上,如下图所示:

3个样本在二维坐标系中呈现

此时数据不发生偏移,样本和样本之间的距离代表样本之间的物种丰度差异。

c. 以此类推,假如有n个实验样本,同样可以用Bray-Curtis或UniFrac(或其他算法)计算每个样本的物种组成差异度(用一个数值表示物种相对丰度),数值之间的差异就代表了每2个样本的物种相对丰度的差异。这样我们就可以画一个n-1维坐标轴,将这n个样本表示在n-1维空间中。但是n-1维空间无法在平面上表示(一维和二维除外,三维勉强可以),因此只能利用矩阵呈现,如下图所示:

n个样本的矩阵示意图
若要将n-1维的数据在二维坐标系中呈现,需降维处理,即将n-1维的数据投影到二维空间当中,方法与思路同PCA类似。此时,2个坐标轴的贡献率均小于100%,如下图所示:

n个样本在二维空间中呈现(只展示了3个样本)
因降维处理,数据发生损失,样本和样本之间的距离代表样本之间的物种丰度差异。

这个时候, PCA和PCoA就好理解了。我们再回过头看定义“PCA是基于样本的相似系数矩阵(如欧式距离)来寻找主成分,而PCoA是基于距离矩阵(欧式距离以外的其他距离)来寻找主坐标”,其实浅显地来理解,就是上面这么回事。

我们知道了PCA和PCoA的定义,也理解了PCA和PCoA的区别,那么它们该何时选用,以及背后的算法如何?欲知后事如何,且听下回分解。

三文读懂PCA和PCoA(二)

通过上一篇文章《三文读懂PCA和PCoA(一)》的学习,我们对PCA和PCoA有了较为深刻的理解,我们了解到“PCA是基于样本的相似系数矩阵(如欧式距离)来寻找主成分,而PCoA是基于距离矩阵(欧式距离以外的其他距离)来寻找主坐标”。

不过,我们知道了PCA和PCoA的定义只能加深对它们的认识,那么又该何时使用PCA,何时使用PCoA,以及如何制作PCA和PCoA图呢?这就是我们科研工作者比较关心的一个问题了(#就比如我们知道水稻和小麦都能吃,但是什么季节吃水稻什么季节吃小麦以及怎么做米饭和馒头才是老百姓最为关心的问题#)。

同样的,这篇文章小编就来谈谈对这些问题的理解和感悟。(#咳,专业术语实在玩不来#)

1

根据样本数和物种数判断

通过《三文读懂PCA和PCoA(一)》,我们知道PCA基于物种丰度矩阵来定义的,而PCoA基于样本间的距离矩阵来定义的。这一点非常关键。

PCA基于物种丰度矩阵就意味着PCA分析的矩阵维度是就等于物种数目。换句话说,你要分析的样本如果要做PCA分析,那么一般来说有多少个物种就有多少个维度(2个物种就是在二维空间上分布,3个物种就是在三维空间上分布)。

同样的道理,PCoA基于样本间的距离矩阵就意味着PCoA分析的矩阵维度与样本数目相关。如果你要分析的样本做PCoA分析的话,那么一般来说有n个样本就至多有n-1个维度。比如3个样本就是在二维空间上分布,4个样本就是在三维空间上分布。如果把样本理解成点的话,简单地说就是三点一面,四点一空间。

三点一面
另外,我们还知道无论是PCA还是PCoA,一般都需要降维处理(一般物种数目都超过3个,样本数目都超过4个),而降维就会产生数据损失。多数情况下,我们在做降维处理的时候,期望维数越低越好,这样我们就可以最大程度地保真原始数据。比如一维和二维数据一般不需要降维处理(直接呈现);再比如要想把三维坐标系的数据降维到一维坐标系上,我们首先要把三维空间的数据降维到二维空间上(此时损失一部分),再将二维空间的数据降维到一维空间上(再损失一部分)。

那这样就好办了。

如果样本数目比较多,而物种数目比较少,那肯定首选PCA;如果样本数目比较少,而物种数目比较多,那肯定首选PCoA。

举两个极端的例子:

a. 如果有100个样本,但一共有2个物种,此时肯定首选PCA;

2个物种PCA分析只有2个维度

b. 如果有3个样本,但一共有100个物种,此时肯定首选PCoA。

3个样本做PCoA分析

a这种情况如果选用PCA,2个物种就可在二维坐标系上分析,如果选用PCoA,100个样本可能就需要在99维坐标系上分析,然后还需要再降维处理;同样的道理,b这种情况如果选用PCoA,3个样本就可以在二维坐标系上分析,如果选用PCA可能就需要在100维坐标系上分析。

那么选用PCA和PCoA分析时,这个样本数和物种数有没有一个界限或者标准呢?很遗憾,小编也无法解答这个问题。或许存在这样一个界限或者标准,但是小编更倾向于认为统计分析并不是死板的。像a和b这两种情况毕竟都是少数,如果物种数和样本数相当以致于难以抉择时,不妨根据项目经验做一些调整,或者两种分析都做选择一个合适的(怎么看都感觉这是一句废话)。灵活调整实验策略对于科研工作者来说同样重要(还是一句废话。。。。)

2

对物种或样本做出取舍

实际上,我们往往会遇到“100个样本,100个物种”这种比较容易常见的情况。对于绝大多数学者而言,一般不会将每一个物种都研究透彻, 通常情况我们会选择几十个较为关键的物种或感兴趣的物种进行后续的研究。同样的,对于样本,我们往往会设置3个以上的重复(视情况而定,有的需要5个重复以上),此时我们需要选择重复性好的样本进行后续研究。

因此,小编认为,在做PCA和PCoA分析之前,首先要对物种和样本做一些简单的取舍,选择合适的样本或物种进行分析准确度会比较好(比如某一个物种,在1个样本出现,在其他99个样本均未出现,那这个物种很有可能是一个污染的物种,个人认为可以剔除),特别是那些之前研究认为关键的物种、丰度较高的物种或者有显著性差异的物种,往往会有意想不到的效果(假设某一物种在100个样本里的丰度都是1%,那其实这个物种会拉近各个样本的距离)。

物种1在3个样本中的丰度较高

那么如何选择这些差异性的物种呢?通过统计假设检验(显著性分析)就可以选出这些物种,如有需求,小编在后面几篇文章中详细介绍一些统计假设检验的方法。一般而言,很多老师会选择做微生物16S测序,其实很多公司在测序报告当中都会有PCA和PCoA分析,而且也会有统计假设检验分析,所以将PCA或PCoA分析与统计假设检验相结合的话,分析效果会比较好。

3

PCA和PCoA都做分析

如今计算能力如此发达,做PCA和PCoA基本都是分分钟的事情,不妨2个都可进行分析,这里不再赘述。(那之前说的这些还有什么用?古人云:知其然,知其所以然)

讲到这里,我们对PCA和PCoA的选用就有了一个基本的认识了。还剩最后一篇章,小编计划再介绍一下PCA和PCoA背后的算法就预备完结了。如果大家有有疑问或其他见解,欢迎留言讨论~

关注下方公众号可获得更多精彩

源文档 <>

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions