单细胞04.数据降维,PCA+UMAP或TSNE!
关于生信学习,我们的建议是纯生信 → R 语言 → 单细胞、空间组及多组学三步走策略。费曼学习法可能是生信入门的好方法,但是真正提高还是要靠在课题进展中不断地实践!本次单细胞 21天教程以《癌生物学》《肿瘤免疫12讲2.0》为基础,并结合经典前沿综述和单细胞文章为基础,手把手展示单细胞数据分析流程。

第一周内容安排
单细胞04.数据降维,PCA+UMAP或TSNE!
单细胞05.细胞聚类,单细胞分群那些事儿!
单细胞06.数据整合,单细胞数据批次处理!
单细胞07.分群鉴定,细胞亚群注释那些事儿!
Day04.数据降维,PCA+UMAP或tSNE!
学习内容和流程
1.阅读推文。了解数据降维的原理和方法,掌握线性降维和非线性降维的实操。
2.观看视频。根据视频解读,对单细胞数据进行数据降维分析。
3.发朋友圈。继续打卡,将推文转发至朋友圈,一句话总结学习感受或收获。
单细胞测序解决的主要问题就是细胞异质性。因此,在获得高质量Seurat数据对象之后,我们就需要直面单细胞数据分析中最重要的环节之一,分群注释。在分群注释之前,我们首先要将含有表达信息的细胞进行降维与聚类。因为单细胞数据信息太大,维度太多,不降维就无法聚类,也就无法进行后续的分群注释了。

细胞聚类的基本原理是根据基因在细胞中的表达量,计算各个细胞间表达模式的差异度,然后将差异度小于特定值的细胞分别归为特定细胞类群。这时的细胞分群还只是一个纯粹的数学结果,会随着参数的调整而变化。分析结果未必符合预期,还要结合Marker基因对各个类群进行后才能判断。而Marker基因往往需要背景知识的支撑!

细胞聚类的结果需要可视化展示,这就涉及到多维数据的降维策略和映射方式。这个过程一般是先用某种算法(PCA,或tSNE/UMAP)将细胞间关系用散点图展示出来;再根据某些指标给散点上色,这个步骤叫做映射(Project)。

PCA主要是从大量基因的表达信息中,提取对整体基因表达量或者表型影响最大的效应。这些效应被称为主成分,然后利用主成分绘图。因此,PCA是抓主要矛盾中的主要因素。但是,如果影响表达或表型的不是主要效应,而是一些更小的效应,PCA就无能为力了。tSNE和UMAP则可以兼顾主要效应和次要效应,使属于同一亚群的细胞尽可能聚类,而属于不同亚群的细胞尽可能分开,主要用于高维数据的降维。

在一个三维空间里面有均匀分布的点,如果把这些点投影到一个二维空间,一定会有很多点是重合的。为了在二维空间尽可能表达出三维的信息,大神Hinton采取把投影重合的点用不同距离(差别很小)表示的方法。这样就会占用原来在那些距离上的点,原来那些点会被赶到更远一点的地方。t 分布是长尾的,意味着距离更远的点依然能给出和高斯分布下距离小的点相同的概率值,高维和低维空间对应的点概率相同。

在单细胞数据分析中,Seurat官网的策略是先用PCA线性降维,再用tSNE非线性降维。
###先用PCA线性降维
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))
#数据可视化方法有VizDimReduction(), DimPlot(), and DimHeatmap()
VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")
DimPlot(pbmc, reduction = "pca")
DimHeatmap(pbmc, dims = 1:9, cells = 500, balanced = TRUE) #信息更多

确定合适的维度数,本次分析似乎PC8~10之间,p-value变化最显著。
##维度计算
pbmc <- JackStraw(pbmc, num.replicate = 100) #很长时间
pbmc <- ScoreJackStraw(pbmc, dims = 1:20)
#选择p值变化最显著的维度10~12
JackStrawPlot(pbmc, dims = 1:15)
#确定Elbow值,本例中为10±1
ElbowPlot(pbmc)


在确定PC的维度数目时,我们要综合考虑,通过探究不同维度数目、结合GSEA分析或者后续分析,确定多少维度数是合适的。维度数或者PC数的确定是单细胞数据分析中的关键之一,因为维度数与细胞分群密切相关。

再用UMAP进行非线性降维,维度数与PCA降维的维度数一致。
###使用UMAP及进行非线性降维
pbmc <- RunUMAP(pbmc, dims = 1:10)
#数据可视化
DimPlot(pbmc, reduction = "umap", label = T)

因为在UMAP之前没有聚类,所以细胞类群默认为一群。
###使用tSNE进行非线性降维
tSNE = RunTSNE(pbmc, dims = 1:10)
embed_tsne <- Embeddings(tSNE, 'tsne')
plot = DimPlot(tSNE, reduction = "tsne")
plot

t-SNE和UMAP是两种非线性的降维方法,在单细胞数据分析中非常受欢迎。相比而言,tSNE更着重于捕获局部结构(local similarly),整体结构(global structure)会有所牺牲。因此,tSNE降维可能会夸大细胞群体之间的差异,但是忽略群体之间的潜在联系。在散点图中,tSNE倾向于将密集的簇放大,并压缩稀疏的簇,因此,我们不能简单地通过图上的大小来衡量细胞群的差异;此外,tSNE无法保留距离较远的簇的相对位置,我们也不能简单地通过图中的位置来确定远距离细胞簇之间的关系。

相比之下,UMAP在低维空间保留了高维空间的细胞间关系。因此,UMAP更好地保留了细胞群潜在的拓扑结构,对于细胞轨迹推断(trajectory inference)分析来说更实用。通过上图,我们可以看到UMAP更趋向于一种紧凑的视觉效果,群簇之间的空间更大,也保留了更多的整体结构,而tSNE通常能将所有簇群尽可能的“铺开”。因此,在进行非线性降维时,建议UMAP和tSNE都做,然后比较、选择合适的算法,再进行后续分析。
参考资料:
最后编辑于 04-08 · 浏览 651