美文网首页
数据降维-单细胞转录组分析的三种降维方式和聚类scRNA-seq

数据降维-单细胞转录组分析的三种降维方式和聚类scRNA-seq

作者: 一车小面包人 | 来源:发表于2023-09-06 10:12 被阅读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准确度高但运行速度慢,所以它们需要在线性降维的基础上进一步非线性降维。

相关文章

网友评论

      本文标题:数据降维-单细胞转录组分析的三种降维方式和聚类scRNA-seq

      本文链接:https://www.haomeiwen.com/subject/hemhvdtx.html