單細(xì)胞轉(zhuǎn)錄組(scRNA-seq)分析02 | Seurat包的使用

一、創(chuàng)建 Seurat 對象

使用的示例數(shù)據(jù)集來自10X Genome 測序的 Peripheral Blood Mononuclear Cells (PBMC)。

library(dplyr)
library(Seurat)

# Load the PBMC dataset
pbmc.data <- Read10X(data.dir = "../data/pbmc3k/filtered_gene_bc_matrices/hg19/")
# Initialize the Seurat object with the raw (non-normalized data).
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200)
pbmc

二蹂空、標(biāo)準(zhǔn)預(yù)處理流程

流程包括:

  • 基于質(zhì)控指標(biāo)(QC metric)來篩選細(xì)胞
  • 數(shù)據(jù)歸一化和縮放
  • 高異質(zhì)性基因檢測
1.基因質(zhì)控指標(biāo)來篩選細(xì)胞

質(zhì)控指標(biāo):

  • 每個(gè)細(xì)胞中檢測到的基因數(shù)

    • 低質(zhì)量的細(xì)胞和空油滴(droplet)只有少量基因
    • 兩個(gè)及以上的細(xì)胞會有異常的高基因數(shù)
  • 每個(gè)細(xì)胞中的UMI總數(shù)(與上類似)

  • 線粒體基因組的reads比例

    • 低質(zhì)量或死細(xì)胞會有大百分比的線粒體基因組

    • 使用PercentageFeatureSet函數(shù)來計(jì)數(shù)線粒體質(zhì)控指標(biāo)

    • MT-是線粒體基因

# 計(jì)算線粒體read的百分比
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")
VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)
# 顯示前5個(gè)細(xì)胞的質(zhì)控指標(biāo)
head(pbmc@meta.data, 5)
image

通過上圖,過濾標(biāo)準(zhǔn)設(shè)定為:

  • 過濾UMI數(shù)大于2500,小于200的細(xì)胞
  • 過濾線粒體百分比大于5%的細(xì)胞

查看特征與特征間的相關(guān)性

plot1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")
image
plot2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
image

過濾

pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)

看看相關(guān)性

p1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")
p2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
CombinePlots(plots = list(p1, p2))
image
2.歸一化數(shù)據(jù)
pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000)

LogNormalize that normalizes the feature expression measurements for each cell by the total expression, multiplies this by a scale factor (10,000 by default), and log-transforms the result. Normalized values are stored in pbmc[["RNA"]]@data.

上述代碼可以替換為:pbmc <- NormalizeData(pbmc)

3.識別高異質(zhì)性特征

高異質(zhì)性:這些特征在有的細(xì)胞中高表達(dá)献丑,有的細(xì)胞中低表達(dá)。在下游分析中關(guān)注這些基因有助于找到單細(xì)胞數(shù)據(jù)集中的生物信號[https://www.nature.com/articles/nmeth.2645 ]

# 識別前2000個(gè)特征
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)
# 識別前10的高異質(zhì)性基因
top10 <- head(VariableFeatures(pbmc), 10)

# 繪圖看看
plot1 <- VariableFeaturePlot(pbmc)
plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE)
CombinePlots(plots = list(plot1, plot2))
image
4.縮放數(shù)據(jù)

這是在PCA等降維操作前的一個(gè)步驟侠姑,ScaleData函數(shù):

  • 轉(zhuǎn)換每個(gè)基因的表達(dá)值创橄,使每個(gè)細(xì)胞的平均表達(dá)值為0
  • 轉(zhuǎn)換每個(gè)基因的表達(dá)值,使細(xì)胞間方差為1
    • 此步驟在下游分析中具有相同的權(quán)重莽红,因此高表達(dá)的基因不會占主導(dǎo)地位
all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)
head(pbmc[["RNA"]]@scale.data,5)
5.線性維度約化 PCA
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))

可視化細(xì)胞與特征間的PCA有三種方式:

VizDimLoadings
print(pbmc[["pca"]], dims = 1:5, nfeatures = 5)
# 繪圖
VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")
image
DimPlot
DimPlot(pbmc, reduction = "pca")
image
DimHeatmap
DimHeatmap(pbmc, dims = 1, cells = 500, balanced = TRUE)

主要用來查看數(shù)據(jù)集中的異質(zhì)性的主要來源妥畏,并且可以確定哪些PC維度可以用于下一步的下游分析。

