空间转录组技术2020年被nature method评为年度技术,基于单细胞组学在近三年发展起来的新兴领域,可以解析时间和空间维度上单个细胞的基因表达模式,以及细胞类群的空间位置关系及生物学特征。
空间捕获技术通过使用空间条形码mRNA结合寡核苷酸为Visium Spatial平台提供动力。mRNA分子获得空间条形码有两种方法。
在新鲜冷冻组织中,组织被固定并透化以释放与相邻捕获探针结合的RNA,从而捕获基因表达信息。然后从捕获的RNA和测序文库合成cDNA。
在FFPE组织中,组织被透化以释放与载玻片上相邻捕获探针结合的连接探针对,从而捕获基因表达信息。对蛋白质编码转录组中每个基因特异的成对探针与它们的基因靶标杂交,然后彼此连接。探针对被扩展以包含空间条形码和准备好的测序文库的补充。
install.packages('Seurat')
install.packages("devtools")
devtools::install_github('satijalab/seurat-data')#直接调用Seurat内置数据集。示例文件也可以自行下载
#加载相应包
library(Seurat)
library(ggplot2)
library(patchwork)
library(dplyr)
library(hdf5r)
library(SeuratData)
示例数据自行下载
注:自行下载时,如果是为了走下游分析,只需要下载 filtered_feature_bc_matrix.h5文件和一个spatial文件夹就可以了。其中,spatial主要是存储图片以及细胞对应的图中的位置信息,不包含表达量信息。
以小鼠大脑切片数据为例
InstallData("stxBrain")
brain <- LoadData("stxBrain", type = "anterior1")
#这是官方流程给的加载方式,下载较慢容易失败,建议自行下载后,按如下代码加载数据
brain <- Load10X_Spatial(data.dir = a,
filename = 'V1_Mouse_Brain_Sagittal_Anterior_Section_2_filtered_feature_bc_matrix.h5',
assay = "Spatial",
slice = 'spatial',
filter.matrix = T)
#简单查看数据集
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)
这些图表明,分子计数(molecular counts)在点间的差异不仅是技术性的,而且还依赖于组织解剖。例如,组织中神经元消耗的区域(如皮层白质),可再生地显示出较低的分子计数。因此,标准方法(如LogNormalize函数)可能会有问题,因为它会强制每个数据点在标准化之后具有相同的底层“大小”。
作为一种替代方法,我们推荐使用sctransform (Hafemeister和Satija,已出版),它构建了基因表达的正则化负二项模型,以便在保留生物差异的同时考虑技术因素。有关sctransform的更多信息,请参见 here(https://www.biorxiv.org/content/10.1101/576827v2)的预印和here(https://satijalab.org/seurat/sctransform_vignette.html)的Seurat教程。sctransform将数据归一化,检测高方差特征,并将数据存储在SCT分析中。
brain <- SCTransform(brain, assay = "Spatial", verbose = FALSE)
Seurat 有探索空间数据固有的视觉性质并与之交互的功能。Seurat 中的 SpatialFeaturePlot() 函数扩展了 FeaturePlot(),并且可以在组织组织学的顶部叠加分子数据。例如,在小鼠大脑的这个数据集中,基因 Hpca 是一个强大的海马标记,而 Ttr 是一个脉络丛的标记。
SpatialFeaturePlot(brain, features = c("Hpca", "Ttr"))#特定基因表达的分布
Seurat调整斑点的大小(和它们的透明度)来改善组织学图像的可视化,通过改变以下参数:
pt.size。这将调整斑点像素大小。默认为1.6
alpha -最小和最大透明度。默认是c(1,1)
p1 <- SpatialFeaturePlot(brain, features = "Ttr", pt.size.factor = 1)
p2 <- SpatialFeaturePlot(brain, features = "Ttr", alpha = c(0.1, 1))#修改透明度,从而使得表达基因数目较低的处于低可视状态
p1 + p2
这部分流程与scRNA流程相似。
brain <- RunPCA(brain, assay = "SCT", verbose = FALSE)#均一化
brain <- FindNeighbors(brain, reduction = "pca", dims = 1:30)#选取30个基因进行降维,演示流程
brain <- FindClusters(brain, verbose = FALSE)#聚类
brain <- RunUMAP(brain, reduction = "pca", dims = 1:30)#降维
#使用DimPlot可视化,效果与scRNA一致
pp1 <- DimPlot(brain, reduction = "umap", label = TRUE)
#使用SpatialDimPlot,使结果与空间位置叠加
pp2 <- SpatialDimPlot(brain, label = TRUE, label.size = 3)
pp1 + pp2
由于色彩众多,具体使用哪些色彩展示,因人而异。可以使用label参数进行个性化定制。
此外,也可以使某些群突出显示。
patialDimPlot(brain,
cells.highlight = CellsByIdentities(object = brain,
idents = c(2, 1, 4, 3,
5, 8)),
facet.highlight = TRUE, ncol = 3)
Seurat提供两种方式
第一种是基于组织内预先注释的解剖区域进行差异表达,这可以从无监督聚类或先验知识中确定。这种策略对于分群后空间位置差异较大的群体能够起作用。
de_markers <- FindMarkers(brain, ident.1 = 5, ident.2 = 6)#查找第5群和第6群的差异基因
SpatialFeaturePlot(object = brain,
features = rownames(de_markers)[1:3],
alpha = c(0.1, 1), ncol = 3)#展示前3个差异基因所在空间的位置
第二种,在 FindSpatiallyVariables() 中实现的另一种方法是在没有预注释的情况下搜索表现出空间模式的特征。默认方法(method = 'markvariogram)受到 Trendsceek 的启发,它将空间转录组学数据建模为标记点过程并计算“变异函数”,该方法识别表达水平取决于其空间位置的基因。更具体地说,此过程计算 gamma(r) 值,该值测量相距特定“r”距离的两个点之间的相关性。默认情况下,我们在这些分析中使用 r 值“5”,并且仅计算可变基因的这些值(其中变异的计算与空间位置无关)以节省时间。
现在,我们可视化此方法确定的前6个特征基因的表达情况。
rain <- FindSpatiallyVariableFeatures(brain,
assay = "SCT",
features = VariableFeatures(brain)[1:1000],
selection.method = "markvariogram")#找到特异基因
top.features <- head(
SpatiallyVariableFeatures(brain,
selection.method = "markvariogram"), 6)
SpatialFeaturePlot(brain, features = top.features, ncol = 3, alpha = c(0.1, 1))
R version 4.1.1 (2021-08-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.3 LTS
#截至20210913,所有包均升级到最新版
以上过程参考Seurat官方教程:
https://satijalab.org/seurat/articles/spatial_vignette.html