7.單細(xì)胞 RNA-seq:?jiǎn)渭?xì)胞歸一化和識(shí)別高變基因

歸一化和回歸不必要的變異

現(xiàn)在我們有了高質(zhì)量的細(xì)胞旭愧,我們首先需要探索我們的數(shù)據(jù)并識(shí)別任何不需要的變異來(lái)源。然后我們需要對(duì)數(shù)據(jù)進(jìn)行歸一化置逻,執(zhí)行方差穩(wěn)定并回歸對(duì)我們的數(shù)據(jù)有影響的任何協(xié)變量的影響推沸。

image

目標(biāo):

  • 準(zhǔn)確標(biāo)準(zhǔn)化和縮放基因表達(dá)值,以解決測(cè)序深度和過(guò)度分散計(jì)數(shù)值的差異券坞。
  • 找出最有可能指示不同細(xì)胞類型的變異基因鬓催。

挑戰(zhàn):

  • 檢查并消除不必要的變異,避免下游人為原因?qū)е碌募?xì)胞聚集

建議:

  • 在執(zhí)行聚類之前恨锚,要很好地了解您對(duì)要呈現(xiàn)的細(xì)胞類型的期望宇驾。了解你所期望的是低復(fù)雜性的細(xì)胞類型還是高線粒體含量的細(xì)胞類型,以及這些細(xì)胞是否正在分化猴伶。
  • 如果需要并且適合于實(shí)驗(yàn)课舍,回歸出UMIs的數(shù)量(默認(rèn)使用 sctransform)、線粒體含量和細(xì)胞周期他挎,因此不會(huì)用于下游聚類

開(kāi)始

讓我們首先創(chuàng)建一個(gè)新腳本進(jìn)行規(guī)范化和集成步驟筝尾。創(chuàng)建一個(gè)新腳本(文件 -> 新文件 -> R 腳本),并將其保存為SCT_integration_analysis.R.

對(duì)于工作流程的其余部分雇盖,我們將主要使用 Seurat 包中提供的函數(shù)忿等。因此,除了 tidyverse 庫(kù)和下面列出的其他一些庫(kù)之外崔挖,我們還需要加載 Seurat 庫(kù)贸街。

# Single-cell RNA-seq - normalization

# Load libraries
library(Seurat)
library(tidyverse)
library(RCurl)
library(cowplot)

此分析的輸入是一個(gè)seurat對(duì)象。我們將使用我們?cè)?QC 課程中創(chuàng)建的名為filtered_seurat.

探索不必要的變異來(lái)源

對(duì)生物協(xié)變量的校正目的是為了挑選出感興趣的特定生物信號(hào)狸相,而技術(shù)協(xié)變量的校正對(duì)于揭示潛在的生物信號(hào)可能至關(guān)重要薛匪。最常見(jiàn)的生物學(xué)數(shù)據(jù)校正是去除細(xì)胞周期對(duì)轉(zhuǎn)錄組的影響。這種數(shù)據(jù)校正可以通過(guò)對(duì)細(xì)胞周期評(píng)分的簡(jiǎn)單線性回歸來(lái)執(zhí)行脓鹃,我們將在下面演示逸尖。

第一步是查看數(shù)據(jù),看看我們是否觀察到數(shù)據(jù)中的是否有任何影響。細(xì)胞之間的原始計(jì)數(shù)不具有可比性娇跟,我們不能將它們用于我們的探索性分析岩齿。因此,我們將通過(guò)除以每個(gè)細(xì)胞的總計(jì)數(shù)并取自然對(duì)數(shù)來(lái)執(zhí)行粗略的歸一化苞俘。這種標(biāo)準(zhǔn)化僅用于探索我們數(shù)據(jù)中的變化來(lái)源盹沈。

注意:Seurat 最近引入了一種稱為sctransform的新歸一化方法 ,它同時(shí)執(zhí)行方差穩(wěn)定并回歸出不必要的變化吃谣。這是我們?cè)诠ぷ髁鞒讨惺褂玫囊?guī)范化方法乞封。

# Normalize the counts
seurat_phase <- NormalizeData(filtered_seurat)

接下來(lái),我們獲取這些歸一化數(shù)據(jù)并檢查是否需要數(shù)據(jù)校正方法岗憋。

評(píng)估細(xì)胞周期的影響