細(xì)胞和特征根據(jù)PCA分?jǐn)?shù)來排序

image
DimHeatmap(pbmc, dims = 1:15, cells = 500, balanced = TRUE)
image
5.確定數(shù)據(jù)集的維度

為了克服在單細(xì)胞數(shù)據(jù)中在單個(gè)特征中的技術(shù)噪音安吁,Seurat 聚類細(xì)胞是基于PCA分?jǐn)?shù)的醉蚁。每個(gè)PC代表著一個(gè)‘元特征’(帶有跨相關(guān)特征集的信息)。因此鬼店,最主要的主成分代表了壓縮的數(shù)據(jù)集馍管。問題是要選多少PC呢?

方法一:

作者受JackStraw procedure 啟發(fā)薪韩。隨機(jī)置換數(shù)據(jù)的一部分子集(默認(rèn)1%)再運(yùn)行PCA确沸,構(gòu)建了一個(gè)'null distribution'的特征分?jǐn)?shù)捌锭,重復(fù)這一步。最終會識別出低P-value特征的顯著PCs

pbmc <- JackStraw(pbmc, num.replicate = 100)
pbmc <- ScoreJackStraw(pbmc, dims = 1:20)
# 繪圖看看
JackStrawPlot(pbmc, dims = 1:15)
image

In this case it appears that there is a sharp drop-off in significance after the first 10-12 PCs

在上圖中展示出在前10到12臺PC之后罗捎,重要性顯著下降

方法二:

“ElbowPlot”:基于每個(gè)分量所解釋的方差百分比對主要成分進(jìn)行排名观谦。 在此示例中,我們可以在PC9-10周圍觀察到“elbow ”桨菜,這表明大多數(shù)真實(shí)信號是在前10臺PC中捕獲的豁状。

image

為了識別出數(shù)據(jù)的真實(shí)維度,有三種方法:

  • 用更加受監(jiān)督的方法來確定PCs的異質(zhì)性倒得,比如可以結(jié)合GSEA來分析( The first is more supervised, exploring PCs to determine relevant sources of heterogeneity, and could be used in conjunction with GSEA for example )
  • The second implements a statistical test based on a random null model, but is time-consuming for large datasets, and may not return a clear PC cutoff.
  • The third is a heuristic that is commonly used, and can be calculated instantly.

在這個(gè)例子中三種方法均產(chǎn)生了相似的結(jié)果泻红,以PC 7-12作為閾值。

這個(gè)例子中霞掺,作者選擇10谊路,但是實(shí)際過程中還要考慮:

  • 樹突狀細(xì)胞和NK細(xì)胞可能在PCs12和13中識別,這可能定義了罕見的免疫亞群(比如菩彬,MZB1是漿細(xì)胞樣的er)缠劝。但是除非有一定的知識量,否則很難從背景噪音中發(fā)現(xiàn)骗灶。
  • 用戶可以選擇不同的PCs再進(jìn)行下游分析惨恭,比如選10,15耙旦,50等脱羡。結(jié)果常常有很多的不同。
  • 建議在選擇該參數(shù)時(shí)候免都,盡量偏高一點(diǎn)轻黑。如果僅僅使用5PCs會對下游分析產(chǎn)生不利影響
6.聚類細(xì)胞
pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5)
# 查看前5聚類
head(Idents(pbmc), 5)
7.非線性維度約化(UMAP/TSNE)
# 使用UMAP聚類
pbmc <- RunUMAP(pbmc, dims = 1:10)
DimPlot(pbmc, reduction = "umap")
# 顯示在聚類標(biāo)簽
DimPlot(pbmc, reduction = "umap", label = TRUE)
image
# 使用TSNE聚類
pbmc <- RunTSNE(pbmc, dims = 1:10)
DimPlot(pbmc, reduction = "tsne")
# 顯示在聚類標(biāo)簽
DimPlot(pbmc, reduction = "tsne", label = TRUE)
image
8.發(fā)現(xiàn)差異表達(dá)特征(cluster bioers)
# find all ers of cluster 1
cluster1.ers <- Finders(pbmc, ident.1 = 1, min.pct = 0.25)
head(cluster1.ers, n = 5)

