1写在前面
之前我们在质控
(QC
)篇介绍了Normalization
的重要性。😘
scRNAseq
是一个高维度的数据,相对比较复杂,不同细胞
,不同平台
,相差较多,所以library
大小差异较大,我们需要做一个Normalization
,常用方法包括:👇
UQ
, SF
, CPM
, RPKM
, FPKM
, TPM
。🤒
Note!
如果你使用的是Cufflinks
或者RSEM
进行定量。
恭喜你, 不需要normalization
,因为这类方法已经考虑到的library
大小不同的问题了。
2用到的包
rm(list = ls())
library(tidyverse)
library(SingleCellExperiment)
library(scater)
library(scran)
library(scRNA.seq.funcs)
3示例数据
这里我们用一下之前介绍的counts
文件和annotation
文件,然后通过SingleCellExperiment
创建SingleCellExperiment
格式的文件,并且经过初步过滤
,ID转换
等。
load("umi_umiqc.Rdata")
umi.qc
![alt](https://img-blog.csdnimg.cn/img_convert/a5f3f6f30f97b9113cd11e28aafb70fe.png)
4PCA-rawdata
这里我们用取过log
后的raw_counts
进行PCA
绘图。
umi.qc <- runPCA(umi.qc, exprs_values = "logcounts_raw")
plotPCA(umi.qc, colour_by = "batch", size_by = "detected", shape_by = "individual")
![alt](https://img-blog.csdnimg.cn/img_convert/7b0bfb516af3984b3d771b0db9b99810.png)
5PCA-CPM
这里我们先做一个CPM
,然后取log
,再做一下PCA
。 聚类明显要好一些了!😂
logcounts(umi.qc) <- log2(calculateCPM(umi.qc) + 1)
umi.qc <- runPCA(umi.qc)
plotPCA(umi.qc, colour_by = "batch", size_by = "detected", shape_by = "individual")
![alt](https://img-blog.csdnimg.cn/img_convert/f93e421ea9a7141dbc5704cb1b9450b3.png)
6RLE-rawdata
这里我们引入一个新的可视化方式,叫relative log expression (RLE) plots
。
先对raw_counts
做一个RLE plots
吧, 这里可以看出有明显批次效应
。
plotRLE(umi.qc, exprs_values = "logcounts_raw",colour_by = "batch") + ggtitle("RLE plot for logcounts_raw")
![alt](https://img-blog.csdnimg.cn/img_convert/a75f3e42c98568ecf9f05d772fa3568b.png)
7RLE-CPM
再看一下CPM
后的结果吧,非常明显!🥳
plotRLE(umi.qc, exprs_values = "logcounts",colour_by = "batch") + ggtitle("RLE plot for log2(CPM) counts")
![alt](https://img-blog.csdnimg.cn/img_convert/951b519290e1960d146be31eb1f7d32a.png)
8其他方法
基于CPM
的Normalization
方法,或者其他类似的方法,有一个前提,就是假设所有细胞含有相似数量的RNA
,但这有时候是不对的。🤒
这里我们介绍一下scran
包,通过反卷积
的方法进行Normalization
。🤗
8.1 聚类
qclust <- quickCluster(umi.qc, min.size = 30)
table(qclust)
![alt](https://img-blog.csdnimg.cn/img_convert/7cf8029b264f3de04054f131f4a932f0.png)
8.2 计算sizefactor
接着我们来计算一下sizeFactor
,用于后面的Normalization
。🧐
umi.qc <- computeSumFactors(umi.qc, clusters = qclust)
8.3 正式Normalization
开始log
和Normalization
。🤩
umi.qc <- logNormCounts(umi.qc)
8.4 可视化-PCA
umi.qc <- runPCA(umi.qc)
plotPCA(umi.qc, colour_by = "batch",size_by = "detected", shape_by = "individual")
![alt](https://img-blog.csdnimg.cn/img_convert/9f1dba3569758f24cbaaaa48df559b8a.png)
8.5 RLE plot
plotRLE(umi.qc, exprs_values = "logcounts",colour_by = "batch")
![alt](https://img-blog.csdnimg.cn/img_convert/8c9df4f72729fe5f0b4642773a4eaa26.png)
8.6 补充一下
如果你已经做过Normalization
,再做一次的话,这个size factors
会是负数,严重影响你的结果。🫠
我们可以check一下。✌️
summary(sizeFactors(umi.qc))
![alt](https://img-blog.csdnimg.cn/img_convert/987c9a85b35687b8959c9b5f77a30c55.png)
9downsampled data
这里再介绍一个scRNA.seq.funcs
包的Down_Sample_Matrix
函数。
采用了downsample
,降采样
的方法,具体概念不介绍了,大家自行google
。
9.1 PCA
logcounts(umi.qc) <- log2(Down_Sample_Matrix(counts(umi.qc)) + 1)
umi.qc <- runPCA(umi.qc)
plotPCA(umi.qc,colour_by = "batch",size_by = "detected", shape_by = "individual")
![alt](https://img-blog.csdnimg.cn/img_convert/5a1057e41ac91b02154ca5e2c6fab651.png)
9.2 RLE plot
plotRLE(umi.qc, exprs_values = "logcounts",colour_by = "batch")
![alt](https://img-blog.csdnimg.cn/img_convert/ab568669ec4035947ec3185e60aaba69.png)
![](https://img-blog.csdnimg.cn/img_convert/40cf1d8a070984b21909f53a838a081e.png)
需要示例数据的小伙伴,在公众号回复
scRNAseq
获取吧!点个在看吧各位~ ✐.ɴɪᴄᴇ ᴅᴀʏ 〰
本文由 mdnice 多平台发布