重生之我在劍橋大學學習單細胞RNA-seq分析——4. 使用Bioconductor進行scRNA-seq分析(1)

問題
如何將單細胞數(shù)據(jù)導入 R?
不同類型的數(shù)據(jù)/信息(例如細胞信息、基因信息等)是如何存儲和操作的?
如何獲得細胞和基因的基本匯總指標并相應(yīng)地過濾數(shù)據(jù)?
如何直觀地探索這些指標?
學習目標:
了解單細胞數(shù)據(jù)如何存儲在Bioconductor SingleCellExperiment對象中。
從處理后的scRNA-seq count數(shù)據(jù)創(chuàng)建一個SingleCellExperiment對象。
訪問SingleCellExperiment對象的不同部分,例如rowData、colDataanalysis。
從矩陣中獲取幾個匯總指標,以匯總跨細胞或基因的信息。
通過構(gòu)建邏輯向量并使用[運算符對對象進行子集化,將基本過濾器應(yīng)用于數(shù)據(jù)。
直接從存儲在SingleCellExperiment對象中的數(shù)據(jù)生成基本的數(shù)據(jù)可視化。

在本章中,我們將開始對分析中使用到的核心包進行實際介紹。
我們將使用芝加哥大學Yoav Gilad實驗室中來自三個不同個體(Tung et al. 2017)的誘導多能干細胞數(shù)據(jù)集。實驗在Fluidigm C1平臺上進行,使用唯一分子標識符(UMI)進行定量。數(shù)據(jù)文件位于工作目錄中的data/tung文件夾中。原始文件位于GEO中GSE77288(GSE77288_molecules-raw-single-per-sample.txt.gz)。

注意:
這些數(shù)據(jù)缺少以下幾點:
稀疏矩陣。由于使用的是tung數(shù)據(jù)集,因此我們只得到一個常規(guī)矩陣。如果我們決定使用10x數(shù)據(jù)集,那么引入它可能會更容易。
rowData - 沒有包含任何基因注釋,盡管也可以輕松地包含它,例如有關(guān)哪些基因是核基因或線粒體基因的信息。

4.1 scRNA-seq分析軟件包
有幾種軟件包(或軟件“生態(tài)”)可用于單細胞分析。在本課程中,我們將重點介紹Bioconductor項目中的一組軟件包。
Bioconductor是專為生物分析開發(fā)的R軟件包庫。它擁有一系列出色的scRNA-seq分析軟件包,這些軟件包在《使用Bioconductor進行單細胞分析》一書中進行了總結(jié)。Bioconductor的優(yōu)點在于它對包提交有嚴格的要求,包括在每個平臺上的安裝以及帶有教程的完整文檔,解釋如何使用該包。Bioconductor還鼓勵使用標準數(shù)據(jù)結(jié)構(gòu)/類和編碼風格/命名約定,以便理論上可以將包和分析組合成大型流程或工作流。具體來說,對于scRNA-seq,使用的標準數(shù)據(jù)對象稱為SingleCellExperiment,我們將在本節(jié)中詳細了解它。
Seurat是另一個流行的R軟件包,它使用自己的數(shù)據(jù)對象Seurat。Seurat軟件包包含大量函數(shù)和出色的文檔。由于其受歡迎程度,如今其他幾個軟件包也與Seurat對象兼容。雖然這不是本課程的重點,但我們有一個部分說明了使用此包的分析工作流程:使用Seurat分析scRNA-seq。
Scanpy是一個流行的scRNA-seq分析的python包,它將數(shù)據(jù)存儲在名為AnnData的對象中。與Seurat和Bioconductor類似,開發(fā)人員可以為與AnnData包兼容的主包編寫擴展,從而允許社區(qū)擴展其功能。
雖然我們主要關(guān)注Bioconductor包,但我們將在本課程中學習的概念適用于其他替代方案,主要變化的是所使用的確切語法。
4.2 SingleCellExperiment對象
表達數(shù)據(jù)通常存儲在定量后的特征x細胞表達矩陣中。在scRNA-seq分析中,我們通常從count矩陣開始分析,代表每個細胞中特征的read/UMI的數(shù)量,特征可以是基因、異構(gòu)體或外顯子等。通常,分析是在基因?qū)用孢M行的,這也是我們在本課程中將重點關(guān)注的。
除了定量矩陣之外,還可能有每個基因的信息(例如它們的基因組位置、它們屬于哪種基因、它們的長度等)以及細胞的信息(例如,其來源組織、患者捐贈者、處理批次、疾病狀況、治療暴露等)。
我們還可以根據(jù)原始count數(shù)據(jù)生成其他矩陣,例如標準化count矩陣。最后,由于單細胞實驗數(shù)據(jù)維度非常高,我們經(jīng)常采用降維技術(shù)來捕捉較低維度數(shù)據(jù)中的主要變化。
SingleCellExperiment(簡稱SCE)是一個以同步方式存儲所有這些信息的對象。可以通過特殊函數(shù)訪問該對象的不同部分:

  • 可以通過assayassays函數(shù)來訪問一個或多個表達矩陣。
  • 可以使用rowData函數(shù)獲取有關(guān)基因的信息。
  • 可以通過colData函數(shù)訪問有關(guān)細胞的信息。

