有关10X空间转录组Visium的前面的文章:
- Seurat v3.2 官网:https://satijalab.org/seurat/devinstall.html
环境说明:
为了避免与之前的Seurat包冲突,当前环境没有安装之前的Seurat版本的win10 Rstudio,而非服务器生产环境
一、Seurat v3.2 对空间转录组Visium的结果分析中实现的功能:
- 归一化
- 降维和聚类
- 检测空间可变特征(spatially-variable features)
- 互动式的可视化
- 与单细胞RNA-seq数据整合
- 处理多个切片
二、安装Seurat v3.2 :
#For learning Seurat v2.3
#Author:Robin 2019.12.22
# Enter commands in R (or R studio, if installed)
# Install the devtools package from Hadley Wickham
install.packages("devtools")
devtools::install_github("satijalab/seurat", ref = "spatial")
devtools::install_github('satijalab/seurat-data')
一开始尝试了几次都装不成功,后面突然就行了,而且网速还很快,果然是看运气的。。
成功安装!
> library(Seurat)
> package.version("Seurat")
[1] "3.1.2" #说是官网v3.2,实际上是v3.1.2
加载包:
library(Seurat)
library(SeuratData)
library(ggplot2)
library(cowplot)
library(dplyr)
对于第一个小插图,我们分析了使用10x Genomics 的Visium技术生成的数据集。我们将扩展Seurat以便在不久的将来使用其他数据类型,包括SLIDE-Seq,STARmap和MERFISH。
三、下载数据集(但一般不这么做)
在这里,我们将使用使用Visium v1化学方法生成的最近发布的矢状小鼠大脑切片数据集。小鼠大脑的矢状面前段后段(There are two serial anterior sections, and two (matched) serial posterior sections.)
- 这将读取spaceranger管道的输出,并返回一个Seurat对象,该对象包含spot-level表达数据以及组织切片的关联图像。
- 您还可以使用我们的SeuratData包来轻松访问数据,如下所示。安装数据集后,您可以键入
?stxBrain
以了解更多信息。
InstallData("stxBrain")
brain <- LoadData("stxBrain", type = "anterior1")
由于国内网速很慢,建议直接在此处下载数据包到本地,然后使用Load10X_Spatial
函数将其加载到Seurat中。
四、加载10X Visiumspaceranger
管道中生成的结果文件
在生产中,我们实际上加载的数据集通常是自己经过Visium spaceranger
管道生成的结果文件,而非直接从网上下载的数据集。
从10X Visium流程中生成结果文件的方法: 10X空间转录组Visium学习笔记(三)跑通Visium全流程记录
查看目录结构
$cd /V1_Adult_Mouse_Brain/outs
$tree -L 2
.
├── analysis
│ ├── clustering
│ ├── diffexp
│ ├── pca
│ ├── tsne
│ └── umap
├── cloupe.cloupe
├── filtered_feature_bc_matrix
│ ├── barcodes.tsv.gz
│ ├── features.tsv.gz
│ └── matrix.mtx.gz
├── filtered_feature_bc_matrix.h5 #实际上需要的文件①
├── metrics_summary.csv
├── molecule_info.h5
├── possorted_genome_bam.bam
├── possorted_genome_bam.bam.bai
├── raw_feature_bc_matrix
│ ├── barcodes.tsv.gz
│ ├── features.tsv.gz
│ └── matrix.mtx.gz
├── raw_feature_bc_matrix.h5
├── spatial # 实际上需要的文件②;记录空间信息:用户提供的原始全分辨率brightfield图像的下采样版本。下采样是通过box滤波实现的,它对全分辨率图像中像素块的RGB值进行平均,得到下采样图像中一个像素点的RGB值。
│ ├── aligned_fiducials.jpg
│ ├── detected_tissue_image.jpg
│ ├── scalefactors_json.json
│ ├── tissue_hires_image.png
│ ├── tissue_lowres_image.png
│ └── tissue_positions_list.csv
└── web_summary.html
9 directories, 20 files
加载数据
此处是将服务器之前跑的Space Ranger的输出结果 filtered_feature_bc_matrix.h5
文件和一个spatial
文件夹放置到本地win10环境中test/
目录下
读取文件需要安装好
hdf5r
包
> brain<-Load10X_Spatial(
+ data.dir = 'E:\\BioInfo\\DATA\\Visium\\test', #该目录包含10X提供的matrix.mtx,genes.tsv(或features.tsv)和barcodes.tsv文件。
+ assay = "Spatial",
+ slice = "slice1", #组织切片存储图像的名称
+ filter.matrix = TRUE, #仅保留已确定位于组织上方的spot
+ to.upper = FALSE, #将所有功能名称转换为大写。 例如,当分析需要在人类和小鼠基因名称之间进行比较时,该功能将非常有用。
+ )
# 查看Seurat对象信息
> brain
An object of class Seurat
31053 features across 2698 samples within 1 assay
Active assay: Spatial (31053 features)
当然,也可以?stxBrain会给出类似10X ATAC构建Seurat对象那种方法,不过可能有些麻烦:Seurat 新版教程:分析空间转录组数据
Seurat中如何存储空间数据?
来自10x的visium数据包含以下数据类型:
- 基因表达矩阵的点
- 组织切片的图像(从数据采集期间的H&E染色获得)
- 将原始高分辨率图像与此处用于可视化的较低分辨率图像相关联的比例因子
- 在Seurat对象中,基因表达矩阵的spot类似于典型的“ RNA”
Assay
,但它包含spot水平,而不是单细胞水平数据。 - 图像本身存储在Seurat对象的
images
新插槽中。 - 所述
images
槽图还存储必要的信息,以将spot与其在组织图像上的物理位置相关联
Seurat对象结构跟以前差不多
五、数据预处理
1. 数据标准化 Normalization
与scRNA-seq实验相似。除了测序深度的差异,对于空间数据集,分子计数/spot的差异可能很大,尤其是如果整个组织的细胞密度存在差异时。
plot1 <- VlnPlot(brain, features = "nCount_Spatial", pt.size = 0.5) + NoLegend()
plot2 <- SpatialFeaturePlot(brain, features = "nCount_Spatial") + theme(legend.position = "right")
plot_grid(plot1, plot2)
- 这些图表明,分子计数(molecular counts)在点间的差异不仅是技术上的,而且还取决于组织的解剖结构(组织中神经元耗竭的区域(如皮层白质),可重复显示较低的分子数)
- 因此,标准方法(如LogNormalize函数)可能会有问题,因为它会强制每个数据点在标准化之后具有相同的底层“大小”underlying ‘size’
- 作为一种替代方法,建议使用
sctransform
(Hafemeister和Satija,已出版),它构建了基因表达的正则化负二项模型,以便在保留生物学差异的同时考虑技术伪像。
有关sctransform的更多信息,请参见 here的预印和here的Seurat教程。sctransform
将数据归一化,检测高方差特征high-variance features,并将数据存储在SCT
assay中。
brain <- SCTransform(brain, assay = "Spatial", verbose = FALSE)
- sct 与 log-normalization的比较
为了探索规范化方法的差异,我们检查了sctransform和log规范化结果如何与UMI数量相关。
为了进行比较,我们首先重新运行sctransform
以存储所有基因的值,然后通过NormalizeData
进行 log-normalization 过程。
# rerun normalization to store sctransform residuals for all genes
brain <- SCTransform(brain, assay = "Spatial", return.only.var.genes = FALSE, verbose = FALSE)
# also run standard log normalization for comparison
brain <- NormalizeData(brain, verbose = FALSE, assay = "Spatial") #这步有些慢
第一次运行NormalizeData的报错:"Error: std::bad_alloc".
解决方法:可能是内存不够,关掉了没用的网页,重新打开Rstudio重新运行,问题解决。
# Computes the correlation of the log normalized data and sctransform residuals with the number of UMIs
brain <- GroupCorrelation(brain, group.assay = "Spatial", assay = "Spatial", slot = "data", do.plot = FALSE)
brain <- GroupCorrelation(brain, group.assay = "Spatial", assay = "SCT", slot = "scale.data", do.plot = FALSE)
p1 <- GroupCorrelationPlot(brain, assay = "Spatial", cor = "nCount_Spatial_cor") + ggtitle("Log Normalization") +
theme(plot.title = element_text(hjust = 0.5))
p2 <- GroupCorrelationPlot(brain, assay = "SCT", cor = "nCount_Spatial_cor") + ggtitle("SCTransform Normalization") +
theme(plot.title = element_text(hjust = 0.5))
p3 <- plot_grid(p1, p2)
ggsave(p3, filename = "lOG_VS_SCT.png")
- 对于上面的箱线图,我们计算每个特征(基因)与UMI数量(此处为变量
nCount_Spatial
)的相关性。然后,我们根据基因的平均表达量将基因分组,并生成这些相关系数的箱线图。 - 您可以看到 log-normalization 未能使前三组中的基因充分归一化,这表明技术因素继续影响高表达的基因的归一化表达估计值。相反,sctransform归一化实质上减轻了这种影响。
六、基因表达可视化
在Seurat v3.2中,我们加入了新的功能来探索和与空间数据固有的可视化特性。
Seurat的SpatialFeaturePlot
函数扩展了FeaturePlot
, 可以将表达数据覆盖在组织组织上。例如,在这个小鼠大脑数据中,Hpca基因是一个强烈的海马区(hippocampal )marker ,Ttr是一个脉络丛(choroid plexus)marker。
SpatialFeaturePlot(brain, features = c("Hpca", "Ttr"))
看到的区域很明显了
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))
plot_grid(p1, p2)
七、降维,聚类和可视化
然后,我们可以使用与scRNA-seq分析相同的工作流程,对RNA表达数据进行降维和聚类。
brain <- RunPCA(brain, assay = "SCT", verbose = FALSE) #选择SCT归一化的assay
brain <- FindNeighbors(brain, reduction = "pca", dims = 1:30)
brain <- FindClusters(brain, verbose = FALSE)
brain <- RunUMAP(brain, reduction = "pca", dims = 1:30)
再然后,我们可以在UMAP空间(使用DimPlot
)或使用SpatialDimPlot
将聚类clustering的结果显示在图像上
p1 <- DimPlot(brain, reduction = "umap", label = TRUE)
p2 <- SpatialDimPlot(brain, label = TRUE, label.size = 3)
plot_grid(p1, p2)
由于颜色太多,因此可视化哪个立体像素voxel属于哪个cluster可能是一个挑战。
解决方案:
- 设置
label
参数会在每个cluster的中间处放置一个彩色框(请参见上图), - 而SpatialDimPlot的
do.hover
参数允许交互式地查看当前点的标识。
# move your mouse
SpatialDimPlot(brain, do.hover = TRUE)
选择操作与Loupe Browser差不多
您还可以在SpatialDimPlot
上使用cells.highlight
参数在上划分特定的关注细胞,这对于区分单个cluster的空间定位非常有用。如下所示:
SpatialDimPlot(brain, cells.highlight = CellsByIdentities(object = brain, idents = c(1, 2, 5, 3,
4, 8)), facet.highlight = TRUE, ncol = 3)
感觉自己画出来没有官网出来的效果好
此外,
LinkedDimPlot
和LinkedFeaturePlot
函数支持交互式可视化。这些图将UMAP表示与组织图像表示联系起来,并允许交互选择。例如,您可以在UMAP图中选择一个区域,图像表示中相应的点将突出显示。
LinkedDimPlot(brain)
颜色是对应的
八、识别空间可变特征
Seurat提供了两种工作流程来识别与组织内空间位置相关的分子特征。
- 第一种方法,是基于组织内预先标注的解剖区域执行差异表达,这可以从无监督聚类或先验知识中确定。在这种情况下,此策略将起作用,因为上面的cluster显示出明显的空间限制。
de_markers <- FindMarkers(brain, ident.1 = 0, ident.2 = 1)
SpatialFeaturePlot(object = brain, features = rownames(de_markers)[1:3], alpha = c(0.1, 1), ncol = 3)
嗯,这个看起来就很好看
-
第二种方法,
FindSpatiallyVariables
在中实施的是在没有预先注释的情况下搜索展现出空间模式spatial patterning的特征。默认参数(
method = 'markvariogram
)受Trendsceek启发,该工具将空间转录组学数据建模为标记点过程(mark point process),并计算“variogram”,以识别其表达水平取决于其空间位置的基因。更具体地说,此过程计算 gamma(r) 值,该值测量相距某个“ r”距离的两个点之间的依赖性。默认情况下,我们在这些分析中使用 r-value为“ 5”,并且仅计算可变基因的这些值(变异variation的计算独立于空间位置)以节省时间。
文献中有多种方法可以完成此类任务,包括SpatialDE和Splotch。Seurat团队鼓励感兴趣的用户探索这些方法,并希望在不久的将来为其提供支持。
现在,我们可视化此方法确定的前6个特征的表达情况。
top.features <- head(SpatiallyVariableFeatures(brain, selection.method = "markvariogram"), 6)
SpatialFeaturePlot(brain, features = top.features, ncol = 3, alpha = c(0.1, 1))
这步可能有点久
九、可视化解剖区域中取子集(Subset out)
与单细胞对象一样,您可以对对象进行取子集操作,以便重点集中在处理数据的子集。在这里,我们大概将额叶皮层(frontal cortex)进行取子集操作。此过程还有助于在下一节中将这些数据与皮质(cortical )scRNA-seq数据集整合。
- 首先,我们获取clusters的子集
cortex <- subset(brain, idents = c(0, 1, 11, 5, 10, 12))
- 然后根据精确位置进一步细分。
# 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, image_imagerow > 400 | image_imagecol < 150, invert = TRUE)
cortex <- subset(cortex, image_imagerow > 275 & image_imagecol > 370, invert = TRUE)
cortex <- subset(cortex, image_imagerow > 250 & image_imagecol > 440, invert = TRUE)
- 取子集后,我们可以在完整图像或裁剪图像上对皮质细胞进行可视化。
网友评论