為了根據(jù)每個(gè)細(xì)胞的 G2/M 和 S 期標(biāo)記的表達(dá)為其分配一個(gè)分?jǐn)?shù)肃晚,我們可以使用 Seuart 的CellCycleScoring()函數(shù)。此函數(shù)需要輸入規(guī)范標(biāo)記計(jì)算細(xì)胞周期階段分?jǐn)?shù)仔戈。

我們?cè)?code>data文件夾中為您提供了人類細(xì)胞周期標(biāo)記的列表关串,作為一個(gè)名為cycle.rda. 但是,如果您不使用人類數(shù)據(jù)杂穷,我們還有其他物種詳細(xì)介紹了如何獲取其他感興趣生物的細(xì)胞周期標(biāo)記悍缠。

# Load cell cycle markers
load("data/cycle.rda")

# Score cells for cell cycle
seurat_phase <- CellCycleScoring(seurat_phase, 
                                 g2m.features = g2m_genes, 
                                 s.features = s_genes)

# View cell cycle scores and phases assigned to cells                                 
View(seurat_phase@meta.data)                                

在對(duì)細(xì)胞的細(xì)胞周期進(jìn)行評(píng)分后,我們想使用 PCA 確定細(xì)胞周期是否是我們數(shù)據(jù)集中變異的主要來(lái)源耐量。要執(zhí)行 PCA飞蚓,我們需要首先選擇高度可變基因,然后對(duì)數(shù)據(jù)進(jìn)行縮放廊蜒。由于高表達(dá)的基因表現(xiàn)出最高的變異量趴拧,我們不希望我們的“高變異基因”只反映高表達(dá),我們需要縮放數(shù)據(jù)反映出表達(dá)水平的變化山叮。Seurat的ScaleData()函數(shù)進(jìn)行數(shù)據(jù)縮放:

  • 調(diào)整每個(gè)基因的表達(dá)著榴,使跨細(xì)胞的平均表達(dá)為 0
  • 縮放每個(gè)基因的表達(dá)以使細(xì)胞間的方差為 1
# Identify the most variable genes
seurat_phase <- FindVariableFeatures(seurat_phase, 
                     selection.method = "vst",
                     nfeatures = 2000, 
                     verbose = FALSE)

# Scale the counts
seurat_phase <- ScaleData(seurat_phase)

注意:對(duì)于selection.methodnfeatures參數(shù),指定的值是默認(rèn)設(shè)置屁倔。因此脑又,代碼中可以不包含這些。我們將其包含在此處以提高透明度并告知您正在使用的內(nèi)容锐借。

現(xiàn)在问麸,我們可以執(zhí)行 PCA 分析并將前兩個(gè)主成分繪制出來(lái)。我們還按細(xì)胞周期階段拆分圖钞翔,以評(píng)估相似性或差異性严卖。由于細(xì)胞周期階段,我們沒(méi)有看到大的差異布轿∠剩基于這個(gè)圖来颤,我們將不進(jìn)行回歸,未發(fā)現(xiàn)細(xì)胞周期引起的變化稠肘。

# Perform PCA
seurat_phase <- RunPCA(seurat_phase)

# Plot the PCA colored by cell cycle phase
DimPlot(seurat_phase,
        reduction = "pca",
        group.by= "Phase",
        split.by = "Phase")

image

細(xì)胞周期階段應(yīng)該何時(shí)回歸福铅?

下面是從處理“細(xì)胞周期評(píng)分和回歸”的 Seurat 案例中截取的兩個(gè) PCA 圖。

第一個(gè)圖類似于我們上面繪制的圖启具,它是回歸之前的 PCA本讥,用于評(píng)估細(xì)胞周期是否在驅(qū)動(dòng) PC1 和 PC2 中發(fā)揮重要作用。

image

很明顯鲁冯,在這種情況下,細(xì)胞是按細(xì)胞類型分開(kāi)的色查,所以該案例建議回歸細(xì)胞周期產(chǎn)生的影響薯演。

第二個(gè) PCA 圖是post-regression,顯示了消除我們觀察到的影響方面回歸后的效果秧了。

image

練習(xí):評(píng)估線粒體表達(dá)的影響

線粒體表達(dá)是另一個(gè)極大影響聚類的因素跨扮。通常,對(duì)線粒體表達(dá)引起的變化進(jìn)行回歸是很有用的验毡。然而衡创,如果線粒體基因表達(dá)的差異代表了一種可能有助于區(qū)分細(xì)胞簇的生物學(xué)現(xiàn)象,那么我們建議不要將其回歸晶通。在本練習(xí)中璃氢,我們可以執(zhí)行類似于查看細(xì)胞周期的快速檢查,并決定是否要對(duì)其進(jìn)行回歸狮辽。

  1. 首先一也,將線粒體比率變量轉(zhuǎn)換為基于四分位數(shù)的新分類變量(使用以下代碼):
