Seurat官方教程2 | 多模式數(shù)據(jù)分析

教程背景

這個(gè)例子演示了允許用戶使用Seurat分析和探索多模式數(shù)據(jù)的新特性。雖然這只是一個(gè)初始版本,但我們很高興在未來(lái)為多模態(tài)數(shù)據(jù)集發(fā)布重要的新功能。

在這里,我們分析了由CITE-seq產(chǎn)生的8,617個(gè)臍帶血單核細(xì)胞(CBMCs)的數(shù)據(jù)集,我們同時(shí)測(cè)量了單細(xì)胞轉(zhuǎn)錄組和11個(gè)表面蛋白的表達(dá),其水平通過(guò)DNA-barcode抗體來(lái)量化。首先,我們加載兩個(gè)計(jì)數(shù)矩陣:一個(gè)用于RNA測(cè)量,另一個(gè)用于抗體衍生標(biāo)簽ADT。你可以在這里下載ADT文件和RNA文件

1.加載RNA UMI矩陣

注意,這個(gè)數(shù)據(jù)集還包含了大約5%的小鼠細(xì)胞,我們可以將其作為蛋白質(zhì)測(cè)量的陰性對(duì)照。因此,基因表達(dá)矩陣在每個(gè)基因的開(kāi)頭都附加了HUMAN_或MOUSE_。

cbmc.rna <- as.sparse(read.csv(file = "Analysis/data/GSE100866_CBMC_8K_13AB_10X-RNA_umi.csv.gz", sep = ",", header = TRUE, row.names = 1))

為了讓生活更容易繼續(xù)下去,我們將拋棄除前100個(gè)高度表達(dá)的老鼠基因外的所有基因,并從CITE-seq前綴中去除“HUMAN_”

# 這個(gè)函數(shù)有幾個(gè)默認(rèn)參數(shù),ncontrols = 100,prefix = "HUMAN_",controls = "MOUSE_"
cbmc.rna <- CollapseSpeciesExpressionMatrix(cbmc.rna)

2.加載ADT UMI矩陣

cbmc.adt <- as.sparse(read.csv(file = "Analysis/data/GSE100866_CBMC_8K_13AB_10X-ADT_umi.csv.gz", sep = ",", header = TRUE, row.names = 1))

在向Seurat添加多模態(tài)數(shù)據(jù)時(shí),可以使用重復(fù)的特性名稱(chēng)。每一組模態(tài)數(shù)據(jù)(例如。RNA、ADT等)儲(chǔ)存在自己的Assay對(duì)象中。其中一個(gè)Assay對(duì)象被稱(chēng)為“default assay”,意思是它用于所有的分析和可視化。若要從非默認(rèn)Assay中提取數(shù)據(jù),可以指定一個(gè)與Assay鏈接的鍵,用于提取特征。要查看所有對(duì)象的所有鍵,請(qǐng)使用Key function。
最后,我們觀察到CCR5、CCR7和CD10的低富集,因此將它們從矩陣中去除(可選)。(關(guān)鍵是這三個(gè)蛋白得低富集怎么看出來(lái)的?)

cbmc.adt <- cbmc.adt[setdiff(rownames(x = cbmc.adt), c("CCR5", "CCR7", "CD10")), ]

3.設(shè)置一個(gè)Seurat對(duì)象,并基于RNA表達(dá)對(duì)細(xì)胞進(jìn)行聚類(lèi)

下面的步驟表示基于scRNA-seq數(shù)據(jù)對(duì)pbmc進(jìn)行快速聚類(lèi)。有關(guān)單個(gè)步驟或更高級(jí)選項(xiàng)的詳細(xì)信息,請(qǐng)參見(jiàn)這里的PBMC集群指導(dǎo)教程。

cbmc <- CreateSeuratObject(counts = cbmc.rna) # 創(chuàng)建seurat對(duì)象
cbmc <- NormalizeData(cbmc) # 標(biāo)準(zhǔn)化
cbmc <- FindVariableFeatures(cbmc) # 選擇高變基因
cbmc <- ScaleData(cbmc) # 歸一化
cbmc <- RunPCA(cbmc, verbose = FALSE) # 運(yùn)行PCA降維
ElbowPlot(cbmc, ndims = 50) # 確定取多少個(gè)PCs
Snipaste_2020-09-23_15-09-57.png

這里教程說(shuō)選擇13個(gè)PCs,但是看代碼選的是25個(gè),蜜汁迷惑。

cbmc <- FindNeighbors(cbmc, dims = 1:25)
cbmc <- FindClusters(cbmc, resolution = 0.8)
cbmc <- RunTSNE(cbmc, dims = 1:25, method = "FIt-SNE")

