單細胞36計之17拋磚引玉---使用Seurat對空間轉錄組數據集進行分析,可視化和集成

第十七計 拋磚引玉
以自己的粗淺的意見引出別人高明的見解。

概述

本教程演示了如何使用Seurat(> = 3.2)分析空間分辨的RNA-seq數據。盡管分析流程類似于單細胞RNA序列分析的Seurat工作流程,但我們引入了更新的交互作用和可視化工具,特別著重于空間和分子信息的整合。本教程將涵蓋以下任務,我們認為這些任務在許多空間分析中都是常見的:

  • 正常化
  • 降維和聚類
  • 檢測空間可變特征
  • 互動可視化
  • 與單細胞RNA-seq數據整合
  • 處理多個切片

對于我們的第一個小插圖,我們分析了使用10x Genomics的Visium技術生成的數據集。我們將擴展Seurat以便在不久的將來使用其他數據類型,包括SLIDE-SeqSTARmapMERFISH

首先,我們加載Seurat和此小插圖所需的其他軟件包。

library(Seurat)
library(SeuratData)
library(ggplot2)
library(patchwork)
library(dplyr)

10倍的Visium

數據集

在這里,我們將使用使用Visium v1化學方法生成的最近發布的矢狀小鼠大腦切片的數據集。有兩個連續的前節和兩個(匹配的)連續后節。

您可以在此處下載數據,然后使用該Load10X_Spatial()功能將其加載到Seurat中。這將讀取spaceranger管道的輸出,并返回一個Seurat對象,該對象包含點級表達數據以及組織切片的關聯圖像。您還可以使用我們的SeuratData包來輕松訪問數據,如下所示。安裝數據集后,您可以鍵入?stxBrain以了解更多信息。

InstallData("stxBrain")
brain <- LoadData("stxBrain", type = "anterior1")

數據預處理

我們通過基因表達數據當場執行的初始預處理步驟與典型的scRNA-seq實驗相似。我們首先需要對數據進行歸一化,以解決各個數據點之間的測序深度差異。我們注意到,對于空間數據集,分子計數/斑點的差異可能很大,尤其是在組織中細胞密度存在差異的情況下。我們在這里看到大量的異質性,這需要有效的規范化。

plot1 <- VlnPlot(brain, features = "nCount_Spatial", pt.size = 0.1) + NoLegend()
plot2 <- SpatialFeaturePlot(brain, features = "nCount_Spatial") + theme(legend.position = "right")
wrap_plots(plot1, plot2)
image.png

這些圖表明,斑點上分子計數的變化不僅是技術上的問題,而且還取決于組織的解剖結構。例如,神經元(例如皮質白質)耗竭的組織區域可再現地顯示出較低的分子數。結果,在標準化后LogNormalize()`強制每個數據點具有相同的底層“大小”的標準方法(例如函數)可能會出現問題。

作為替代方案,我們建議使用sctransform(Hafemeister和Satija,Genome Biology 2019),它構建了基因表達的正則化負二項式模型,以便在保留生物學差異的同時考慮技術偽像。有關sctransform更多詳細信息,請參見文章在這里和修拉的小插曲在這里。sctransform可以對數據進行歸一化,檢測高變異特征并將數據存儲在SCT測定中。

brain <- SCTransform(brain, assay = "Spatial", verbose = FALSE)

基因表達可視化

在Seurat中,我們具有探索空間數據固有的視覺本質并與之交互的功能。SpatialFeaturePlot()Seurat中的功能FeaturePlot()`可以擴展,并且可以在組織組織學之上疊加分子數據。例如,在此小鼠大腦數據集中,基因Hpca是強海馬標志物,而Ttr是脈絡叢的標志物。

SpatialFeaturePlot(brain, features = c("Hpca", "Ttr"))
image.png

Seurat中的默認參數強調分子數據的可視化。但是,您還可以通過更改以下參數來調整斑點的大小(及其透明度),以改善組織學圖像的可視化:

  • pt.size.factor-這將縮放斑點的大小。默認值為1.6
  • alpha-最小和最大透明度。默認值為c(1,1)。
  • 嘗試設置為alphac(0.1,1),以降低具有較低表達式的點的透明度
