單細胞轉(zhuǎn)錄組測序分析--初探Seurat

單細胞轉(zhuǎn)錄組測序--閑言碎語

時代發(fā)展的步伐總是毫不留情的將你甩在身后访递,連車尾燈都看不見汹买。當你還在沉迷于普通轉(zhuǎn)錄組數(shù)據(jù)挖掘時存崖,已經(jīng)有人悄悄的搞上單細胞了汽煮。單細胞轉(zhuǎn)錄組測序搏熄,顧名思義就是在單個細胞的分辨率基礎(chǔ)上去研究細胞內(nèi)的基因表達等茅诱,其主要目的是為了研究不同細胞類型的基因表達異質(zhì)性,從而解決相關(guān)生物學問題搬卒。談到單細胞就不得不提一下當下火爆的10x Genomics服務(wù)商了,具體參見10x Genomics翎卓。本篇文章暫時不介紹10x契邀,主要介紹單細胞轉(zhuǎn)錄組數(shù)據(jù)分析軟件Seurat。
Seurat軟件是一個R包失暴,可以說是單細胞轉(zhuǎn)錄組測序分析的明星軟件坯门,很多單細胞測序文章都會引用該軟件,引用次數(shù)也是杠杠的逗扒,而且也有詳細的在線教程古戴。本文也主要是根據(jù)其教程介紹一下使用Seurat軟件分析一個樣本的單細胞轉(zhuǎn)錄組數(shù)據(jù)的步驟及注意事項,供大家討論矩肩。

360截圖20190220211931988.jpg

Seurat軟件介紹

導(dǎo)入分析需要的包

library(Seurat)
library(dplyr)
library(magrittr)

Seurat軟件提供了很友好的函數(shù)可以直接讀取10x Genomics的輸出結(jié)果

matrix <- Read10X_h5("filtered_gene_bc_matrices_h5.h5")#該函數(shù)直接讀取10x的h5文件现恼,
#并返回一個稀疏矩陣
#也可以使用下面這個函數(shù)導(dǎo)入數(shù)據(jù)
matrix <- Read10X("data/matrix_dir")#data/matrix_dir目錄下包含文件
#matrix.mtx, genes.tsv, and barcodes.tsv

導(dǎo)入文件后便可以創(chuàng)建Seurat對象

filter_10x_object <-CreateSeuratObject(raw.data = matrix,min.cells = 3, 
min.genes = 200, project = "d615")#該函數(shù)還具有數(shù)據(jù)過濾的功能,
#基因至少在min.cells個細胞中表達黍檩,每個細胞中至少表達min.genes個基因叉袍,
#可以根據(jù)具體情況決定這些閾值

創(chuàng)建完Seurat對象后,Seurat將數(shù)據(jù)保存在不同的slot中刽酱,如filter_10x_object@raw.data, filter_10x_objectt@data, filter_10x_object@meta.data, filter_10x_object@ident喳逛,其中raw.data存放的是每個細胞中每個gene的原始UMI數(shù)據(jù),data存放的是gene的表達量棵里,meta.data存放的是每個細胞的統(tǒng)計數(shù)據(jù)如UMI數(shù)目润文,gene數(shù)目等,ident此時存放的是project信息殿怜。

由于技術(shù)原因典蝌,一個GEM中可能會包含2個或多個細胞,也可能不包含細胞稳捆,這時候可以通過觀察每個barcode中的基因數(shù)目或UMI數(shù)目來判斷赠法。

GenePlot(object = filter_10x_object, gene1 = "nUMI", gene2 = "nGene")
1.jpg

上圖展示的是每個barcode中的基因數(shù)目和UMI數(shù)目的關(guān)系,一般二者都成正相關(guān)關(guān)系乔夯,有個別barcode的基因數(shù)目和UMI數(shù)目過高砖织,有可能就是包含2個細胞的GEM,可以考慮在后續(xù)分析中將其過濾掉末荐。
我們不僅僅可以觀察每個barcode的基因數(shù)目侧纯,還可以計算每個barcode中的線粒體基因含量等,從而更加仔細的觀察數(shù)據(jù)的質(zhì)量甲脏。

mito.genes <- grep(pattern = "^MT-", x = rownames(x = filter_10x_object@data), 
value = TRUE)#統(tǒng)計線粒體基因
percent.mito <- Matrix::colSums(filter_10x_object@raw.data[mito.genes, ])/
Matrix::colSums(filter_10x_object@raw.data)#計算線粒體基因含量
filter_10x_object <- AddMetaData(object = filter_10x_object, metadata = percent.mito,
col.name = "percent.mito")#將線粒體基因含量添加到meta.data中
VlnPlot(object = filter_10x_object, features.plot = c("nGene", "nUMI", 
"percent.mito"), nCol = 3)#繪制小提琴圖