# 找到定義每個(gè)cluster的標(biāo)記,并使用它們對(duì)cluster進(jìn)行注釋?zhuān)覀兪褂胢ax.cells.per加快進(jìn)程
cbmc.rna.markers <- FindAllMarkers(cbmc, max.cells.per.ident = 100, min.diff.pct = 0.3, only.pos = TRUE)
head(cbmc.rna.markers)
             p_val avg_logFC pct.1 pct.2    p_val_adj cluster  gene
IL7R  4.280959e-21 1.1368139 0.872 0.274 8.776395e-17       0  IL7R
LTB   3.149773e-20 1.0246049 0.985 0.525 6.457351e-16       0   LTB
LDHB  8.557593e-20 0.9786093 0.964 0.527 1.754392e-15       0  LDHB
TRBC2 9.896619e-18 0.7739586 0.868 0.425 2.028906e-13       0 TRBC2
IL32  9.951232e-18 0.9599525 0.896 0.327 2.040102e-13       0  IL32
ITM2A 2.335897e-17 0.8866571 0.786 0.298 4.788822e-13       0 ITM2A

注意,為了簡(jiǎn)單起見(jiàn),我們將兩個(gè)CD14+單核細(xì)胞簇(HLA-DR基因表達(dá)不同)和NK細(xì)胞簇(細(xì)胞周期階段不同)合并。
這里直接進(jìn)行了細(xì)胞類(lèi)型注釋?zhuān)⑨尩眠^(guò)程?

new.cluster.ids <- c("Memory CD4 T", "CD14+ Mono", "Naive CD4 T", "NK", "CD14+ Mono", "Mouse", "B", 
    "CD8 T", "CD16+ Mono", "T/Mono doublets", "NK", "CD34+", "Multiplets", "Mouse", "Eryth", "Mk", 
    "Mouse", "DC", "pDCs")
names(new.cluster.ids) <- levels(cbmc)
cbmc <- RenameIdents(cbmc, new.cluster.ids)
DimPlot(cbmc, label = TRUE) + NoLegend()
Snipaste_2020-09-23_15-19-12.png

4.將蛋白質(zhì)表達(dá)水平添加到Seurat對(duì)象

Seurat v3.0允許您將來(lái)自多個(gè)分析的信息存儲(chǔ)在同一個(gè)對(duì)象中,只要數(shù)據(jù)是多模態(tài)的(在同一組細(xì)胞中收集)。您可以使用SetAssayData和GetAssayData訪問(wèn)器函數(shù)來(lái)添加和從其他分析中獲取數(shù)據(jù)。
我們將定義一個(gè)ADT試驗(yàn),并為它存儲(chǔ)原始計(jì)數(shù)。
如果你對(duì)這些數(shù)據(jù)內(nèi)部如何存儲(chǔ)感興趣,您可以查看Assay類(lèi),它在object . R中定義。注意,所有的單細(xì)胞表達(dá)數(shù)據(jù),包括RNA數(shù)據(jù),仍然存儲(chǔ)在Assay對(duì)象中,也可以使用GetAssayData訪問(wèn)。

cbmc[["ADT"]] <- CreateAssayObject(counts = cbmc.adt)

現(xiàn)在我們可以重復(fù)我們通常在RNA上運(yùn)行的預(yù)處理(標(biāo)準(zhǔn)化和縮放)步驟,但是需要修改‘a(chǎn)ssay’的參數(shù)對(duì)于CITE-seq數(shù)據(jù),我們不建議使用典型的對(duì)數(shù)標(biāo)準(zhǔn)化。相反,我們使用中心對(duì)數(shù)比(CLR)歸一化,獨(dú)立計(jì)算每個(gè)特性。與原始版本相比,這是一個(gè)略微改進(jìn)的過(guò)程,我們將很快發(fā)布更高級(jí)的CITE-seq規(guī)范化版本。

# 這里的標(biāo)準(zhǔn)化方法是CLR
cbmc <- NormalizeData(cbmc, assay = "ADT", normalization.method = "CLR")
cbmc <- ScaleData(cbmc, assay = "ADT")

5.觀察RNA簇上的蛋白水平

您可以使用任何ADT標(biāo)記的名稱(chēng)?!癮dt_CD4”),在FetchData、FeaturePlot、RidgePlot、FeatureScatter、DoHeatmap或任何其他可視化特性中。
Q1:這里得ADTfeatures為什么突然多了三個(gè)字母adt_
Q2:這里得蛋白和RNA對(duì)應(yīng)得表達(dá)水平,從下圖可以看出來(lái)什么?

