参考学习资源:
1.生信技能树线下培训班视频StatQuest系列
2.配合云天明读研学习笔记系列
记录补充一些不熟悉的概念
1 层次聚类,K-means聚类
- 在学习转录组下游数据分析中,常用的热图我们需要对表达数据进行聚类(clustering)和缩放(scaling),然后展示出来的图可视化效果更好
- 据以往的经验缩放(scaling)会影响两个结果,第一,不同表达水平基因的颜色,这会影响你比较不同样本中的相同基因的表达水平,第二,影响聚类(clustering)
如何对数据进行缩放(scale)
-
无论对相同基因在不同样本中进行缩放,还是对全局的基因进行缩放,最常用的方法就是Z值缩放法(Z-Score Scaling),如下所示:
-
具体看一下这种方法是如何实现数据的缩放的
-
第一步:计算其均值(均值为16.5)
-
第二步:每个样本的数值减去均值,此时,如果这个数值大,就表示此样本的某基因转录水平高;如果数值小,就表示此样本的某基因转录水平低
- 第三步:计算标准差(标准差为6.28)
-
第四步:将第2步中的数值除以标准差
经过上述的处理后,无论原始数据的变异程度如何,这些数据的范围最终会缩小,之所以这样处理,就是因为如果原始数据之间差异过大,那么不同基因表达水平就会变化程度(more subtle)更高的色度(shade)来表示,经过这样的处理,用较小程度的色度(shade)就能表示出基因水平的差异,方便观察
-
此时,我们可能会遇到这样的一种情况,例如,如果数据中出现异常值时,数据会怎么样,就像下面的这个样子
-
此时如果进行Z转换的话,标准差会很大,也就是Z值的分子会很大,最终得到的值会有一部分集中在0附近,只能用很少的色度来进行区分,如下所示
这个时候就需要进行如下一个处理
#来自曾老师的代码
n=t(scale(t(dat[cg,]))) # 'scale'可以对log-ratio数值进行归一化
n[n>2]=2
n[n< -2]= -2
如何聚类
-
原始数据经过缩放后(scaling),此时就可以进行聚类了,聚类有2种方法,分别是层次聚类(hierarchical clustering)和K-均值(K-means)聚类,先演示讲层次聚类(hierarchical clustering)
层次聚类(hierarchical clustering)
先看一个简单的案例,在这个案例中,有3个样本,每个样本4个基因,如下所示:
-
第一步,计算出哪些基因与基因1最为接近,基因2明显与基因1表达模式不同,基因3与基因1的表达形式比较类似,基因4与基因1的表达模式也比较类似,但是,在这几个基因中,与基因1表达模式最接近的还是基因3
-
第二步,计算出哪些基因的表达模式与基因2最为接近(然后是基因3,基因4),经计算发现,基因4与基因2的表达模式最相似
-
第三步,我们在前面找到基因1和基因3的表达模式相似,基因2和基因4的表达模式相似,但是,基因1和基因3的相似程度要比基因2和基因4的相似程度高,我们把前面的组合(基因1和基因3)放到一个簇(cluster)中
-
第四步:此时再回到第一步,把基因1和基因3构成的簇(Cluster # 1)当作一个基因,然后再按照第二步,第三步来计算,经计算,此时,基因2和基因4最相似,把它们再放到一个簇中(Cluster #2)
-
通常情况下,层次聚类(Hierarchical Clustering)通常会用一个树形图(dendrogram)连接起来,用于表明聚类成员之间的相似性和聚类次序
-
在右侧的树形中,我们可以发现,Cluster #1是最先形成的聚类,它们的相似性最高
-
Cluster #2是第二个形成的聚类,它们的相似性次高
-
而第三个聚类Cluster #3则包含了所有的基因,它是最后形成的
层次聚类的原理
前面我们提到过,层次聚类的第一步就是计算两组基因的相似性,此时我们详细介绍一下如何进行计算。
-
在计算相似性方面并没有一个统计的标准,但有一些常用的手段。第一种计算相似性的方法就是欧氏距离(Euclidian distance),如下所示:
-
为了简单地说明欧氏距离(Euclidian distance),我们以最简单的例子来说明,在这个例子中,有2个样本,每个样本有2个基因,然后两个样本的相同基因的差值的平方相加,并开平方,得到的数值就是欧氏距离
-
除了欧氏距离可以计算相似性外,还可以使用曼哈顿距离(Manhattan distance)和坎贝拉距离(Canberra distance)来计算相似性,其中曼哈顿距离只是不同样本之间相同基因差值的绝对值之和
-
我们看一下用不同的方法计算相似性的区别,下图的左侧图使用的欧氏距离(Euclidian distance)来得到的热图,右图使用的是曼哈顿距离(Manhattan distance)得到的热图
从图上来看,使用这两种不同的相似性计算方法得到的热图略有差异,具体要使用哪种方法来计算相似性,并没有一个统计的标准,它们也没有什么生物学意义。
具体原理就不记录了,也记不住,需要在返回原笔记查看,我主要是了解一下这个是什么怎么用就行。
K-means聚类
什么是K-means
-
先看一个场景,例如我们手中有这样的一批数据,把它们绘制到一个数轴上,此时你的目的就是把它们分成3个簇(cluster),这三个数据或许是来源于三种不同的细胞或都是三种不同的肿瘤,如下所示:
-
我们仅从肉眼观察,就知道这一批数据明显可以分成3个簇,但是,如果我们不用肉眼来观察,用计算机来计算,如何得到这3个簇呢?此时就需要用到一种算法,即K-means聚类
K-means的基本思想
-
第一步:选择你要聚类的个数,K-means聚类中的这个K就是你要聚类的数目的意思,此时,你们选择K=3,这也就是说,我们想把这些数据取成3个簇(cluster),对这个K值如何选择,我们后文会提到
-
第二步,随机选择3个不同的数据点当成3个簇
-
第三步:计算第1个点到这三个簇的距离,先计算第1个点到蓝簇的距离
-
接着,计算第1个点到绿簇的距离
-
最后,计算第1个点到橘黄簇的距离
-
第四步:将第1个点归于离它最近的簇,在这个案例中,第1个点就属于蓝簇
-
接着,重复前面的步骤,只是这次计算的第2个点,第2个点最终的计算结果它属于绿簇
-
再计算第3个点,它属于橘黄簇
-
经过最终计算,第3个点到最后的点都属于橘黄簇
-
此时,所有的点都进行了聚类
-
第五步:计算每个簇的均值
-
此时,我们还按照前面的方法,计算每个点到这三个簇的均值的距离
-
最终计算结果如下所示:
-
经过最终的计算,我们发现,这些聚类结果并没有发生改变,如下所示:
-
也就是说,K-means的聚类结果似乎比我们肉眼进行的聚类的结果还要差
-
此时,我们需要对聚类的结果进行评估,其方法就是计算每个簇的变异,如下所示:
由于K-means的聚类过程并不能“看”到最佳的聚类,只能追踪这些簇与这些簇的总变异,然后通过不断更改起始的数据点进行迭代。
-
此时我们回到起点,再将随机选择3个初始数据点作为初始的簇,按照前面同样的自救,计算剩余的点到这三个簇的距离,计算每个簇的均值,然后基于新的均值进行聚类,直接这些簇不再改变为止,如下所示:
-
计算的结果如下所示,此时这些数据已经进行了聚类,再计算这三个簇的变异,如下所示:
-
这一轮迭代结束,然后再来一轮,如下所示:
-
我们把这三次的聚类结果放一块儿,我们可以发现,第二次的聚类结果最好,如下所示:
但是我们并不清楚这个结果是不是所有可能的聚类结果中最好的(总变异最小),因此我们需要进行更多次的聚类,然后才能下结论。
-
此时我们提出一个问题,K值应该如何选?在这个案例中,明显可以知道K值为3,但是,有的时候,这个K值并不像本案例中这么明显,如下所示:
-
其中一种确定K值的方法就是不断地使用不同的K值,如下所示:
-
我们先使用K=1这个数值,通过计算总的变异程度,明显这个结果不行,如下所示:
-
再使用K=2,此时我们计算一下总变异,这个结果比K=1的时候要好一些,如下所示:
-
接着,我们使用K=3,通过计算它的总变异,我们发现K=3的结果要比K=2更好,因为它的总变异更低,如下所示:
-
再继续,使K=4,我们发现,K=4的总变异比K=3的总变异还要小,如下所示:
-
从前面的这些计算结果来看,我们能总结出一个规律,每当我们添加一个新的簇时,总变异就会降低,当簇的数目等于总的数据点的数目时,总变异就是0,如下所示:
-
如果我们把K值与变异降低的程度绘制成曲线,那么就能得到下面的这条曲线:
从这个曲线上我们可以看到,当K=3时,它之后的K值每增加1,总变异的降低幅度就没有前面的快,我们把K=3这个点称为拐点(elbow plot)。
K-mean聚类与层次聚类的区别
-
K-means聚类会把数据聚成你所期望的簇的数目,而层次聚类则中介告诉你,哪两个数据是最相似的,如下所示:
二维坐标的K-means
如果我们的数据无法绘制到一条数轴上时,如何进行K-means聚类呢,如下所示:
-
这种情况下,它的聚类原理跟一维数轴的原理一样,第一步就是随机找到三个点(前提是你想聚成3个簇),如下所示:
-
然后,计算不同的点到这三个簇的欧氏距离(Euclidean distance),在二维坐标中,计算这个欧氏距离就是采用勾股定理,如下所示
-
接着,就像前面讲的那样,距离最近的就属于某个簇,如下所示:
- 第一次的聚类结果如下所示:
- 再接着,我们会像前面是找到的那样,计算出每个族的中心点(也就是均值),然后再聚类,如下所示:
- 最后,得到比较满意的聚类图,如下所示:
热图的K-means
-
为了方便描述,我们就以下面的案例说明一下,两个样本(sample 1和sample 2),分别有4个基因,现在把这两个样本分别命令为X,Y,把它们的基因放到二维坐标轴上,如下所示:
- 然后像前面那样进行聚类,如下所示:
- 事实上,在实际的计算过程中,我们并不需要把数据投射到二维坐标上,只用计算不同样本之间的距离即可,例如欧氏距离,如下所示:
R的kmeans()函数备注
在R中,进行K-menas聚类的函数是
kmeans()
,它有一些注意事项。- 此函数会对每个距离加上权重,因此那些大簇(large clusters)的权重要略高于小簇(small clusters)的权重。
- 默认情况下,此函数只有一组原始的簇,如果你要使用多个不同的起始数据点,那么你需要设定参数
nclust=25
或者是25左右的数字,例如(kmans(data, k=3, nclust=25)
)。
- 默认情况下,此函数只有一组原始的簇,如果你要使用多个不同的起始数据点,那么你需要设定参数
t-SNE
- t-SNE是一种将复杂的高维数据进行降维,同时还保留大量原始数据信息的一种方法。
- 现在我们讲一下t-SNE是如何实现降维的,如下所示:
- 第一步,我们首先获得原始的二维散点图,然后把这些点随机地投射到一个数轴上(就是一维坐标),如下所示:
- 第二步,从这一步开始,t-SNE会移动这些投射到一维坐标上的点,但一次仅移动一个点,直到这些点聚集起来,如下所示:
- 第三步,在这一步我们可以看一下t-SNE是如何移动第1个点,如下所示:
- 由于第1个点是红点,它是某个聚类中的一个成员(就是二维图中红色的分类),因此第1个点移动的话,它会移向与它同类的这些点附近,也就是向右移动,如下所示:
- 与此同时,第1个点右边的2个黄点和1个蓝点(其实就是第1个红点与第2个红点之间的这3个点)在二维图中离得比较远,因此它们会被推回去,如下所示:
- 因此,在第一次移动的时候,第1个红点移向右边的那三个红点,第1个红点右侧的两个黄点与一个蓝色移到左边,如下所示:
- 在这个案例中,第1个红点被右侧的3个红点吸引,它的吸引力最强,因此移向右侧(我的理解就是,只看红点,如果把它们聚集起来,必定要移动,我们首先移动的是第1个红点,第2个红点右边是3个红点,因此第1个红点受到的吸引最大),如下所示:
- 红点移动后就是下面的这个样子(一次移动一个位置):
- 移动后,第1个点就变成了黄点,如果再次移动的话,黄点的移动就跟前面的红点移动过程一样了,它受到右边三个黄点的吸引,就会移动过去,移动后,红点就又被推了回去,跟前面的原理是一样的,如下所示:
- 此时,黄点移向右侧,与那三个黄点更加接近,如下所示:
- 移动后,就成了这个样子(部分叠加起来了),如下所示:
- 然后不断地重复上述过程,这些不同类型的点就会一点一点聚集起来,如下所示:
先是这样:
然后是这样:
再然后是这样:
最终就成了这个样子:
上面的整个动态过程建议看原视频,讲得很透彻。
t-SNE使用t分布来计算相似分数,因为如果不使用t分布,这些聚类就会挤成一堆,很难观察这些聚类的效果
这个是降维聚类,可视化后跟前面的二维坐标的K-means有些类似
- 第44讲的是多维尺度变换(multidimensional scaling,MDS)与主坐标分析(principal coordinate analysis,PCoA)。第45节讲的是用R来计算MDS和PCoA。
MDS与PCA非常相似,都是一种降维的方法。MDS分为度量MDS(Metric Multidimensional scaling)和非度量MDS(Non-metric Multidimensional scaling),其中非度量MDS也称为经典(Classical)MDS,也叫做主坐标分析(principal coordinate analysis,PCoA),如下所示:
MDS的基本思想
为了更方便地理解MDS,我们还是像介绍PCA那些,先讲一个比较简单的例子,例如,我们在下面的图形中,我们先看一群绿色的点,把它们当成是一群正常的细胞(当然了,如果你不是做生物的,你也可以把它们视为一群人,或一批汽车,或者城市等),如下所示:
虽然这群细胞看起来比较像,但实际上,它们有可能不同,如下所示:
当然了,还有可能像这个样子,如下所示:
但问题就在于,仅从直观的角度来看,我们不太容易区分它们,但我们可以通过类似RNA-Seq这样的手段来发现这些细胞有哪些基因是活跃的,这样就可以理解这些细胞的具体功能,如果这是一群人,我们可以测量他们的血压,身高等数据,如下所示:
我们就当它们是细胞,这是测完RNA-seq的一些数据,如下所示:
其中,第1行表示的是样本,第1列是基因名,其余的部分是不同样本某个基因的表达水平,此时,如果根据我们前面介绍的PCA法对这些数据进行分析,那么我们就能把不同样本之间的相互关系转换到一个二维的坐标图上,如下所示:
那些高度相关的样本就会聚集成一块,如下所示:
此时,我们再回到MDS和PCoA上来,这两种方法非常像PCA,只是它们不是把样本之间的相互关系转换成二维坐标,而是把不同样本之间的距离转换成二维坐标,如下所示:
为了进行MDS和PCoA分析,我们可以计算两两样本之间的距离,就像下面的这个样子,如下所示:
为了方便理解,我们此时就只计算一下Cell1和Cell2的距离,如下所示:
欧氏距离
一种常见的计算两个样本之间距离的方法是欧氏距离(Euclidean Distance) 计算法,如下所示:
如果此时我们只有两个基因,就像下面的这个样子,如下所示:
为了计算这两个样本之间的欧氏距离,我们可以用线段来表示它们基因之间的距离,如下所示:
然后通过勾股定理,计算出欧氏距离,如下所示:
如果我们有更多的基因,那么就按照这种方法,求出两个样本中,相同基因的差值,再求其平方和的平方根,像下面的这个样子:
一旦我们计算好了不同样本之间的欧氏距离,那么我们就可以把这些样本绘制到一个二维坐标图上,如下所示:
利用欧氏距离(Euclidean Distance)来进行的MDS和PCoA分析的一个局限就是,最终生成的二维坐标轴基本上与PCA生成的二维坐标图是一样的,如下所示:
换句话讲,这种基于最小线性距离的聚类(clustering)与最大化线性相关是一样的,如下所示:
不过,计算两两样本之间的距离并非只有欧氏距离(Euclidean Distance)一种方法,如下所示:
其他距离方法
例如,另外一种计算两两样本之间的距离方法就是计算基因间差值的log转换的平均值,例如在下面的案例中,对于Cell1和Cell2的Gene1,它经过log转换后的数值就是log(3/0.25)
,同理,Gene2和Gene 8的计算也同样如此,如下所示:
经过计算,再取它们的绝对值,最终我们计算出这些数值的平均值,如下所示:
最终我们看一下分别使用了欧氏距离的MDS图(左侧)和使用了差异倍数log转换的MDS图的坐标轴(右侧),如下所示:
不过,在生物学家眼中,通常会选择表达差异倍数的log转换值来计算两两样本之间的距离,因为他们研究的基因通常是成倍变化的,这样用表达差异倍数的log转换会比较合适,如下所示:
我们常见的计算样本间距离的方法有:曼哈顿距离(Manhattan Distance)、汉明距离(Hamming Distance)、大圆距离(Great Circle Distance)等,如下所示:
总结
PCA构建二维坐标图的方法基础是不同样本之间的相关性,而MDS和PCoA构建二维坐标图的方法基础则是基于不同样本之间的距离,如下所示:
PCA的计算流程为:计算样本间的相关性 -> 复杂数学运算(主要是特征值分解) -> 绘图、主成分变异,Loading Scores。
而MDS和PCoA的计算流程与PCA的计算流程的不同之处就在于,第一步是计算样本间的距离,其余的部分与PCA的计算差异不大。