前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >🤩 scRNA-seq | 吐血整理的单细胞入门教程(初步降维及可视化)(八)

🤩 scRNA-seq | 吐血整理的单细胞入门教程(初步降维及可视化)(八)

作者头像
生信漫卷
发布2022-10-31 17:21:56
发布2022-10-31 17:21:56
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

1写在前面

上一期我们介绍了质控quality control, QC)的意义和方法。 本期我们介绍一下高表达基因的可视化,以及简单的主成分分析PCA)。🥰

2用到的包

代码语言:javascript
代码运行次数:0
复制
rm(list = ls())
library(tidyverse)
library(SingleCellExperiment)
library(scater)

3示例数据

这里我们用一下之前介绍的counts文件和annotation文件,然后通过SingleCellExperiment创建SingleCellExperiment格式的文件,并且经过初步过滤ID转换等。

代码语言:javascript
代码运行次数:0
复制
load("umi.Rdata")
umi

4高表达基因的可视化

4.1 初步绘图

这里我们可以看到高表达的多是一些线粒体核糖体基因。 不过大多数的dataset都是这样的。😂

代码语言:javascript
代码运行次数:0
复制
umi %>% 
plotHighestExprs(exprs_values = "counts", 
                 feature_names_to_plot = "SYMBOL", 
                 colour_cells_by="detected")

4.2 过滤一下

这里我们过滤一下看看,过滤条件:

  • 2个或更多细胞中检测到的基因;
  • counts > 1。
代码语言:javascript
代码运行次数:0
复制
keep_feature <- nexprs(umi, byrow = TRUE, detection_limit = 1) >= 2
rowData(umi)$discard <- ! keep_feature
table(rowData(umi)$discard)

在这里我们过滤掉了4205个基因。


4.3 正式过滤

我们先取个log吧,并存在umi里,然后再用前面的过滤条件过滤一下。

代码语言:javascript
代码运行次数:0
复制
assay(umi, "logcounts_raw") <- log2(counts(umi) + 1)

umi.qc <- umi[! rowData(umi)$discard,! colData(umi)$discard]

5降维与可视化-PCA

5.1 PCA

我们常用的降维方法包括PCAUMAPtSNE。🤒 Note! 👀 这里需要跟大家强调一下log-transformationnormalization的重要性。

5.2 质控前

举个栗子🌰 不进行log-transformationnormalization。 聚成一团,根本没法看啊。🫠

代码语言:javascript
代码运行次数:0
复制
umi <- runPCA(umi, exprs_values = "counts")
dim(reducedDim(umi, "PCA"))
plotPCA(umi, colour_by = "batch", size_by = "detected", shape_by = "individual")

取个log 🥳 在这里我们用下之前做完log-transformation后的数据。 可以看到不同replicate, individual, sequencing depth,明显分开,形成一个个小的group。😘

代码语言:javascript
代码运行次数:0
复制
umi <- runPCA(umi, exprs_values = "logcounts_raw")
dim(reducedDim(umi, "PCA"))
plotPCA(umi, colour_by = "batch", size_by = "detected", shape_by = "individual")

Note! 这里我只做了log-transformation,大家在实际应用中还应纳入normalizationCPMTPM等方法,大家自行挑选吧。


5.3 质控后

我们来看一下过滤掉表达低的基因后有什么变化吧,当然也是要取log的。😂

代码语言:javascript
代码运行次数:0
复制
umi.qc <- runPCA(umi.qc, exprs_values = "logcounts_raw")
dim(reducedDim(umi.qc, "PCA"))
plotPCA(umi.qc, colour_by = "batch", size_by = "detected", shape_by = "individual")

这里可以看到NA19098.r2经过质控后,不再形成一组离群值了。 Note! 这里说明一下,scater包在计算PCA时,只用了top 500的基因,如果想改的话可以使用ntop


😉 嘿嘿,我们试一下用所有基因来做PCA试试。(^▽^)

代码语言:javascript
代码运行次数:0
复制
umi.qc <- runPCA(umi.qc, exprs_values = "logcounts_raw", ntop = nrow(umi.qc))
dim(reducedDim(umi.qc, "PCA"))
plotPCA(umi.qc, colour_by = "batch", size_by = "detected", shape_by = "individual")

6降维与可视化-tSNE

6.1 质控前

代码语言:javascript
代码运行次数:0
复制
set.seed(123)
umi <- runTSNE(umi, exprs_values = "logcounts_raw", perplexity = 130)
plotTSNE(umi, colour_by = "batch", size_by = "detected", shape_by = "individual")

Note! 这里补充一下perplexity一般取总细胞数/5后四舍五入取整。🤒

6.2 质控后

代码语言:javascript
代码运行次数:0
复制
set.seed(123)
umi.qc <- runTSNE(umi.qc, exprs_values = "logcounts_raw", perplexity = 130)
plotTSNE(umi.qc, colour_by = "batch", size_by = "detected", shape_by = "individual")

同样的,经过质控后,NA19098.r2也不再形成一组离群值了。


6.3 改下perplexity

我们在这里改一下perplexity,分别为10220,看看有什么变化。

代码语言:javascript
代码运行次数:0
复制
umi.qc <- runTSNE(umi.qc, exprs_values = "logcounts_raw", perplexity = 10)
plotTSNE(umi.qc, colour_by = "batch", size_by = "detected", shape_by = "individual")

umi.qc <- runTSNE(umi.qc, exprs_values = "logcounts_raw", perplexity = 220)
plotTSNE(umi.qc, colour_by = "batch", size_by = "detected", shape_by = "individual")

10

220


最后祝大家早日不卷!~


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信漫卷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1写在前面
  • 2用到的包
  • 3示例数据
  • 4高表达基因的可视化
    • 4.1 初步绘图
    • 4.2 过滤一下
    • 4.3 正式过滤
  • 5降维与可视化-PCA
    • 5.1 PCA
    • 5.2 质控前
    • 5.3 质控后
  • 6降维与可视化-tSNE
    • 6.1 质控前
    • 6.2 质控后
    • 6.3 改下perplexity
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档