单细胞测序分析(五)R包Seurat三种算法对数据聚类降维

大家好,小果今天继续介绍R包Seurat单细胞测序分析。

上一期我们用Seurat对数据进行了进一步的过滤,过滤掉了不好的细胞(死细胞,空细胞,多细胞),提高了数据的质量,并对数据进行了标准化。今天我们将使用不同的算法来对数据进行降维。

为什么要做降维呢?

人类细胞计划根据基因表达模式不同来分类细胞。有的细胞分化后,只会表达特定的基因,不会再表达其他的基因了,根据表达的基因来分类细胞是可靠的。

在小果案例这个数据集中有2700个细胞,我们不可能一个一个去看,它们当中有很多表达模式是相似的,我们可以根据基因表达模式不同来进行分类。

三种常用降维算法

PCA主成分分析

其原理是通过对协方差矩阵进行特征分解,以得出数据的主成分与它们的权值,即特征值和特征向量。它产生的结果可以理解为对原数据中的方差做出解释:哪一个方向上的数据值对方差的影响最大?

通俗点说,就像选人大代表一样。每个阶层,每个民族,每个职业选代表。 在单细胞分析中就是对细胞分组,每组选代表性的基因选出来。

t-SNE

t-SNE是一种流行的探索高维数据的方法,由2008年,范德马顿和辛顿发明。它具有近乎神奇的能力,可以从具有数百甚至数千维的数据中创建引人注目的两维“图片”。想继续深入理解的小伙伴可以去下面这个网址学习t-SNE。

How to Use t-SNE Effectively (distill.pub)

UMAP

UMAP是McInnes等人2019年发明的一项新的数据降维技术。与t-SNE相比,它具有许多优势,最显着的是提高了速度并更好地保存了数据的全局结构。感兴趣的小伙伴可以去下面这个网址交互式理解UMAP的降维原理。

Understanding UMAP (pair-code.github.io)

用Seurat对单细胞测序数据降维

我们对这2700个细胞进行分类,首先假设分成10组。

#将数据所有基因名保存到all.genes变量中。

all.genes <- rownames(pbmc)

#默认处理2000个基因,添加features对所有基因进行处理

pbmc <- ScaleData(pbmc,features = all.genes)

#如果需要移除不想要的基因,可以添加vars.to.regress

pbmc <- ScaleData(pbmc, vars.to.regress = “percent.mt”)

这里移除所有的线粒体基因。

#PCA分析与可视化

pbmc <- RunPCA(pbmc,features = VariableFeatures(object = pbmc))

使用RunPCA函数对数据pbmc进行PCA分析。

#输出前五个PCA结果

print(pbmc[[‘pca’]],dims = 1:9,nfeatures = 5)

#PCA可视化,Seurat提供三个函数VizDimReduction(), DimPlot(), DimHeatmap()

VizDimLoadings(pbmc,dims = 1:2,reduction = “pca”)

Pca降维主成分1和2的差异显著基因

DimPlot(pbmc,reduction = “pca” )

使用PCA方法对细胞分类。

#绘制10个

DimHeatmap(pbmc, dims = 1:10, cells = 500, balanced = TRUE)

可以看到,到了后面已经不能很好的将细胞区分开了。

确定分组个数

#确定数据的分群个数,比较耗时

pbmc <- JackStraw(pbmc,num.replicate = 100)

pbmc <- ScoreJackStraw(pbmc,dims = 1:20)

#绘制碎石图,确定分群个数

JackStrawPlot(pbmc,dims = 1:20)

虚线以上是算法建议分成的组数。

ElbowPlot(pbmc)

从图中可以看出,10以后没有什么变化了,说明推荐分成10组。

细胞聚类

pbmc <- FindNeighbors(pbmc,dims = 1:10)

FindNeighbors函数计算细胞间距离,如果两个细胞表达谱越相近,距离越小

pbmc <- FindClusters(pbmc,resolution = 0.5)

#查看不同细胞的分群

head(Idents(pbmc),5)

查看前5个群

虽然我们设置dims=10,分成10组,但是通过聚类后观察LevelsLevels说明细胞被分成了9组。

barplot(table(Idents(pbmc)))

列出了每个群的细胞数目

t-SNE细胞聚类与可视化

pbmc <- RunTSNE(pbmc,dims = 1:10)

p2 <- DimPlot(pbmc,reduction = “tsne”)

p2

T-SNE分类结果图。

UMAP细胞聚类与可视化

pbmc <- RunUMAP(pbmc,dims = 1:10,label=T)

Reductions存储着降维的结果,第一个是pca分析的结果,umap随后被追加入了进去。

我们可以将计算好的UMAP结果输出为单独的文件,用loupe browse查看。

#绘制UMAP图

p1 <- DimPlot(pbmc,reduction = “umap”)

p1

UMAP分类结果图。

UMAP、t-SNE与PCA对比

PCA分类效果最差,明显没有分开。UMAP较t-SNE分类效果更好。

好您是否明白了呢,如果有不懂的来和小果讨论吧~下期小果将对分类的细胞进行鉴定与寻找标记基因。我们不见不散~