数据降维-单细胞转录组分析的三种降维方式和聚类scRNA-seq
2023-09-06 本文已影响0人
一车小面包人
背景:常规单细胞转录组分析的三种降维方式:(1)PCA(2)umap(3)tsne
- 降维和聚类
降维和聚类通常是一起的。 - 线性降维-PCA
library(Seurat)
sc<-readRDS("./sc_log.rds") #'读取log标准化后的矩阵
sc<-RunPCA(sc)
sc.pca <- Embeddings(sc, reduction = "pca")
head(sc.pca)
可以看到默认降维了50个pc,原始的基因表达矩阵中的基因变成了pc_1、pc_2.....:
sc_pca.png
查看基因信息,可以看到PCA用的基因默认是2000个高变基因:
str(Loadings(object = sc[["pca"]]))
pca_features.png
可视化pca:
pca_pp <- DimPlot(sc, reduction = "pca")
ggsave(pca_pp, file="pca.png", width=12, height=6)
pca.png
- 非线性降维-umap
sc_1<-FindNeighbors(sc,dims = 1:30)
sc_1<-RunUMAP(sc_1,dims = 1:30)
sc.umap <- Embeddings(sc_1, reduction = "umap")
head(sc.umap)
可以看到降维了2个umap,原始的基因表达矩阵变成了umap_1、umap_2
sc_umap.png
这里的
FindNeighbors()中的dims是如何确定的呢?其实是要看上一步pca聚类的拐点:
my.plot <- ElbowPlot(sc, ndims=30, reduction="pca")
ggsave(my.plot, file="elbowplot.png", width=12, height=6)
elbowplot.png
这里的拐点不是很明显,因此我选择1:30。
可视化umap:
umap_pp <- DimPlot(sc_1, reduction = "umap")
ggsave(umap_pp, file="umap_1.png", width=12, height=6)
umap_1.png
此时并没有seurat_clusters,需要聚类:
sc_1<-FindClusters(resolution=0.05)
umap_pp <- DimPlot(sc_1, reduction = "umap")
ggsave(umap_pp, file="umap_2.png", width=12, height=6)
umap_2.png
- 非线性降维-tsne
tsne需要先聚类再可视化:
sc_2<-sc
sc_2 <- FindNeighbors(sc_2, dims = 1:30)
sc_2 <- FindClusters(sc_2, resolution = 0.05)
sc_2<-RunTSNE(sc_2,dim.use=1:30)
sc.tsne <- Embeddings(sc_2, reduction = "tsne")
head(sc.tsne)
sc_tsne.png
可视化tsne:
tsne_pp<-DimPlot(sc_2, reduction = "tsne")
ggsave(tsne_pp, file="tsne_1.png", width=12, height=6)
tsne_1.png
这里tsne降维后看起来类更分散,那么如何让它紧凑一些呢?可以调节
RunTSNE()的参数perplexity,这个参数越大,同一个类的点就会聚合地越紧凑:
sc_2<-RunTSNE(sc_2,dim.use=1:30,perplexity=80)
tsne_pp<-DimPlot(sc_2, reduction = "tsne")
ggsave(tsne_pp, file="tsne_2.png", width=12, height=6)
tsne_2.png
还有一个神奇的参数
exaggeration,这个值越小,全局看起来越分散:
sc_2<-RunTSNE(sc_2,dim.use=1:30,perplexity=80,exaggeration=0.01)
tsne_pp<-DimPlot(sc_2, reduction = "tsne")
ggsave(tsne_pp, file="tsne_3.png", width=12, height=6)
tsne_3.png
不好意思,分散过头了。
总结:一般来说,降维的过程是先线性PCA降维再非线性UMAP或者TSNE降维,因为线性降维运行速度快,但不够准确,而UMAP和TSNE准确度高但运行速度慢,所以它们需要在线性降维的基础上进一步非线性降维。