p1 <- SpatialFeaturePlot(brain, features = "Ttr", pt.size.factor = 1)
p2 <- SpatialFeaturePlot(brain, features = "Ttr", alpha = c(0.1, 1))
p1 + p2
image

降維,聚類和可視化

然后,我們可以使用與scRNA-seq分析相同的工作流程,對RNA表達數據進行降維和聚類。

brain <- RunPCA(brain, assay = "SCT", verbose = FALSE)
brain <- FindNeighbors(brain, reduction = "pca", dims = 1:30)
brain <- FindClusters(brain, verbose = FALSE)
brain <- RunUMAP(brain, reduction = "pca", dims = 1:30)

然后,我們可以在UMAP空間帶有DimPlot())中可視化聚類的結果,或者使用覆蓋可視化圖像上的聚類結果SpatialDimPlot()

p1 <- DimPlot(brain, reduction = "umap", label = TRUE)
p2 <- SpatialDimPlot(brain, label = TRUE, label.size = 3)
p1 + p2
image

由于存在許多種顏色,因此可視化哪個體素屬于哪個群集可能具有挑戰性。我們有一些策略可以幫助您解決這個問題。設置label參數會在每個群集的中位數處放置一個彩色框(請參見上圖)。

您還可以使用cells.highlight參數在上劃分特定的關注單元格SpatialDimPlot()`。如下所示,這對于區分單個群集的空間定位非常有用。

SpatialDimPlot(brain, cells.highlight = CellsByIdentities(object = brain, idents = c(2, 1, 4, 3, 
    5, 8)), facet.highlight = TRUE, ncol = 3)
image

交互式繪圖

我們還內置了許多交互式繪圖功能。無論SpatialDimPlot()SpatialFeaturePlot()現在有一個interactive參數,當設置為TRUE,將打開Rstudio觀眾面板與互動閃亮的情節。下面的示例演示了一種交互式SpatialDimPlot()的方法,您可以在其上懸停并查看單元名稱和當前標識類(類似于先前的do.hover`行為)。

SpatialDimPlot(brain, interactive = TRUE)

對于SpatialFeaturePlot(),將“交互性”設置為TRUE會彈出一個交互窗格,您可以在其中調整點的透明度,點的大小以及Assay`要繪制的和特征。瀏覽數據后,選擇完成按鈕將返回最后一個活動圖作為ggplot對象。

SpatialFeaturePlot(brain, features = "Ttr", interactive = TRUE)

LinkedDimPlot()`功能將UMAP表示鏈接到組織圖像表示,并允許交互式選擇。例如,您可以在UMAP圖中選擇一個區域,并且圖像表示中的相應斑點將突出顯示。

LinkedDimPlot(brain)

識別空間可變特征

Seurat提供了兩種工作流程來識別與組織內空間位置相關的分子特征。第一種是基于組織內預先標注的解剖區域執行差異表達,這可以從無監督的聚類或先驗知識中確定。在這種情況下,此策略將起作用,因為上面的群集顯示出明顯的空間限制。

de_markers <- FindMarkers(brain, ident.1 = 5, ident.2 = 6)
SpatialFeaturePlot(object = brain, features = rownames(de_markers)[1:3], alpha = c(0.1, 1), ncol = 3)
image.png

