代碼分析 | 單細胞轉錄組clustering詳解

2021-01-12 生信寶典


我們在單細胞轉錄組分析中最為常用的聚類可視化即為tSNE和UMAP(Hemberg-lab單細胞轉錄組數據分析(十二)- Scater單細胞表達譜tSNE可視化),不過非線性可視化方法(例如t-SNE)通常會擾亂數據中的全局結構。diffusion maps能夠很好的表達局部和全局結構,但無法針對二維(2D)可視化進行優化,因為它們不是專門為可視化設計的。(其實即便如此,我現在也習慣性應用diffusion maps,可以說明更多的信息,雖然有時候確實是很難看。。。)

芬蘭CSC-IT科學中心主講的生物信息課程(https://www.csc.fi/web/training/-/scrnaseq)視頻,官網上還提供了練習素材以及詳細代碼,今天就來練習一下單細胞數據clustering的過程。


在本教程中,我們將研究不同的聚類scRNA-seq數據集方法以表徵不同的細胞亞群。

所需加載包

suppressMessages(require(tidyverse))
suppressMessages(require(Seurat))
suppressMessages(require(cowplot))
suppressMessages(require(scater))
suppressMessages(require(scran))
suppressMessages(require(igraph))

數據集

本教程使用的是來自發育中的小鼠胚胎的小細胞數據集[1]。該數據集已進行了預處理、創建了SingleCellExperiment對象並對細胞進行了注釋(cellassign:用於腫瘤微環境分析的單細胞注釋工具(9月Nature))。

數據下載連結:https://github.com/NBISweden/excelerate-scRNAseq/tree/master/session-clustering/session-clustering_files。

#加載表達矩陣
deng <- readRDS("session-clustering_files/deng-reads.rds")
deng

#查看細胞類型注釋
table(colData(deng)$cell_type2)

特徵選擇

第一步是決定在細胞聚類中使用哪些基因(Hemberg-lab單細胞轉錄組數據分析(十)- Scater基因評估和過濾)。單細胞RNA-seq可以分析細胞中的大量基因,大多數基因的表達不足以提供有意義的信號並且通常受到技術噪音的幹擾,其中可能會添加一些不必要的信號,從而使生物變異模糊,而基因過濾還可以加快下遊分析的計算時間。

首先看一下所有基因的表達平均值和方差。哪些基因似乎不太重要,哪些可能是技術噪音?

#計算整個細胞的基因平均值
gene_mean <- rowMeans(counts(deng))

#計算整個細胞的基因方差
gene_var <- rowVars(counts(deng))

#ggplot plot
library(tidyverse)
gene_stat_df <- tibble(gene_mean,gene_var)
ggplot(data=gene_stat_df ,aes(x=log(gene_mean), y=log(gene_var))) + geom_point(size=0.5) + theme_classic()

濾除低豐度基因

低豐度基因大多無信息,不能代表數據的生物學差異。它們通常是由技術噪音(例如dropout)導致,在下遊分析中的存在通常會導致準確性降低,因為它們會干擾將要使用的某些統計模型,並且會毫無意義地增加計算時間,這在處理非常大的數據時可能至關重要。

abundant_genes <- gene_mean >= 0.5 #去除低豐度基因
# 繪製基因表達分布
hist(log10(gene_mean), breaks=100, main="", col="grey80",
xlab=expression(Log[10]~"average count"))
abline(v=log10(0.5), col="red", lwd=2, lty=2)

#在SingleCellExperiment Object中去除低豐度基因
deng <- deng[abundant_genes,]
dim(deng)

過濾在很少細胞中表達的基因

我們還可以過濾少量細胞中的某些基因。此過程將刪除一些在一兩個細胞中高度表達的異常基因。這些基因不需要進一步分析,因為它們主要來自人為的不規則擴增。值得注意的是,當分析的目的是檢測數據中非常稀有的亞群時,我們可能不希望進行此過程。

#計算每個非零表達基因的數量
numcells <- nexprs(deng, byrow=TRUE)

#過濾不到5個細胞中檢測到的基因
numcells2 <- numcells >= 5
deng <- deng[numcells2,]
dim(deng)

檢測高變的基因

highly variable gene(HVG)假設基因在細胞之間的表達差異很大,則其中的一些差異是由於細胞之間的生物學差異而不是技術噪音引起的。但是,基因的平均表達與不同細胞reads計數的差異之間存在正相關關係。如果僅保留高變異基因,將保留許多在每個細胞中表達但不能代表生物學變異的高表達管家基因。因此為了正確識別HVG,必須糾正此關係。

我們可以使用下列任一方法來確定高變基因。

選項1 :將變異係數建模為平均值的函數。

# out <- technicalCV2(deng, spike.type=NA, assay.type= "counts")
# out$genes <- rownames(deng)
# out$HVG <- (out$FDR<0.05)
# as_tibble(out)
#
# # 繪製高變基因
# ggplot(data = out) + geom_point(aes(x=log2(mean), y=log2(cv2), color=HVG), size=0.5) + geom_point(aes(x=log2(mean), y=log2(trend)), color="red", size=0.1)
#
# ## 將HVG存入metadata
# metadata(deng)$hvg_genes <- rownames(deng)[out$HVG]


選項2 :根據平均數對生物成分的方差建模。

首先,我們估算每個基因表達的差異,然後將差異分解為生物學和技術成分。然後將HVGs鑑定為具有最大生物學成分的基因。這避免了優先排序對由於技術因素(例如在RNA捕獲和文庫製備過程中的採樣噪聲)而高度可變的基因。詳細內容查看scran vignette:https://bioconductor.org/packages/devel/bioc/vignettes/scran/inst/doc/scran.html#5_variance_modelling

fit <- trendVar(deng, parametric=TRUE, use.spikes = FALSE)
dec <- decomposeVar(deng, fit)
dec$HVG <- (dec$FDR<0.00001)
hvg_genes <- rownames(dec[dec$FDR < 0.00001, ])

# plot highly variable genes
plot(dec$mean, dec$total, pch=16, cex=0.6, xlab="Mean log-expression",
ylab="Variance of log-expression")
o <- order(dec$mean)
lines(dec$mean[o], dec$tech[o], col="dodgerblue", lwd=2)
points(dec$mean[dec$HVG], dec$total[dec$HVG], col="red", pch=16)


## save the decomposed variance table and hvg_genes into metadata for safekeeping
metadata(deng)$hvg_genes <- hvg_genes
metadata(deng)$dec_var <- dec

降維

由於高頻率的噪聲(技術和生物學的)和大量的維度(即基因)導致聚類在計算上具有一定的困難,因此需要通過應用降維方法(例如PCA、tSNE和UMAP)解決這些問題。

#PCA (選擇組分數量)
deng <- runPCA(deng, method = "irlba",
ncomponents = 30,
feature_set = metadata(deng)$hvg_genes)

#繪製不同PC對變異解釋的差異
X <- attributes(deng@reducedDims$PCA)
plot(X$percentVar~c(1:30), type="b", lwd=1, ylab="Percentage variance" , xlab="PCs" , bty="l" , pch=1)


畫PCA plot(PC1 vs. PC2) :

plotReducedDim(deng, "PCA", colour_by = "cell_type2")


繪製tSNE圖時需要注意tSNE是隨機方法。每次運行它時都會得到略有不同的結果。為了方便起見可以設置隨機種子,這樣就可以獲得相同的結果。

#tSNE
deng <- runTSNE(deng,
perplexity = 30,
feature_set = metadata(deng)$hvg_genes,
set.seed = 1)

plotReducedDim(deng, "TSNE", colour_by = "cell_type2")

聚類層次聚類

#計算距離(默認值:歐幾裡得距離)
distance_eucledian <- dist(t(logcounts(deng)))

#使用ward linkage執行分層聚類
ward_hclust_eucledian <- hclust(distance_eucledian,method = "ward.D2")
plot(ward_hclust_eucledian, main = "dist = eucledian, Ward linkage")


我反正是啥也看不見。。。但是看起來層次分類蠻明顯的。。。

現在,設置樹狀圖參數生成10個亞群,並在PCA圖上繪製聚類標籤。

#設置樹狀圖參數生成10個亞群
cluster_hclust <- cutree(ward_hclust_eucledian,k = 10)
colData(deng)$cluster_hclust <- factor(cluster_hclust)

plot_grid(plotReducedDim(deng, "PCA", colour_by = "cluster_hclust"),
plotReducedDim(deng, "PCA", colour_by = "cell_type2"))


在tSNE圖上繪製聚類標籤。

plot_grid(plotReducedDim(deng, "TSNE", colour_by = "cluster_hclust"),
plotReducedDim(deng, "TSNE", colour_by = "cell_type2"))


我們嘗試另一種距離參數。常用的距離參數是1-correlation。

# 計算距離(1 - correlation)
C <- cor(logcounts(deng))

# Run clustering based on the correlations, where the distance will
# be 1-correlation, e.g. higher distance with lower correlation.
distance_corr <- as.dist(1-C)

#使用ward linkage進行分層聚類
ward_hclust_corr <- hclust(distance_corr,method="ward.D2")
plot(ward_hclust_corr, main = "dist = 1-corr, Ward linkage")


再次設置樹狀圖參數生成10個亞群,並在PCA圖上繪製聚類標籤。

#設置樹狀圖參數生成10個亞群
cluster_hclust <- cutree(ward_hclust_corr,k = 10)
colData(deng)$cluster_hclust <- factor(cluster_hclust)

plot_grid(plotReducedDim(deng, "PCA", colour_by = "cluster_hclust"),
plotReducedDim(deng, "PCA", colour_by = "cell_type2"))


除了更改距離度量,我們還可以更改連結方法 —— 使用完全連結,而不是使用Ward的方法。

# 計算距離 (default: Eucledian distance)
distance_eucledian <- dist(t(logcounts(deng)))

#使用ward linkage進行分層聚類
comp_hclust_eucledian <- hclust(distance_eucledian,method = "complete")
plot(comp_hclust_eucledian, main = "dist = eucledian, complete linkage")


再一次,切割樹狀圖以生成10個細胞亞群,並在PCA圖上繪製亞群標籤。

#設置樹狀圖參數以生成10個細胞亞群
cluster_hclust <- cutree(comp_hclust_eucledian,k = 10)
colData(deng)$cluster_hclust <- factor(cluster_hclust)

plot_grid(plotReducedDim(deng, "PCA", colour_by = "cluster_hclust"),
plotReducedDim(deng, "PCA", colour_by = "cell_type2"))

tSNE + Kmeans

# 在tSNE坐標上執行kmeans算法
deng_kmeans <- kmeans(x = deng@reducedDims$TSNE,centers = 10)
TSNE_kmeans <- factor(deng_kmeans$cluster)
colData(deng)$TSNE_kmeans <- TSNE_kmeans
#Compare with ground truth
plot_grid(plotTSNE(deng, colour_by = "TSNE_kmeans"),
plotTSNE(deng, colour_by = "cell_type2"))

Graph Based Clustering

#k=5
#The k parameter defines the number of closest cells to look for each cells
SNNgraph_k5 <- buildSNNGraph(x = deng, k=5)
SNNcluster_k5 <- cluster_louvain(SNNgraph_k5)
colData(deng)$SNNcluster_k5 <- factor(SNNcluster_k5$membership)
p5<- plotPCA(deng, colour_by="SNNcluster_k5")+ guides(fill=guide_legend(ncol=2))

# k30
SNNgraph_k30 <- buildSNNGraph(x = deng, k=30)
SNNcluster_k30 <- cluster_louvain(SNNgraph_k30)
colData(deng)$SNNcluster_k30 <- factor(SNNcluster_k30$membership)
p30 <- plotPCA(deng, colour_by="SNNcluster_k30")

#plot the different clustering.
plot_grid(p5+ guides(fill=guide_legend(ncol=1)),p30)

Session info

sessionInfo()

## R version 3.5.3 (2019-03-11)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 17763)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=English_United States.1252
## [2] LC_CTYPE=English_United States.1252
## [3] LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United States.1252
##
## attached base packages:
## [1] parallel stats4 stats graphics grDevices utils datasets
## [8] methods base
##

[1]:https://science.sciencemag.org/content/343/6167/193

撰文:Tiger
校對:生信寶典

你可能還想看


往期精品(點擊圖片直達文字對應教程)


後臺回復「生信寶典福利第一波」或點擊閱讀原文獲取教程合集


相關焦點

  • 希望組正式推出納米孔單細胞全長轉錄組測序分析服務
    單細胞RNA測序(scRNA-Seq)是分析細胞間異質性的一項關鍵技術,但是基於短讀長的單細胞測序缺乏識別全長轉錄本的能力,不能開展更深入的細胞間異質性研究,例如可變剪接、基因融合事件等。因此,結合了長讀長測序技術的單細胞全長轉錄組備受矚目。
  • 單細胞轉錄組整合分析——seurat包
    Seurat是一個分析轉錄組數據的R包,我們之前的推文對其進行過描述:
  • 萬字長文 | 單細胞轉錄組分析最佳思路綜述
    本文將詳細介紹單細胞轉錄組數據分析的步驟,包括預處理(質控、歸一化標準化、數據矯正、挑選基因、降維)以及細胞和基因層面的下遊分析。並且作者將整個流程應用在了一個公共數據集作為展示(詳細說明在:https://www.github.com/theislab/single-cell-tutorial),目的是幫助新入坑用戶建立一個知識體系,已入坑用戶更新知識體系。
  • 單細胞轉錄組高級分析四:scRNA數據推斷CNV
    上期專題我們介紹了單細胞轉錄組數據的基礎分析
  • 蔡軍/張江開發出基於深度學習的單細胞轉錄組分析模型
    單細胞轉錄組作為單個細胞的特徵,可更加精確地定義細胞的類型。常規的基於單細胞轉錄組的分類方法首先是進行無監督的聚類,然後根據每個集群(Cluster)特異表達的細胞標記基因來對集群進行標註。雖然基於無監督的分類方法更容易發現新細胞類型,但是人工標註的過程費時費力。
  • 科研人員開發出基於深度學習的單細胞轉錄組分析模型
    單細胞轉錄組作為單個細胞的特徵,可更加精確地定義細胞的類型。常規的基於單細胞轉錄組的分類方法首先是進行無監督的聚類,然後根據每個集群(Cluster)特異表達的細胞標記基因來對集群進行標註。雖然基於無監督的分類方法更容易發現新細胞類型,但是人工標註的過程費時費力。目前已有的基於監督學習的自動分類方法,大部分無法兼顧到方法的可解釋性以及新細胞類型的發現。
  • 免費領取 | 單細胞轉錄組測序,市面罕見的單細胞技術書籍
    前陣子,小編發現了一篇單細胞測序的文章,看到之後震驚了!據統計,單細胞測序相關文章的單月平均影響因子達到了20.4!由此可見其影響之大,而單細胞轉錄組測序的文章已經發表很多了,現在再不應用就趕不上熱度了! 為響應熱潮,滿足同學們的需求,解螺旋和聯川生物一起給大家送出這本《單細胞轉錄組測序》實體書。
  • 神助攻帶你「撩」起單細胞轉錄組
    帶著無比喜悅,無比激動的心情,小編用幾個數字給您炫一下10x Genomics這一神助攻應用於單細胞轉錄組測序的六大優勢! 那麼,10x Genomics平臺應用於單細胞轉錄組的研究究竟有哪些?看這裡,有案例,有真相!
  • 科學家繪製水稻根單細胞轉錄組圖譜—新聞—科學網
    對於根尖這一重要的高異質性器官,傳統的高通量測序無法檢測不同細胞型的轉錄組差異。 12月19日,中國農業科學院生物技術研究所谷曉峰課題組與德國海德堡大學Jan U. Lohmann課題組合作,在《分子植物》在線發表研究論文。
  • Nat Biotechnol:科學家發現能準確高效進行單細胞轉錄組特性分析的...
    2020年4月9日 訊 /生物谷BIOON/ --為了確保單細胞RNA測序能夠使用最好的方法,日前研究人員對13種方法進行了基準性的測試,一項刊登在國際雜誌Nature Biotechnology上的研究報告中,來自西班牙的科學家們通過研究發現,日本理化所開發的Quartz-seq2方法或許是進行單細胞RNA測序的最佳手段。
  • 單細胞轉錄組+蛋白組+bulk RNAseq!多組學繪製全面肺衰老圖譜
    本文作者使用單細胞轉錄組學和基於蛋白質組學的質譜分析(mass spectrometry-based proteomics)來量化年輕和年老小鼠肺部30種細胞類型的細胞活性狀態變化。作者發現,衰老會導致轉錄噪聲增加,並且放鬆對表觀遺傳的控制。作者還觀察了衰老對於細胞類型特異性的影響,發現2型肺細胞和脂肪成纖維細胞膽固醇合成的增加,以及呼吸道上皮細胞的改變,是肺部老化的幾大標誌。
  • 單細胞轉錄組+蛋白組+bulk RNAseq!多組學繪製全面肺衰老圖譜
    本文作者使用單細胞轉錄組學和基於蛋白質組學的質譜分析(mass spectrometry-based proteomics)來量化年輕和年老小鼠肺部30種細胞類型的細胞活性狀態變化。作者發現,衰老會導致轉錄噪聲增加,並且放鬆對表觀遺傳的控制。作者還觀察了衰老對於細胞類型特異性的影響,發現2型肺細胞和脂肪成纖維細胞膽固醇合成的增加,以及呼吸道上皮細胞的改變,是肺部老化的幾大標誌。
  • 【學術前沿】張世華課題組提出解決單細胞轉錄組數據高度缺失及...
    然而,在單細胞層次上,轉錄組的隨機波動會遠遠大於細胞群體的平均行為,由於每個細胞的mRNA拷貝起始量較低以及測序技術原因,單細胞轉錄組測序數據通常存在drop-out現象,即很多表達的mRNA沒有被捕捉到,導致檢測出來的基因表達量為零或者接近零。
  • 靶向治療誘導的肺癌進化:單細胞轉錄組分析
    單細胞轉錄組測序是研究複雜生物系統異質性的有效方法。2018年Bernard Thienpont帶領的研究團隊通過對正常與癌變樣本近10萬個單細胞的研究,創建了第一個完整的肺癌細胞圖譜,包括52個不同亞類的基質細胞,說明了肺癌微環境遠比我們想像的複雜(Lambrechts, D, 2018)。由於獲得高質量的晚期肺癌的樣本非常困難,對晚期肺癌的單細胞研究還很少。
  • ...中德科學家繪製單子葉植物水稻首個根組織單細胞解析度轉錄組圖譜
    2013年,Nature Methods發表了社論文章,單細胞測序技術成為當年度最受關注的技術。2019年,Nature Methods再發社論,將單細胞多組學分析選為「Method of the Year 2019」。
  • 微陣列空間轉錄組與單細胞測序揭示胰腺癌結構
    微陣列空間轉錄組與單細胞測序揭示胰腺癌結構 作者:小柯機器人 發布時間:2020/1/16 10:36:33 美國紐約大學Itai Yanai團隊利用基於微陣列的空間轉錄組學和單細胞RNA測序
  • Nat Immuno | 單細胞轉錄組測序發現新的淋系祖細胞
    多個單細胞轉錄組測序研究也在轉錄組層面揭示了類似的造血幹細胞異質性【2】。然而,如何發現新的基因標記,並且對具有不同基因表達譜的細胞類群進行分離和功能鑑定依舊是當前研究的重點。該研究首先利用自研的單細胞測序方法分析了小鼠造血幹細胞(HSC)轉錄組的異質性,並且鑑定了Dach1表達下調作為標記早期淋系分化的標誌事件。
  • 高歌團隊發布單細胞轉錄組數據檢索新方法和參考資料庫
    本文來源:北大生科作為細胞異質性研究的重要工具,近年來單細胞轉錄組測序技術蓬勃發展,並積累了大量研究數據。然而,精確的單細胞轉錄組數據檢索和注釋需要克服兩個挑戰:一、數據集之間的批次效應(batch effect)會顯著影響細胞檢索的可靠性;二、目前缺少跨物種和平臺、具有高質量注釋的單細胞轉錄組資料庫。
  • Genome Biology丨世界首個單細胞轉錄組圖譜
    既往有關人體樣本單細胞測序的研究大多局限於某些特定疾病或器官,目前為止,跨越正常單一成年個體多個器官、全面系統的單細胞轉錄組研究仍未見報導。教授和中山大學腫瘤防治中心貝錦新教授合作在Genome Biology雜誌上發表文章Single-cell transcriptome profiling of an adult human cell atlas of 15 major organs,成功繪製世界首個單一成年人15個主要器官組織的單細胞轉錄組圖譜
  • 靶向單細胞多組學方法,可在低深度下同時檢測蛋白表達和低豐度轉錄組
    通常,轉錄組的表達水平要比蛋白質低得多,而蛋白質的動態表達範圍則較大,拷貝數跨度約為6-7個數量級,轉錄本拷貝數跨度約為2個數量級。平行檢測蛋白質表達和轉錄組數據方法的開發,如CITE-seq、REAP-seq,解決了僅評估轉錄組所固有的一些限制,但也幾乎使每個單細胞的測序深度增加了一倍。