在單細(xì)胞測(cè)序下游分析中宋欺,當(dāng)重點(diǎn)關(guān)注哪些基因在所有細(xì)胞平均表達(dá)顯著時(shí),可選取所選取的top基因進(jìn)行可視化胰伍。
0齿诞、scater包方法
在scater
R包里,有個(gè)函數(shù)plotHighestExprs
骂租,可自動(dòng)根據(jù)SingleCellExperiment對(duì)象數(shù)據(jù)進(jìn)行繪制祷杈。但有個(gè)缺點(diǎn)就是太慢了,具體操作如下
library(SingleCellExperiment)
sce <- SingleCellExperiment(
assays = list(counts = expr)
)
class(sce)
library(scater)
sce <- logNormCounts(sce)
p1 <- plotHighestExprs(sce, exprs_values = "logcounts",n=20)
#因?yàn)槌鰣D比較慢渗饮,故保存為本地后再觀察可提高效率
ggsave("./p1.pdf", plot = p1)
- 下面介紹一種手動(dòng)繪制箱圖的方法但汞,不僅出圖快,而且箱圖反映的信息也更多一些
1互站、獲取單細(xì)胞表達(dá)矩陣
具體可分為三種情況
- 直接獲得原始表達(dá)矩陣私蕾;
dim(expr)
expr[1:4,1:4]
- 從Seurat對(duì)象獲取胡桃;
scRNA = CreateSeuratObject(counts=expr)
class(scRNA)
#[1] "Seurat"
#attr(,"package")
#[1] "Seurat"
scRNA@assays$RNA@counts[1:4,1:4]
counts <- scRNA@assays$RNA@counts[1:4,1:4]
注意的是Seurat是以稀疏矩陣
dgCMatrix
格式儲(chǔ)存的
- 從SingleCellExpriment對(duì)象獲炔劝取;
sce <- SingleCellExperiment(
assays = list(counts = expr)
)
class(sce)
#[1] "SingleCellExperiment"
#attr(,"package")
#[1] "SingleCellExperiment"
assay(sce, "counts")[1:4,1:4]
counts <- assay(sce, "counts")[1:4,1:4]
2翠胰、原始表達(dá)矩陣標(biāo)準(zhǔn)化
最主要的原始是懊纳,不同細(xì)胞的文庫(kù)大小可能因測(cè)序過(guò)程存在差異。通過(guò)標(biāo)準(zhǔn)化亡容,可使基因在不同細(xì)胞的表達(dá)情況具有可比性。
hist(colSums(expr))
- 手動(dòng)對(duì)原始矩陣標(biāo)準(zhǔn)化
cell_lib <- colSums(expr) #計(jì)算細(xì)胞文庫(kù)
normalized <- t(t(expr)/cell_lib)*100
上述兩步也可合并成一步冤今,但可能跳的有點(diǎn)多闺兢,關(guān)鍵理解如下示例的第三步的除法:
(1)R語(yǔ)言的計(jì)算是向量化的;例如可以進(jìn)行向量間加減乘除運(yùn)算,具體規(guī)則屋谭,自己嘗試下理解更深刻脚囊;
(2)應(yīng)用到矩陣時(shí),可以理解為一行代表向量的一個(gè)元素桐磁。
# 最后乘100是將小數(shù)更友好得表示(百分比)
normalized[1:4,1:4]
- 如果是Seurat對(duì)象悔耘、SingleCellExperiment對(duì)象,則可以運(yùn)用相應(yīng)的函數(shù)計(jì)算我擂,再導(dǎo)出標(biāo)準(zhǔn)化矩陣衬以。
scRNA <- NormalizeData(scRNA)
scRNA@assays$RNA@data[1:4,1:4]
如下圖,結(jié)果與我們上面計(jì)算的有點(diǎn)不同校摩;
查看NormalizeData
幫助文檔可知看峻,其默認(rèn)方法是計(jì)算每個(gè)細(xì)胞中基因表達(dá)量與文庫(kù)的比值,然后乘一個(gè)size.factor(一般是10000)衙吩,最后進(jìn)行l(wèi)og轉(zhuǎn)換(加1互妓,避免0以及零點(diǎn)幾的無(wú)意義結(jié)果log1p
)
library("scater")
sce <- logNormCounts(sce)
assay(sce, "logcounts")[1:4,1:4]
如上圖結(jié)果,與之前兩種方法結(jié)果還不一樣坤塞。
scater包的
logNormCounts
的主要思路是首先平衡每個(gè)細(xì)胞的文庫(kù)大小冯勉,再計(jì)算相對(duì)于所在細(xì)胞文庫(kù)的比例。具體流程可見(jiàn)下圖的示例摹芙。綜上不同的方法灼狰,可得到不同的標(biāo)準(zhǔn)化結(jié)果。具體采用哪種方法瘫辩,可自己根據(jù)情況選擇伏嗜。
3、選取top基因伐厌,進(jìn)行箱圖可視化
- 這里我選擇了第一種承绸,自己簡(jiǎn)單進(jìn)行的標(biāo)準(zhǔn)化的結(jié)果。
#選擇平均在每個(gè)細(xì)胞表達(dá)最顯著的基因
most_exp <- sort(rowSums(normalized),T)[20:1] / ncol(expr)
# 可以想一下為什么設(shè)置[20:1]挣轨,與下面繪圖有關(guān)
- boxplot
boxplot(t(normalized[names(most_exp),]),
cex=.01, las=1, cex.axis = .5,
#分別設(shè)置離群點(diǎn)大小军熏,軸標(biāo)簽的大小及方向
xlab="% total count per cell",
col=scales::hue_pal()(20)[20:1], #配色
horizontal=TRUE)
- ggplot2
library(ggplot2)
library(reshape2)
newdata <- melt(t(normalized[names(most_exp),]))
head(newdata)
ggplot(data=newdata, aes(x=Var2, y=value, fill=Var2)) +
geom_boxplot(outlier.size = 0.5) +
coord_flip() +
theme(legend.position="none") +
labs(title="High expression gene", x="",
y="% total count per cell")
最后總結(jié)下:主要根據(jù)單細(xì)胞表達(dá)矩陣,繪制箱圖來(lái)可視化高表達(dá)基因卷扮。中間介紹了下如何讓同一基因在不同細(xì)胞表達(dá)具有可比性的幾種方法荡澎。
參考文章
https://nbisweden.github.io/workshop-scRNAseq/labs/compiled/seurat/seurat_01_qc.html