# Check quartile values
summary(seurat_phase@meta.data$mitoRatio)

# Turn mitoRatio into categorical factor vector based on quartile values
seurat_phase@meta.data$mitoFr <- cut(seurat_phase@meta.data$mitoRatio, 
                   breaks=c(-Inf, 0.0144, 0.0199, 0.0267, Inf), 
                   labels=c("Low","Medium","Medium high", "High"))

  1. 接下來(lái),繪制類似于我們?nèi)绾翁幚砑?xì)胞周期回歸的 PCA喉脖。提示:使用新mitoFr變量拆分單元格并相應(yīng)地為它們著色椰苟。

  2. 評(píng)估 #2 中生成的 PCA 圖。

1. 確定您是否觀察到效果树叽。

1\. Describe what you see. 
1\. Would you regress out mitochndrial fraction as a source of unwanted variation?


使用 SCTransform 歸一化和回歸出不必要的變化源

現(xiàn)在我們可以使用 sctransform 方法作為更準(zhǔn)確的歸一化方法舆蝴,估計(jì)原始過(guò)濾數(shù)據(jù)的方差,并識(shí)別最易變的基因题诵。sctransform 方法使用正則化負(fù)二項(xiàng)式模型對(duì)UMI 計(jì)數(shù)進(jìn)行建模洁仗,以消除由于測(cè)序深度(每個(gè)細(xì)胞的總 nUMI)引起的變化,同時(shí)根據(jù)具有相似豐度的基因之間的匯集信息進(jìn)而調(diào)整方差(類似于一些bulk RNA-seq 方法)仇轻。

image

圖片來(lái)源: Hafemeister C 和 Satija R京痢。使用正則化負(fù)二項(xiàng)式回歸對(duì)單細(xì)胞 RNA-seq 數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化和方差穩(wěn)定化,bioRxiv 2019 (https://doi.org/10.1101/576827)

模型輸出(殘差)是每個(gè)測(cè)試轉(zhuǎn)錄本的標(biāo)準(zhǔn)化表達(dá)水平篷店。

Sctransform 通過(guò)回歸測(cè)序深度 (nUMI) 自動(dòng)考慮細(xì)胞測(cè)序深度祭椰。但是臭家,如果在探索步驟期間在數(shù)據(jù)中發(fā)現(xiàn)了其他無(wú)用的變化來(lái)源,我們也可以包括這些方淤。由于在細(xì)胞周期階段钉赁,我們幾乎沒(méi)有觀察到影響,因此我們選擇不從我們的數(shù)據(jù)中回歸携茂。我們觀察到線粒體表達(dá)的一些影響你踩,因此我們選擇從數(shù)據(jù)中回歸。

為了運(yùn)行 SCTransform讳苦,我們以下面的代碼為例带膜。不要運(yùn)行此代碼,因?yàn)槲覀兏矚g在下面的下一部分中為每個(gè)示例分別運(yùn)行此代碼鸳谜。

## DO NOT RUN CODE ##

# SCTranform
seurat_phase <- SCTransform(seurat_phase, vars.to.regress = c("mitoRatio"))

迭代數(shù)據(jù)集中的樣本

由于我們的數(shù)據(jù)集中有兩個(gè)樣本(來(lái)自兩個(gè)條件)膝藕,我們希望將它們保留為單獨(dú)的對(duì)象并按照集成所需的方式轉(zhuǎn)換它們。我們首先將seurat_phase對(duì)象中的細(xì)胞拆分為“ctrl”和“stim”組:

# Split seurat object by condition to perform cell cycle scoring and SCT on all samples
split_seurat <- SplitObject(seurat_phase, split.by = "sample")

split_seurat <- split_seurat[c("ctrl", "stim")]

通過(guò)使用“for 循環(huán)”在每個(gè)樣本上運(yùn)行SCTransform()咐扭,并在函數(shù)SCTransform()vars.to.regress參數(shù)中指定來(lái)回歸線粒體表達(dá)芭挽。

在我們運(yùn)行for循環(huán)之前,我們需要知道生成的R對(duì)象需要占用大量的內(nèi)存蝗肪。如果我們有一個(gè)大型數(shù)據(jù)集袜爪,那么我們需要使用以下代碼調(diào)整 R 內(nèi)允許的對(duì)象大小的限制默認(rèn)為 500 * 1024 ^ 2 = 500 Mb):