# in this plot, protein (ADT) levels are on top, and RNA levels are on the bottom
FeaturePlot(cbmc, features = c("adt_CD3", "adt_CD11c", "adt_CD8", "adt_CD16", "CD3E", "ITGAX", "CD8A", 
    "FCGR3A"), min.cutoff = "q05", max.cutoff = "q95", ncol = 4)

在這個(gè)圖中,蛋白質(zhì)(ADT)水平在上面,RNA水平在下面。

Snipaste_2020-09-23_15-31-28.png

山脊圖繪制

RidgePlot(cbmc, features = c("adt_CD3", "adt_CD11c", "adt_CD8", "adt_CD16"), ncol = 2)
Snipaste_2020-09-23_15-32-53.png

繪制ADT散點(diǎn)圖(如FACS的雙軸圖)。注意,如果需要的話,你甚至可以使用HoverLocator和FeatureLocator來(lái)“gate”細(xì)胞。

FeatureScatter(cbmc, feature1 = "adt_CD19", feature2 = "adt_CD3")
Snipaste_2020-09-23_15-35-09.png

查看蛋白質(zhì)和RNA之間的關(guān)系

FeatureScatter(cbmc, feature1 = "adt_CD3", feature2 = "CD3E")
image.png

查看T細(xì)胞中CD4和CD8的水平

tcells <- subset(cbmc, idents = c("Naive CD4 T", "Memory CD4 T", "CD8 T"))
FeatureScatter(tcells, feature1 = "adt_CD4", feature2 = "adt_CD8")
Snipaste_2020-09-23_15-39-57.png

讓我們看看原始的(非標(biāo)準(zhǔn)化的)ADT的count值。你可以看到這些值相當(dāng)高,特別是與RNA值相比。這是由于細(xì)胞中蛋白質(zhì)拷貝數(shù)顯著增加,這大大減少了ADT數(shù)據(jù)中的“drop-out”。
對(duì)于drop-out如何理解?

FeatureScatter(tcells, feature1 = "adt_CD4", feature2 = "adt_CD8", slot = "counts")
image.png

如果你仔細(xì)觀察,你會(huì)發(fā)現(xiàn)我們的CD8 T細(xì)胞群富含CD8 T細(xì)胞,但仍然包含許多CD4+ CD8- T細(xì)胞。這是因?yàn)槌跏糃D4和CD8 T細(xì)胞在轉(zhuǎn)錄上非常相似,CD4和CD8的RNA丟失水平相當(dāng)高。這說(shuō)明了單獨(dú)從scRNA-seq數(shù)據(jù)中定義細(xì)微的免疫細(xì)胞差異的挑戰(zhàn)。

saveRDS(cbmc, file = "Analysis/cbmc.rds")

6.識(shí)別簇間差異表達(dá)的蛋白

對(duì)cluster進(jìn)行采樣,每個(gè)cluster最多300個(gè)細(xì)胞(使小cluster的熱圖更容易看到)。

cbmc.small <- subset(cbmc, downsample = 300)

找到所有cluster的蛋白質(zhì)標(biāo)記,并繪制一個(gè)熱圖。

adt.markers <- FindAllMarkers(cbmc.small, assay = "ADT", only.pos = TRUE)
DoHeatmap(cbmc.small, features = unique(adt.markers$gene), assay = "ADT", angle = 90) + NoLegend()
image.png

你可以看到我們的未知細(xì)胞同時(shí)表達(dá)骨髓和淋巴標(biāo)記(在RNA水平上也是如此)。它們可能是應(yīng)該被丟棄的細(xì)胞團(tuán)塊(多胞胎)。我們現(xiàn)在也要移除老鼠細(xì)胞。

cbmc <- subset(cbmc, idents = c("Multiplets", "Mouse"), invert = TRUE)

7.直接在蛋白質(zhì)水平上聚類(lèi)

還可以直接在CITE-seq數(shù)據(jù)上運(yùn)行降維和基于圖的聚類(lèi)。

#因?yàn)槲覀儗V泛地使用ADT數(shù)據(jù),所以我們將把默認(rèn)assay改為“ADT”assay。這將導(dǎo)致所有函數(shù)默認(rèn)使用ADT數(shù)據(jù),而不是要求我們每次都指定它
DefaultAssay(cbmc) <- "ADT"
cbmc <- RunPCA(cbmc, features = rownames(cbmc), reduction.name = "pca_adt", reduction.key = "pca_adt_", 
    verbose = FALSE)
DimPlot(cbmc, reduction = "pca_adt")
image.png