2.jpg

這張圖片展示了每個barcode中基因數(shù)目眶熬、UMI數(shù)目以及線粒體基因含量的分布情況妹笆,根據(jù)上述2張圖片就可以大致確定是否需要過濾哪些數(shù)據(jù)進行后續(xù)分析。
Seurat提供了一個很好用的數(shù)據(jù)過濾函數(shù):

filter_10x_object_filter <- FilterCells(object = filter_10x_object, subset.names =
 c("nGene", "percent.mito"), low.thresholds = c(200, -Inf), 
high.thresholds = c(2500, 0.05))#過濾掉小于low.thresholds或大于high.thresholds的數(shù)據(jù)娜氏,
#這個參數(shù)值對應(yīng)subset.names的參數(shù)

以上就是數(shù)據(jù)的預(yù)處理過程了拳缠,接下來就進入正式的分析階段,包括數(shù)據(jù)的標準化贸弥、歸一化窟坐、數(shù)據(jù)降維以及聚類分析等。

#數(shù)據(jù)標準化绵疲,即表達量的計算
filter_10x_object_norm <- NormalizeData(object = filter_10x_object_filter, 
normalization.method = "LogNormalize", scale.factor = 10000)#在每個細胞內(nèi)哲鸳,
#對每個基因進行標準化:該基因的UMI除以該細胞內(nèi)轉(zhuǎn)錄物的總UMI并乘以10000,
#然后在使用log1p對這些值進行自然對數(shù)轉(zhuǎn)換(標準化的數(shù)值存放在data slot中)

#計算高度變化的基因
#(并不是所有基因都有有效的信息盔憨,尋找高度變化的基因既可以節(jié)省計算資源徙菠,又能概括樣本信息)
filter_10x_object_norm_var <- FindVariableGenes(object = filter_10x_object_norm,
 mean.function = ExpMean, dispersion.function = LogVMR, 
x.low.cutoff = 0.0125, x.high.cutoff = 3, y.cutoff = 0.5)#具體 cutoff值可以根據(jù)下圖調(diào)整
3.jpg

FindVariableGenes算法:首先計算基因的平均表達量,然后計算基因的離散度郁岩;接下來根據(jù)平均表達值將基因分成20塊并計算每塊的離散度的Z值婿奔。
如上圖:橫坐標代表基因的平均表達量,縱坐標代表基因的離散度的Z值问慎,標有基因名的點就是由函數(shù)中的cutoff值決定的脸秽,改變cutoff值,這些標記也會隨之改變蝴乔。
數(shù)據(jù)的線性回歸记餐、中心化和比例化:對數(shù)據(jù)進行線性回歸分析,去除不想要的變異源薇正。
中心化:首先計算基因A在所有細胞中的平均表達量片酝,然后分別將每個細胞中基因A的表達值減去平均值。
比例化:在中心化的基礎(chǔ)上挖腰,首先計算基因A在所有細胞中的中心化值后的標準差雕沿,然后分別將每個細胞中基因A的中心化值除以標準差。這些步驟都在一個函數(shù)中完成猴仑。

filter_10x_object_norm_var_scal <- ScaleData(object = filter_10x_object_norm_var, 
vars.to.regress = c("nUMI", "percent.mito"))
#vars.to.regress中的參數(shù)就是需要去除的變異來源
#該函數(shù)會先進行先行回歸分析审轮,然后再進行數(shù)據(jù)的中心化和比例化,并將值存在scale.data中

單細胞轉(zhuǎn)錄組測序產(chǎn)生的數(shù)據(jù)是數(shù)萬個基因在數(shù)萬個細胞中的表達情況辽俗,屬于典型的高維數(shù)據(jù)疾渣。如果把1個基因視為1個坐標軸的話,那么一個細胞的空間位置就是在數(shù)萬個坐標軸中的定位崖飘,這樣的話相同細胞類型的細胞就應(yīng)該挨在一起榴捡,我們就可以根據(jù)細胞的空間位置判斷細胞亞群了≈煸。可是我最多也就認識三維坐標啊吊圾,咋辦达椰,能不能把這些高維數(shù)據(jù)投影到二維坐標呢,那就交給PCA和t-SNE吧项乒。PCA和tSNE都是數(shù)據(jù)降維分析方法啰劲,PCA屬于線性降維,tSNE屬于非線性降維檀何。我們先執(zhí)行PCA分析呈枉,使高維數(shù)據(jù)的信息最大程度保留在低維數(shù)據(jù)中,PCA分析利用的是保存在scale.data的值埃碱。

filter_10x_object_norm_var_scal_pca<- RunPCA(object= filter_10x_object_norm_var_scal,
 pc.genes = filter_10x_object_norm_var_scal@var.genes, pcs.compute=20)#利用高可變基因