options(future.globals.maxSize = 4000 * 1024^2)

現(xiàn)在,我們運(yùn)行以下循環(huán)對(duì)所有樣本執(zhí)行 sctransform薛闪。這可能需要一些時(shí)間(約 10 分鐘):


for (i in 1:length(split_seurat)) {
    split_seurat[[i]] <- SCTransform(split_seurat[[i]], vars.to.regress = c("mitoRatio"))
    }

注意:默認(rèn)情況下辛馆,在歸一化、調(diào)整方差和回歸不感興趣的變異源后逛绵,SCTransform 將按殘差對(duì)基因進(jìn)行排序怀各,并輸出 3000 個(gè)變異最大的基因。如果數(shù)據(jù)集具有更大的細(xì)胞數(shù)术浪,則使用該variable.features.n參數(shù)將該參數(shù)調(diào)整得更高效果將會(huì)更好瓢对。

請(qǐng)注意,輸出的最后一行指定“將默認(rèn)檢測(cè)設(shè)置為 SCT”胰苏。我們可以查看存儲(chǔ)在 seurat 對(duì)象中的不同分析硕蛹。

# Check which assays are stored in objects
split_seurat$ctrl@assays

現(xiàn)在我們可以看到,除了原始 RNA 計(jì)數(shù)之外硕并,我們現(xiàn)在在我們的assays插槽中有一個(gè) SCT 組件法焰。最可變的特征將是存儲(chǔ)在 SCT 分析中的唯一基因。當(dāng)我們進(jìn)行 scRNA-seq 分析時(shí)倔毙,我們將選擇最合適的檢測(cè)方法用于分析中的不同步驟埃仪。


訓(xùn)練

  1. split_seurat對(duì)象內(nèi)的“stim”樣本是否可以進(jìn)行相同的分析?你用來(lái)運(yùn)行的代碼是什么陕赃?
  2. 對(duì)于“ctrl”與“stim”的“前 10個(gè)feature:”“最大的10 個(gè)variable feature:”中列出的基因或特征是否有任何觀察卵蛉?

保存對(duì)象颁股!

在完成之前,讓我們將此對(duì)象保存到data/文件夾中傻丝「视校回到這個(gè)階段可能需要一段時(shí)間,尤其是在處理大型數(shù)據(jù)集時(shí)葡缰,最佳做法是將對(duì)象另存為本地可輕松加載的文件亏掀。

# Save the split seurat object
saveRDS(split_seurat, "data/split_seurat.rds")

要將.rds文件加載回您的環(huán)境,您將使用以下代碼:

# Load the split seurat object into the environment
split_seurat <- readRDS("data/split_seurat.rds")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泛释,一起剝皮案震驚了整個(gè)濱河市滤愕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胁澳,老刑警劉巖该互,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異韭畸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蔓搞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)胰丁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人喂分,你說(shuō)我怎么就攤上這事锦庸。” “怎么了蒲祈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵甘萧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我梆掸,道長(zhǎng)扬卷,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任酸钦,我火速辦了婚禮怪得,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卑硫。我一直安慰自己徒恋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布欢伏。 她就那樣靜靜地躺著入挣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硝拧。 梳的紋絲不亂的頭發(fā)上径筏,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天葛假,我揣著相機(jī)與錄音,去河邊找鬼匠璧。 笑死桐款,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夷恍。 我是一名探鬼主播魔眨,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酿雪!你這毒婦竟也來(lái)了遏暴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤指黎,失蹤者是張志新(化名)和其女友劉穎朋凉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體醋安,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杂彭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吓揪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡习勤,死狀恐怖焙格,靈堂內(nèi)的尸體忽然破棺而出图毕,到底是詐尸還是另有隱情间螟,我是刑警寧澤吴旋,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站荣瑟,受9級(jí)特大地震影響捏检,放射性物質(zhì)發(fā)生泄漏能犯。R本人自食惡果不足惜踩晶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一税弃、第九天 我趴在偏房一處隱蔽的房頂上張望遗增。 院中可真熱鬧慷蠕,春花似錦、人聲如沸饶囚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至辑鲤,卻和暖如春栓票,著一層夾襖步出監(jiān)牢的瞬間决左,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工走贪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佛猛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓坠狡,卻偏偏與公主長(zhǎng)得像继找,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逃沿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容