在中實施的另一種方法FindSpatiallyVariables()是在沒有預先注釋的情況下搜索表現出空間圖案的特征。默認方法(method = 'markvariogram)受Trendsceek啟發,該工具將空間轉錄組學數據建模為標記點過程,并計算“變異函數”,該變異函數可識別表達水平取決于其空間位置的基因。更具體地說,此過程計算gamma(r)值,該值測量相距某個“ r”距離的兩個點之間的依賴性。默認情況下,我們在這些分析中使用r值“ 5”,并且僅計算可變基因的這些值(其中變異獨立于空間位置而計算)以節省時間。

我們注意到,文獻中有多種方法可以完成此任務,包括SpatialDESplotch。我們鼓勵感興趣的用戶探索這些方法,并希望在不久的將來為其提供支持。

brain <- FindSpatiallyVariableFeatures(brain, assay = "SCT", features = VariableFeatures(brain)[1:1000], 
    selection.method = "markvariogram")

現在,我們可視化此度量確定的前6個特征的表達。

top.features <- head(SpatiallyVariableFeatures(brain, selection.method = "markvariogram"), 6)
SpatialFeaturePlot(brain, features = top.features, ncol = 3, alpha = c(0.1, 1))
image.png

細分解剖區域

與單單元格對象一樣,您可以對對象進行子集化以集中處理數據的子集。在這里,我們大約將額葉皮層子集化。該過程還有助于在下一節中將這些數據與皮質scRNA-seq數據集進行整合。首先,我們獲取群集的子集,然后根據精確位置進行進一步細分。子集化后,我們可以在完整圖像或裁剪后的圖像上可視化皮質細胞。

cortex <- subset(brain, idents = c(1, 2, 3, 4, 6, 7))
# now remove additional cells, use SpatialDimPlots to visualize what to remove
# SpatialDimPlot(cortex,cells.highlight = WhichCells(cortex, expression = image_imagerow > 400 |
# image_imagecol < 150))
cortex <- subset(cortex, anterior1_imagerow > 400 | anterior1_imagecol < 150, invert = TRUE)
cortex <- subset(cortex, anterior1_imagerow > 275 & anterior1_imagecol > 370, invert = TRUE)
cortex <- subset(cortex, anterior1_imagerow > 250 & anterior1_imagecol > 440, invert = TRUE)
p1 <- SpatialDimPlot(cortex, crop = TRUE, label = TRUE)
p2 <- SpatialDimPlot(cortex, crop = FALSE, label = TRUE, pt.size.factor = 1, label.size = 3)
p1 + p2
image

與單細胞數據集成

在?50um時,來自于病毒測定的斑點將涵蓋多個細胞的表達譜。對于可獲得scRNA-seq數據的系統列表不斷增加,用戶可能有興趣對每個空間體素進行“反卷積”以預測細胞類型的潛在組成。在準備此小插圖時,我們使用了參考scRNA-seq數據集測試了多種decovonlution和整合方法使用SMART-Seq2協議生成的來自Allen Institute的約14,000個成年小鼠皮質細胞分類學。我們一直發現使用積分方法(而不是反卷積方法)具有更好的性能,這可能是由于表征空間和單細胞數據集的噪聲模型存在很大差異,并且積分方法專門設計為對這些差異具有魯棒性。因此,我們應用了Seurat v3中引入的基于“錨”的集成工作流,該工作流使注釋能夠從引用到查詢集的概率傳輸。因此,我們利用sctransform歸一化方法遵循此處介紹的標簽傳輸工作流程,但期望開發出新方法來完成此任務。

我們首先加載數據(可在此處下載),對scRNA-seq參考進行預處理,然后執行標簽轉移。該過程為每個點輸出每個scRNA-seq派生類的概率分類。我們將這些預測添加為Seurat對象中的一項新分析。

allen_reference <- readRDS("../data/allen_cortex.rds")
# note that setting ncells=3000 normalizes the full dataset but learns noise models on 3k cells
# this speeds up SCTransform dramatically with no loss in performance
library(dplyr)
allen_reference <- SCTransform(allen_reference, ncells = 3000, verbose = FALSE) %>% RunPCA(verbose = FALSE) %>% 
    RunUMAP(dims = 1:30)
# After subsetting, we renormalize cortex
cortex <- SCTransform(cortex, assay = "Spatial", verbose = FALSE) %>% RunPCA(verbose = FALSE)
# the annotation is stored in the 'subclass' column of object metadata
DimPlot(allen_reference, group.by = "subclass", label = TRUE)
image
anchors <- FindTransferAnchors(reference = allen_reference, query = cortex, normalization.method = "SCT")
predictions.assay <- TransferData(anchorset = anchors, refdata = allen_reference$subclass, prediction.assay = TRUE, 
    weight.reduction = cortex[["pca"]], dims = 1:30)
cortex[["predictions"]] <- predictions.assay

現在,我們獲得了每個班級每個地點的預測分數。在額葉皮層區域中特別令人感興趣的是層狀興奮性神經元。在這里,我們可以區分這些神經元亞型的不同順序層,例如:

DefaultAssay(cortex) <- "predictions"
SpatialFeaturePlot(cortex, features = c("L2/3 IT", "L4"), pt.size.factor = 1.6, ncol = 2, crop = TRUE)
image

基于這些預測分數,我們還可以預測位置受空間限制的單元格類型。我們使用基于標記點過程的相同方法來定義空間可變特征,但將細胞類型預測得分用作“標記”而不是基因表達。

cortex <- FindSpatiallyVariableFeatures(cortex, assay = "predictions", selection.method = "markvariogram", 
    features = rownames(cortex), r.metric = 5, slot = "data")
top.clusters <- head(SpatiallyVariableFeatures(cortex), 4)
SpatialPlot(object = cortex, features = top.clusters, ncol = 2)
image.png

最后,我們證明我們的整合程序能夠恢復神經元和非神經元子集(包括層狀興奮性,第1層星形膠質細胞和皮質灰質)的已知空間定位模式。

SpatialFeaturePlot(cortex, features = c("Astro", "L2/3 IT", "L4", "L5 PT", "L5 IT", "L6 CT", "L6 IT", 
    "L6b", "Oligo"), pt.size.factor = 1, ncol = 2, crop = FALSE, alpha = c(0.1, 1))
image.png

在Seurat中處理多個切片

小鼠大腦的該數據集包含與大腦另一半相對應的另一個切片。在這里,我們將其讀入并執行相同的初始歸一化。

brain2 <- LoadData("stxBrain", type = "posterior1")
brain2 <- SCTransform(brain2, assay = "Spatial", verbose = FALSE)

為了在同一個Seurat對象中使用多個切片,我們提供了該merge功能。

brain.merge <- merge(brain, brain2)

然后,這使得聯合維數減少并在基礎RNA表達數據上聚類。

DefaultAssay(brain.merge) <- "SCT"
VariableFeatures(brain.merge) <- c(VariableFeatures(brain), VariableFeatures(brain2))
brain.merge <- RunPCA(brain.merge, verbose = FALSE)
brain.merge <- FindNeighbors(brain.merge, dims = 1:30)
brain.merge <- FindClusters(brain.merge, verbose = FALSE)
brain.merge <- RunUMAP(brain.merge, dims = 1:30)

最后,可以在單個UMAP圖中共同可視化數據。SpatialDimPlot()SpatialFeaturePlot()`默認將所有切片繪制為列,將分組/功能繪制為行。

DimPlot(brain.merge, reduction = "umap", group.by = c("ident", "orig.ident"))
image
SpatialDimPlot(brain.merge)
image
SpatialFeaturePlot(brain.merge, features = c("Hpca", "Plp1"))
image.png

致謝

我們要感謝Nigel Delaney和Stephen Williams對新的空間Seurat代碼的有益反饋和貢獻。

幻燈片序列

數據集

在這里,我們將分析使用小鼠海馬體的Slide-seq v2生成的數據集。本教程將采用與10倍Visium數據的空間暈影大致相同的結構,但專門針對特定于Slide-seq數據的演示進行了量身定制。

您可以使用我們的SeuratData包來輕松訪問數據,如下所示。安裝數據集后,您可以鍵入?ssHippo以查看用于創建Seurat對象的命令。

InstallData("ssHippo")
slide.seq <- LoadData("ssHippo")

數據預處理

通過基因表達數據對珠子進行的初始預處理步驟與其他空間Seurat分析和典型的scRNA-seq實驗相似。在這里,我們注意到許多珠子的UMI計數特別低,但選擇保留所有檢測到的珠子用于下游分析。

plot1 <- VlnPlot(slide.seq, features = "nCount_Spatial", pt.size = 0, log = TRUE) + NoLegend()
slide.seq$log_nCount_Spatial <- log(slide.seq$nCount_Spatial)
plot2 <- SpatialFeaturePlot(slide.seq, features = "log_nCount_Spatial") + theme(legend.position = "right")
wrap_plots(plot1, plot2)
image

然后,我們使用sctransform標準化數據并執行標準的scRNA-seq維數減少和聚類工作流。

slide.seq <- SCTransform(slide.seq, assay = "Spatial", ncells = 3000, verbose = FALSE)
slide.seq <- RunPCA(slide.seq)
slide.seq <- RunUMAP(slide.seq, dims = 1:30)
slide.seq <- FindNeighbors(slide.seq, dims = 1:30)
slide.seq <- FindClusters(slide.seq, resolution = 0.3, verbose = FALSE)

然后,我們可以在UMAP空間(使用DimPlot())或在珠坐標空間使用來可視化聚類的結果[SpatialDimPlot()](https://satijalab.org/seurat/reference/SpatialPlot.html)

plot1 <- DimPlot(slide.seq, reduction = "umap", label = TRUE)
plot2 <- SpatialDimPlot(slide.seq, stroke = 0)
plot1 + plot2

[圖片上傳失敗...(image-30c441-1615977780709)]

SpatialDimPlot(slide.seq, cells.highlight = CellsByIdentities(object = slide.seq, idents = c(1, 
    6, 13)), facet.highlight = TRUE)

[圖片上傳失敗...(image-bea41c-1615977780709)]

與scRNA-seq參考整合

為了促進Slide-seq數據集的細胞類型注釋,我們利用了由Saunders *,Macosko *等人制作的現有小鼠單細胞RNA-seq海馬數據集2018。數據可在此處作為已處理的Seurat對象下載,而原始計數矩陣可在DropViz網站上獲得

ref <- readRDS("../data/mouse_hippocampus_reference.rds")

本文的原始注釋在Seurat對象的單元元數據中提供。這些注釋以幾種“解決方案”提供,從大類(ref$class)到細胞類型()中的子類ref$subcluster。出于本小插圖的目的,我們將對細胞類型注釋(ref$celltype)進行修改,使之達到良好的平衡。

我們將從運行Seurat標簽轉移方法開始,以預測每個珠子的主要細胞類型。

anchors <- FindTransferAnchors(reference = ref, query = slide.seq, normalization.method = "SCT", 
    npcs = 50)
predictions.assay <- TransferData(anchorset = anchors, refdata = ref$celltype, prediction.assay = TRUE, 
    weight.reduction = slide.seq[["pca"]], dims = 1:50)
slide.seq[["predictions"]] <- predictions.assay

然后,我們可以可視化一些主要預期類別的預測分數。

DefaultAssay(slide.seq) <- "predictions"
SpatialFeaturePlot(slide.seq, features = c("Dentate Principal cells", "CA3 Principal cells", "Entorhinal cortex", 
    "Endothelial tip", "Ependymal", "Oligodendrocyte"), alpha = c(0.1, 1))
image.png
slide.seq$predicted.id <- GetTransferPredictions(slide.seq)
Idents(slide.seq) <- "predicted.id"
SpatialDimPlot(slide.seq, cells.highlight = CellsByIdentities(object = slide.seq, idents = c("CA3 Principal cells", 
    "Dentate Principal cells", "Endothelial tip")), facet.highlight = TRUE)
image.png

識別空間可變特征

正如Visium插圖中提到的那樣,我們可以通過兩種通用方法來識別空間可變的特征:預先標注的解剖區域之間的差異表達測試或測量特征對空間位置的依賴性的統計信息。

在這里,我們FindSpatiallyVariableFeatures()通過設置來實現Moran's I的實現,以演示后者method = 'moransi'。Moran's I計算總體空間自相關,并給出一個統計量(類似于相關系數),該統計量用于衡量要素對空間位置的依賴性。這使我們能夠根據表達的空間變化程度對要素進行排名。為了便于快速估算此統計信息,我們實施了一種基本的分級策略,該策略將在Slide-seq圓盤上繪制一個矩形網格,并對每個分級中的特征和位置取平均。x和y方向上的倉數分別由x.cutsy.cuts參數控制。此外,雖然不是必需的,但安裝可選Rfast2軟件包(install.packages('Rfast2')`),將通過更有效的實施方式來顯著減少運行時間。

DefaultAssay(slide.seq) <- "SCT"
slide.seq <- FindSpatiallyVariableFeatures(slide.seq, assay = "SCT", slot = "scale.data", features = VariableFeatures(slide.seq)[1:1000], 
    selection.method = "moransi", x.cuts = 100, y.cuts = 100)

現在,我們可視化由Moran's I識別的前6個特征的表達。

SpatialFeaturePlot(slide.seq, features = head(SpatiallyVariableFeatures(slide.seq, selection.method = "moransi"), 
    6), ncol = 3, alpha = c(0.1, 1), max.cutoff = "q95")
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容