劉小澤寫于2020.7.21
為何取名叫“交響樂”力惯?因為單細胞分析就像一個大樂團,需要各個流程的協(xié)同配合
單細胞交響樂1-常用的數(shù)據(jù)結構SingleCellExperiment
單細胞交響樂2-scRNAseq從實驗到下游簡介
單細胞交響樂3-細胞質(zhì)控
單細胞交響樂4-歸一化
單細胞交響樂5-挑選高變化基因
單細胞交響樂6-降維
單細胞交響樂7-聚類分群
單細胞交響樂8-marker基因檢測
單細胞交響樂9-細胞類型注釋
單細胞交響樂9-細胞類型注釋
單細胞交響樂10-數(shù)據(jù)集整合后的批次矯正
單細胞交響樂11-多樣本間差異分析
單細胞交響樂12-檢測Doublet
單細胞交響樂13-細胞周期推斷
單細胞交響樂14-細胞軌跡推斷
單細胞交響樂15-scRNA與蛋白豐度信息結合
單細胞交響樂16-處理大型數(shù)據(jù)
單細胞交響樂17-不同單細胞R包的數(shù)據(jù)格式相互轉換
單細胞交響樂18-實戰(zhàn)一 Smart-seq2
單細胞交響樂19-實戰(zhàn)二 STRT-Seq
單細胞交響樂20-實戰(zhàn)三 10X 未過濾的PBMC數(shù)據(jù)
單細胞交響樂21-實戰(zhàn)三 批量處理并整合多個10X PBMC數(shù)據(jù)
單細胞交響樂22-實戰(zhàn)五 CEL-seq2
單細胞交響樂23-實戰(zhàn)六 CEL-seq
單細胞交響樂24-實戰(zhàn)七 SMARTer 胰腺細胞
單細胞交響樂25-實戰(zhàn)八 Smart-seq2 胰腺細胞
單細胞交響樂26-實戰(zhàn)九 胰腺細胞數(shù)據(jù)整合
1 前言
前面的種種都是作為知識儲備奴璃,但是不實戰(zhàn)還是記不住前面的知識
這是第十個實戰(zhàn)練習
數(shù)據(jù)來自Grun et al. 2016的小鼠造血干細胞 haematopoietic stem cell (HSC) ,使用的技術是CEL-seq
數(shù)據(jù)準備
library(scRNAseq)
sce.grun.hsc <- GrunHSCData(ensembl=TRUE)
sce.grun.hsc
# class: SingleCellExperiment
# dim: 21817 1915
# metadata(0):
# assays(1): counts
# rownames(21817): ENSMUSG00000109644
# ENSMUSG00000007777 ... ENSMUSG00000055670
# ENSMUSG00000039068
# rowData names(3): symbol chr originalName
# colnames(1915): JC4_349_HSC_FE_S13_
# JC4_350_HSC_FE_S13_ ...
# JC48P6_1203_HSC_FE_S8_
# JC48P6_1204_HSC_FE_S8_
# colData names(2): sample protocol
# reducedDimNames(0):
# altExpNames(0):
table(sce.grun.hsc$sample)
#
# JC20 JC21 JC26 JC27 JC28 JC30 JC32
# 87 96 85 91 80 96 93
# JC35 JC36 JC37 JC39 JC4 JC40 JC41
# 96 80 87 93 84 96 94
# JC43 JC44 JC45 JC46 JC48P4 JC48P6 JC48P7
# 92 94 90 96 95 96 94
ID轉換
library(AnnotationHub)
ens.mm.v97 <- AnnotationHub()[["AH73905"]]
anno <- select(ens.mm.v97, keys=rownames(sce.grun.hsc),
keytype="GENEID", columns=c("SYMBOL", "SEQNAME"))
# 這里全部對應
> sum(is.na(anno$SYMBOL))
[1] 0
> sum(is.na(anno$SEQNAME))
[1] 0
# 接下來只需要匹配順序即可
rowData(sce.grun.hsc) <- anno[match(rownames(sce.grun.hsc), anno$GENEID),]
sce.grun.hsc
## class: SingleCellExperiment
## dim: 21817 1915
## metadata(0):
## assays(1): counts
## rownames(21817): ENSMUSG00000109644 ENSMUSG00000007777 ...
## ENSMUSG00000055670 ENSMUSG00000039068
## rowData names(3): GENEID SYMBOL SEQNAME
## colnames(1915): JC4_349_HSC_FE_S13_ JC4_350_HSC_FE_S13_ ...
## JC48P6_1203_HSC_FE_S8_ JC48P6_1204_HSC_FE_S8_
## colData names(2): sample protocol
## reducedDimNames(0):
## altExpNames(0):
2 質(zhì)控
依然是備份一下城豁,把unfiltered數(shù)據(jù)主要用在質(zhì)控的探索上
unfiltered <- sce.grun.hsc
發(fā)現(xiàn)這個數(shù)據(jù)既沒有MT也沒有ERCC
grep('MT',rowData(sce.grun.hsc)$SEQNAME)
# integer(0)
能用的數(shù)據(jù)只有其中的protocol
了苟穆,它表示細胞提取方法
table(sce.grun.hsc$protocol)
#
# micro-dissected cells
# 1546
# sorted hematopoietic stem cells
# 369
# 再看一下各個樣本與提取方法的對應關系
table(sce.grun.hsc$protocol,sce.grun.hsc$sample)
根據(jù)背景知識,大部分顯微操作(micro-dissected)得到的細胞很多質(zhì)量都較低唱星,和我們的質(zhì)控假設相違背雳旅,于是這里就不把它們納入過濾條件
library(scater)
stats <- perCellQCMetrics(sce.grun.hsc)
# 只用sorted hematopoietic stem cells 計算過濾條件
qc <- quickPerCellQC(stats, batch=sce.grun.hsc$protocol,
subset=grepl("sorted", sce.grun.hsc$protocol))
colSums(as.matrix(qc))
## low_lib_size low_n_features discard
## 465 482 488
sce.grun.hsc <- sce.grun.hsc[,!qc$discard]
做個圖看看
colData(unfiltered) <- cbind(colData(unfiltered), stats)
unfiltered$discard <- qc$discard
gridExtra::grid.arrange(
plotColData(unfiltered, y="sum", x="sample", colour_by="discard",
other_fields="protocol") + scale_y_log10() + ggtitle("Total count") +
facet_wrap(~protocol),
plotColData(unfiltered, y="detected", x="sample", colour_by="discard",
other_fields="protocol") + scale_y_log10() +
ggtitle("Detected features") + facet_wrap(~protocol),
ncol=1
)
可以看到,大多數(shù)的顯微操作技術得到的細胞文庫都比較小间聊,相比于細胞分選方法攒盈,它在提取過程中對細胞損傷較大
3 歸一化
使用去卷積方法
library(scran)
set.seed(101000110)
clusters <- quickCluster(sce.grun.hsc)
sce.grun.hsc <- computeSumFactors(sce.grun.hsc, clusters=clusters)
sce.grun.hsc <- logNormCounts(sce.grun.hsc)
4 找高變異基因
這里沒有指定任何的批次,因為想保留這兩種技術產(chǎn)生的任何差異
set.seed(00010101)
dec.grun.hsc <- modelGeneVarByPoisson(sce.grun.hsc)
top.grun.hsc <- getTopHVGs(dec.grun.hsc, prop=0.1)
做個圖
plot(dec.grun.hsc$mean, dec.grun.hsc$total, pch=16, cex=0.5,
xlab="Mean of log-expression", ylab="Variance of log-expression")
curfit <- metadata(dec.grun.hsc)
curve(curfit$trend(x), col='dodgerblue', add=TRUE, lwd=2)
看到這個線有點“太平緩”哎榴,和之前見過的都不一樣型豁,感覺“中間少了一個峰”。這是因為細胞中的基因表達量都比較低,差別也不大【大家一起貧窮,于是貧富差距很小】方椎,所以在縱坐標(衡量變化的方差)上體現(xiàn)不出來差距鳞仙,也就導致了擬合的曲線不會有“峰”
可能會想,那為什么不是大家表達量都很高呢(大家都很富有冤狡,貧富差距不是也很小嗎)?因為橫坐標可以看到鹿霸,從0-3.5泵喘,這個范圍對于表達量來說確實很小泪电,之前做的圖有的都大于10、15
5 降維聚類
降維就采取最基礎的方式:
set.seed(101010011)
sce.grun.hsc <- denoisePCA(sce.grun.hsc, technical=dec.grun.hsc, subset.row=top.grun.hsc)
sce.grun.hsc <- runTSNE(sce.grun.hsc, dimred="PCA")
# 檢查PC的數(shù)量
ncol(reducedDim(sce.grun.hsc, "PCA"))
## [1] 9
聚類
snn.gr <- buildSNNGraph(sce.grun.hsc, use.dimred="PCA")
colLabels(sce.grun.hsc) <- factor(igraph::cluster_walktrap(snn.gr)$membership)
table(colLabels(sce.grun.hsc))
##
## 1 2 3 4 5 6 7 8 9 10 11 12
## 259 148 221 103 177 108 48 122 98 63 62 18
作圖
short <- ifelse(grepl("micro", sce.grun.hsc$protocol), "micro", "sorted")
gridExtra:::grid.arrange(
plotTSNE(sce.grun.hsc, colour_by="label"),
plotTSNE(sce.grun.hsc, colour_by=I(short)),
ncol=2
)
由于沒有去除兩個技術批次的差異纪铺,所以這里分的很開
6 找marker基因
markers <- findMarkers(sce.grun.hsc, test.type="wilcox", direction="up",
row.data=rowData(sce.grun.hsc)[,"SYMBOL",drop=FALSE])
檢查一下cluster6的marker基因
chosen <- markers[['6']]
best <- chosen[chosen$Top <= 10,]
length(best)
# [1] 16
# 將cluster6與其他clusters對比的AUC結果提取出來
aucs <- getMarkerEffects(best, prefix="AUC")
rownames(aucs) <- best$SYMBOL
library(pheatmap)
pheatmap(aucs, color=viridis::plasma(100))
看到溶菌酶相關基因(LYZ家族)相速、Camp、 Lcn2鲜锚、 Ltf 都上調(diào)突诬,表明cluster6可能是神經(jīng)元起源細胞
歡迎關注我們的公眾號~_~
我們是兩個農(nóng)轉生信的小碩,打造生信星球芜繁,想讓它成為一個不拽術語旺隙、通俗易懂的生信知識平臺。需要幫助或提出意見請后臺留言或發(fā)送郵件到jieandze1314@gmail.com