在我們?cè)贏DT級(jí)別上重新聚類(lèi)數(shù)據(jù)之前,我們將稍后隱藏RNA集群id。

cbmc[["rnaClusterID"]] <- Idents(cbmc)

現(xiàn)在,我們僅在ADT(蛋白質(zhì))水平上使用PCA重新計(jì)算tSNE。

cbmc <- RunTSNE(cbmc, dims = 1:10, reduction = "pca_adt", reduction.key = "adtTSNE_", reduction.name = "tsne_adt")
cbmc <- FindNeighbors(cbmc, features = rownames(cbmc), dims = NULL)
cbmc <- FindClusters(cbmc, resolution = 0.2, graph.name = "ADT_snn")

我們可以比較RNA和蛋白質(zhì)的聚類(lèi),并使用它來(lái)注釋蛋白質(zhì)聚類(lèi)。
(當(dāng)然,我們也可以使用findmarker)

clustering.table <- table(Idents(cbmc), cbmc$rnaClusterID)
clustering.table
     Memory CD4 T CD14+ Mono Naive CD4 T   NK    B CD8 T CD16+ Mono T/Mono doublets CD34+ Eryth   Mk   DC
  0          1754          0        1217   29    0    27          0               5     2     4   24    1
  1             0       2189           0    4    0     0         30               1     1     5   25   55
  2             3          0           2  890    3     1          0               0     1     3    7    2
  3             0          4           0    2  319     0          2               0     2     2    3    0
  4            24          0          18    4    1   243          0               0     0     1    2    0
  5             1         27           4  157    2     2         10              56     0     9   16    6
  6             4          5           0    1    0     0          0               1   113    81   16    5
  7             4         59           4    0    0     0          9             117     0     0    2    0
  8             0          9           0    2    0     0        179               0     0     0    1    0
  9             0          0           1    0    0     0          0               0     0     0    0    1
  10            1          0           2    0   25     0          0               2     0     0    0    0
    
     pDCs
  0     2
  1     0
  2     1
  3     0
  4     0
  5     2
  6     0
  7     1
  8     0
  9    43
  10    0

根據(jù)上面的結(jié)果對(duì)蛋白質(zhì)水平的細(xì)胞進(jìn)行細(xì)胞類(lèi)型鑒定

new.cluster.ids <- c("CD4 T", "CD14+ Mono", "NK", "B", "CD8 T", "NK", "CD34+", "T/Mono doublets", 
    "CD16+ Mono", "pDCs", "B")
names(new.cluster.ids) <- levels(cbmc)
cbmc <- RenameIdents(cbmc, new.cluster.ids)

tsne_rnaClusters <- DimPlot(cbmc, reduction = "tsne_adt", group.by = "rnaClusterID") + NoLegend()
tsne_rnaClusters <- tsne_rnaClusters + ggtitle("Clustering based on scRNA-seq") + theme(plot.title = element_text(hjust = 0.5))
tsne_rnaClusters <- LabelClusters(plot = tsne_rnaClusters, id = "rnaClusterID", size = 4)

tsne_adtClusters <- DimPlot(cbmc, reduction = "tsne_adt", pt.size = 0.5) + NoLegend()
tsne_adtClusters <- tsne_adtClusters + ggtitle("Clustering based on ADT signal") + theme(plot.title = element_text(hjust = 0.5))
tsne_adtClusters <- LabelClusters(plot = tsne_adtClusters, id = "ident", size = 4)

注意:為了進(jìn)行比較,RNA和蛋白的聚類(lèi)都是在使用ADT距離矩陣生成的tSNE上顯示的。

wrap_plots(list(tsne_rnaClusters, tsne_adtClusters), ncol = 2)
image.png

基于adt的聚類(lèi)產(chǎn)生了類(lèi)似的結(jié)果,但有一些區(qū)別:

  • 基于CD4、CD8、CD14和CD45RA的強(qiáng)大ADT數(shù)據(jù),CD4/CD8 T細(xì)胞群的聚類(lèi)得到了改善
  • 然而,一些ADT數(shù)據(jù)中不包含有很好的區(qū)別蛋白標(biāo)記的簇(如Mk/Ery/DC)會(huì)失去分離
  • 也可以在RNA水平上使用findmarker驗(yàn)證這一點(diǎn)
tcells <- subset(cbmc, idents = c("CD4 T", "CD8 T"))
FeatureScatter(tcells, feature1 = "CD4", feature2 = "CD8")
image.png
RidgePlot(cbmc, features = c("adt_CD11c", "adt_CD8", "adt_CD16", "adt_CD4", "adt_CD19", "adt_CD14"), 
    ncol = 2)
image.png

保存結(jié)果

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

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