# find all ers distinguishing cluster 5 from clusters 0 and 3
cluster5.ers <- Finders(pbmc, ident.1 = 5, ident.2 = c(0, 3), min.pct = 0.25)
head(cluster5.ers, n = 5)

# find ers for every cluster compared to all remaining cells, report only the positive ones
pbmc.ers <- FindAllers(pbmc, only.pos = TRUE, min.pct = 0.25, logfc.threshold = 0.25)
pbmc.ers %>% group_by(cluster) %>% top_n(n = 2, wt = avg_logFC)

# the ROC test returns the ‘classification power’ for any individual er (ranging from 0 - random, to 1 - perfect)
cluster1.ers <- Finders(pbmc, ident.1 = 0, logfc.threshold = 0.25, test.use = "roc", only.pos = TRUE)

默認(rèn)情況下,識別單個(gè)分簇的 positive and negative ers

FindAllers會識別每個(gè)分簇的ers琴昆,可以測試該分簇與其他分簇或全部細(xì)胞的差異

  • min.pct參數(shù)氓鄙,在兩組細(xì)胞中的任何一組中檢測到的最小百分
  • thresh.test參數(shù),在兩組細(xì)胞間以一定數(shù)量的差異表達(dá)(平均)
  • max.cells.per.ident參數(shù)业舍,通過降低每個(gè)類的采樣值抖拦,提高計(jì)算速度
# 繪圖看看
VlnPlot(pbmc, features = c("MS4A1", "CD79A"))
image
# you can plot raw counts as well
VlnPlot(pbmc, features = c("NKG7", "PF4"), slot = "counts", log = TRUE)
image
FeaturePlot(pbmc, features = c("MS4A1", "GNLY", "CD3E", "CD14", "FCER1A", "FCGR3A", "LYZ", "PPBP", "CD8A"))

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-4zDmBzyp-1573047498978)(C:\Users\baimo\Pictures\1知乎\jvHG5OC0MkXF.png)]

RidgePlot(pbmc, features = c("MS4A1", "CD79A"))
image
DotPlot(pbmc, features = c("MS4A1", "CD79A"))
image
top10 <- pbmc.ers %>% group_by(cluster) %>% top_n(n = 10, wt = avg_logFC)
DoHeatmap(pbmc, features = top10$gene) + NoLegend()
image
9.識別細(xì)胞類型

幸運(yùn)的是,在這個(gè)數(shù)據(jù)集的情況下舷暮,我們可以使用規(guī)范標(biāo)記輕松地將無偏聚類與已知的單元類型相匹配态罪。

new.cluster.ids <- c("Naive CD4 T", "Memory CD4 T", "CD14+ Mono", "B", "CD8 T", "FCGR3A+ Mono", 
    "NK", "DC", "Platelet")
names(new.cluster.ids) <- levels(pbmc)
pbmc <- RenameIdents(pbmc, new.cluster.ids)
DimPlot(pbmc, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市下面,隨后出現(xiàn)的幾起案子复颈,更是在濱河造成了極大的恐慌,老刑警劉巖沥割,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耗啦,死亡現(xiàn)場離奇詭異凿菩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帜讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門衅谷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人似将,你說我怎么就攤上這事获黔。” “怎么了在验?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵玷氏,是天一觀的道長。 經(jīng)常有香客問我腋舌,道長盏触,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任侦厚,我火速辦了婚禮耻陕,結(jié)果婚禮上拙徽,老公的妹妹穿的比我還像新娘刨沦。我一直安慰自己,他們只是感情好膘怕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布想诅。 她就那樣靜靜地躺著,像睡著了一般岛心。 火紅的嫁衣襯著肌膚如雪来破。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天忘古,我揣著相機(jī)與錄音徘禁,去河邊找鬼。 笑死髓堪,一個(gè)胖子當(dāng)著我的面吹牛送朱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播干旁,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼驶沼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了争群?” 一聲冷哼從身側(cè)響起回怜,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎换薄,沒想到半個(gè)月后玉雾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翔试,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年抹凳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遏餐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赢底,死狀恐怖失都,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幸冻,我是刑警寧澤粹庞,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站洽损,受9級特大地震影響庞溜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碑定,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一流码、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧延刘,春花似錦漫试、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至普泡,卻和暖如春播掷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撼班。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工歧匈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砰嘁。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓件炉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親般码。 傳聞我的和親對象是個(gè)殘疾皇子妻率,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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