#計算20個主成分,并將數(shù)據(jù)保存在@dr$pca中

執(zhí)行完P(guān)CA分析后酥泞,就要根據(jù)PCA得分來進行聚類分析了砚殿,但是在進行聚類分析之前,需要選擇使用對少個主成分進行計算芝囤。每個主成分實際上代表的是相關(guān)基因集的信息似炎,因此確定多少個主成分是一個重要的步驟,我們可以根據(jù)PCElbowPlot函數(shù)來判斷悯姊。

PCElbowPlot(object = filter_10x_object_norm_var_scal_pca)
4.jpg

從上圖可以看到羡藐,拐點出現(xiàn)在10-15之間,我們可以選擇15來進行聚類分析悯许。Seurat采用的是基于圖形的聚類方法仆嗦,即利用PCA空間中的歐幾里德距離構(gòu)造一個KNN圖(數(shù)學好的可以留下來幫忙講講)。

filter_10x_object_norm_var_scal_pca_cluster <- FindClusters(object =
 filter_10x_object_norm_var_scal_pca, reduction.type = "pca", 
dims.use = 1:15, resolution = 1.0, print.output = 0, save.SNN = TRUE)
#resolution會影響聚類的個數(shù)

好了先壕,到此我們就知道了我們的數(shù)據(jù)中有多少種細胞亞群了瘩扼,怎么可以少得了圖片展示呢。超棒的可視化方法tSNE要上場了垃僚。tSNE的目標是將在高維空間中具有相似局部鄰域的細胞集绰,在低維空間中放在一起。

filter_10x_object_norm_var_scal_pca_cluster_tsne <- RunTSNE(object = 
filter_10x_object_norm_var_scal_pca_cluster, dims.use = 1:15, do.fast = TRUE)
TSNEPlot(object = filter_10x_object_norm_var_scal_pca_cluster_tsne,do.label = TRUE, 
pt.size = 0.2)#繪圖
5.jpg

既然我們知道了有多少種細胞亞群谆棺,那么是不是就要分析一下這些亞群間的差異性呢栽燕,交給FindAllMarkers吧。FindAllMarkers能夠同時計算所有亞群的差異性(分別計算每個亞群與剩下的所有細胞的差異性)改淑。

pbmc.markers <- FindAllMarkers(object = 
filter_10x_object_norm_var_scal_pca_cluster_tsne, 
only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)#根據(jù)data slot的值進行計算

得到差異表達基因后碍岔,當然要進行展示了。


6.jpg

7.jpg

好了朵夏,剩下的就是進行生物學知識挖掘了付秕,例如根據(jù)這些差異基因推斷細胞類型啊之類的。
關(guān)于單個樣本的單細胞轉(zhuǎn)錄組數(shù)據(jù)分析就介紹到這兒了侍郭,那多個樣本的分析會有什么不同呢询吴,我們下次再說吧掠河。

單細胞轉(zhuǎn)錄組數(shù)據(jù)分析的小伙伴一起來討論吧
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猛计,隨后出現(xiàn)的幾起案子唠摹,更是在濱河造成了極大的恐慌,老刑警劉巖奉瘤,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勾拉,死亡現(xiàn)場離奇詭異,居然都是意外死亡盗温,警方通過查閱死者的電腦和手機藕赞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卖局,“玉大人斧蜕,你說我怎么就攤上這事⊙馀迹” “怎么了批销?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長染坯。 經(jīng)常有香客問我均芽,道長,這世上最難降的妖魔是什么单鹿? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任掀宋,我火速辦了婚禮,結(jié)果婚禮上仲锄,老公的妹妹穿的比我還像新娘布朦。我一直安慰自己,他們只是感情好昼窗,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布是趴。 她就那樣靜靜地躺著,像睡著了一般澄惊。 火紅的嫁衣襯著肌膚如雪唆途。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天掸驱,我揣著相機與錄音肛搬,去河邊找鬼。 笑死毕贼,一個胖子當著我的面吹牛温赔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鬼癣,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼陶贼,長吁一口氣:“原來是場噩夢啊……” “哼啤贩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拜秧,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤痹屹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后枉氮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體志衍,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年聊替,在試婚紗的時候發(fā)現(xiàn)自己被綠了楼肪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡惹悄,死狀恐怖春叫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俘侠,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布蔬将,位于F島的核電站爷速,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏霞怀。R本人自食惡果不足惜惫东,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毙石。 院中可真熱鬧廉沮,春花似錦、人聲如沸徐矩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滤灯。三九已至坪稽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳞骤,已是汗流浹背窒百。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留豫尽,地道東北人篙梢。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像美旧,于是被迫代替她去往敵國和親渤滞。 傳聞我的和親對象是個殘疾皇子贬墩,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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