其中一些數(shù)據(jù)存儲在具有相似名稱的插槽中,可以通過@運算符訪問,但使用訪問器函數(shù)被認為是一種更好的編程風格。

SingleCellExperiment對象。特征(例如基因、異構(gòu)體或外顯子)存儲為行,其元數(shù)據(jù)位于rowData中。細胞以列的形式存儲,其元數(shù)據(jù)存儲在colData中。表達矩陣存儲在assay中。細胞的降維投影存儲在reducedDim中。

4.2.1 創(chuàng)建SCE對象
測試數(shù)據(jù)下載地址:https://singlecellcourse.cog.sanger.ac.uk/index.html?shared=data/
首先,根據(jù)數(shù)據(jù)創(chuàng)建一個SingleCellExperiment對象。data/tung中有兩個文件:

  • counts.txt—— 一個制表符分隔的文本文件,包含每個基因/細胞的基因計數(shù)。
  • annotation.txt—— 帶有細胞注釋的制表符分隔的文本文件。

使用read.table()函數(shù)將它們讀入R:

> tung_counts <- read.table("data/tung/molecules.txt", sep = "\t")
> tung_annotation <- read.table("data/tung/annotation.txt", sep = "\t", header = TRUE)

現(xiàn)在可以使用同名函數(shù)創(chuàng)建一個SingleCellExperiment對象:

> library(SingleCellExperiment)
> tung <- SingleCellExperiment(
  assays = list(counts = as.matrix(tung_counts)),
  colData = tung_annotation
)
> rm(tung_counts, tung_annotation)

如果我們打印該對象的內(nèi)容,我們將得到一些有用的信息:<

> tung
class: SingleCellExperiment 
dim: 19027 864 
metadata(0):
assays(1): counts
rownames(19027): ENSG00000237683 ENSG00000187634 ... ERCC-00170
  ERCC-00171
rowData names(0):
colnames(864): NA19098.r1.A01 NA19098.r1.A02 ... NA19239.r3.H11
  NA19239.r3.H12
colData names(5): individual replicate well batch sample_id
reducedDimNames(0):
altExpNames(0):
  • 共有19027個基因(行)和864個細胞(列)。
  • 有一個名為“counts”的assay。
  • 提供了一些基因名稱(“rownames”)和細胞名稱(“colnames”)的預覽。
  • 沒有基因元數(shù)據(jù)(“rowData”為空)。
  • 可以看到細胞的一些元數(shù)據(jù)(“colData”)。

要訪問SCE對象的不同部分,可以使用以下訪問器函數(shù):

命名Assay
我們可以隨意給assay取名。不過,需要遵循一些慣例:

  • counts:原始計數(shù)數(shù)據(jù),例如特定基因的read數(shù)或轉(zhuǎn)錄本數(shù)。
  • normcounts:與原始計數(shù)具有相同尺度的標準化值。例如,counts除以以1為中心的細胞特定尺度因子。
  • logcounts:對數(shù)轉(zhuǎn)換計數(shù)或類似計數(shù)的值。在大多數(shù)情況下,定義為對數(shù)轉(zhuǎn)換的normcounts,例如使用以2為底的對數(shù)和偽計數(shù)1。
  • cpm:每百萬計數(shù)。這是每個細胞中每個基因的read數(shù),除以每個細胞的文庫大?。ㄒ园偃f為單位)。
  • tpm:每百萬轉(zhuǎn)錄本數(shù)。這是每個細胞中每個基因的轉(zhuǎn)錄本數(shù)除以該細胞中的轉(zhuǎn)錄本總數(shù)(以百萬為單位)。

每個assay都有一個函數(shù)訪問,可以使用counts()函數(shù)訪問“counts” assay。以下兩個操作是等效的:

counts(tung)
assay(tung, "counts")

如上所創(chuàng)建的SingleCellExperiment對象適用于任何場景,只要我們有一個可以讀取到文件中的計數(shù)矩陣。當然,要讀取常用工具cellranger(用于處理10x Chromium數(shù)據(jù))的輸出,DropletUtils包中有一個專用函數(shù),它簡化了導入數(shù)據(jù)的過程。以下是示例用法:<

> library(DropletUtils)
> sce <- read10xCounts("data/pbmc_1k_raw")
> sce <- read10xCounts("data/pbmc_1k_filtered")

4.2.2 修改SCE對象
要修改SCE對象的某些部分,我們可以使用<-賦值運算符,以及我們想要修改的對象的部分。例如,要創(chuàng)建一個新的assay:assay(sce, "name_of_new_assay") <- new_matrix。下表總結(jié)了其他用例。
舉個例子,對計數(shù)數(shù)據(jù)進行一個簡單的轉(zhuǎn)換,即取以2為底的對數(shù)并加上偽計數(shù)1(否則 log(0) = -Inf):

> assay(tung, "logcounts") <- log2(counts(tung) + 1)

因為我們將assay命名為“l(fā)ogcounts”,這是常規(guī)的名稱之一,所以我們可以使用專用函數(shù)來訪問它:

> logcounts(tung)[1:10, 1:4]
                NA19098.r1.A01 NA19098.r1.A02 NA19098.r1.A03 NA19098.r1.A04
ENSG00000237683       0.000000       0.000000       0.000000              1
ENSG00000187634       0.000000       0.000000       0.000000              0
ENSG00000188976       2.000000       2.807355       1.000000              2
ENSG00000187961       0.000000       0.000000       0.000000              0
ENSG00000187583       0.000000       0.000000       0.000000              0
ENSG00000187642       0.000000       0.000000       0.000000              0
ENSG00000188290       0.000000       0.000000       0.000000              0
ENSG00000187608       1.000000       3.000000       0.000000              2
ENSG00000188157       1.584963       2.000000       1.584963              2
ENSG00000237330       0.000000       0.000000       0.000000              0

以下是修改SCE對象中數(shù)據(jù)的其他方法的總結(jié):

往期內(nèi)容:
重生之我在劍橋大學學習單細胞RNA-seq分析——3. 單細胞分析中的R/Bioconductor簡介(1)
重生之我在劍橋大學學習單細胞RNA-seq分析——3. 單細胞分析中的R/Bioconductor簡介(2)
重生之我在劍橋大學學習單細胞RNA-seq分析——3. 單細胞分析中的R/Bioconductor簡介(3)
重生之我在劍橋大學學習單細胞RNA-seq分析——3. 單細胞分析中的R/Bioconductor簡介(4)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容