图片

Spatial Segmentation

介绍

空间转录组样本通常附带一张基础的组织病理学图像。为了整合特定观察区域的组织病理学分类,可以使用SPATA2对样本进行手动分割。例如,我们使用的是一个中枢神经系统恶性肿瘤的空间转录组样本,该样本包含三个不同的相邻组织病理学区域:肿瘤区、过渡区以及浸润性皮层。

# load required packages
library(tidyverse)
library(SPATA2)
library(ggallin)
# load SPATA2 inbuilt data 
object_t269 <- loadExampleObject("UKF269T", meta = TRUE, process = TRUE)
## 12:48:15 Identifying tissue outline with `method = obs`.
## 12:48:15 Identifying spatial outliers.
## 12:48:15 Spatial outliers: 4
## 12:48:15 Spatial outliers to remove: 4.
## 12:48:15 Keeping 3213 observation(s).
## 12:48:15 Identifying tissue outline with `method = obs`.
## Normalizing layer: counts
## 12:48:17 Active matrix in assay 'gene': 'LogNormalize'

2.创建空间分割变量

空间分割,有时也称为手动标注,是指创建分组变量,根据图像的组织形态学特征为每个观测值分配标签。在示例对象样本UKF269T中,我们提供了此类变量,我们将其命名为“组织学”。

# variables that have been created using spatial segmentation
# curently only one: "histology"
getSpatSegmVarNames(object_t269)
## [1] "histology"
# plot the histology image in coordinates frame
plotImage(object_t269) + 
  ggpLayerFrameByCoords(object_t269)

# grouping variable created with spatial segmentation
plotSurface(object_t269, color_by = "histology")

要自行创建如上图所示的空间分割变量,请使用函数createSpatialSegmentation()。此动画展示了工作流程:

object_t269 <- createSpatialSegmentation(object_t269)

要创建新的分割变量,请点击“创建新分割变量”。随后,系统会提示您输入新变量的名称。此处,我们将其简单命名为example_spat_segm。点击“添加分割变量”后,该变量会在元数据框(meta data.frame)中被创建,且所有值默认为“未命名”。这是初始状态,因为我们尚未进行任何分割操作。对分割变量的操作意味着根据观察值所覆盖的组织学区域,依次为其标记标签。要实现这一点,请在交互图(Interaction-plot)上圈出您想要标记的区域。可以通过双击图表或使用键盘快捷键d开始绘制。绘制过程中,图表会显示相关提示。再次双击即可退出绘制模式,这可用于放大或缩小以重新定位视图。若再次双击,已绘制线条的端点将连接到光标位置,您可以继续绘制。持续圈出区域,直至线条的起点和终点足够接近以形成闭合圆圈。要闭合圆圈,请点击“高亮”。这将高亮显示通过此方式圈出的观察值。高亮观察值后,在“高亮”按钮下方输入您希望用于标记这些观察值的名称。点击“名称”以保存结果。结果应立即在左侧的图表中显示。您可以重复此过程,直至满意为止。请注意,如果您再次将某个观察值包含在另一个区域内,之前为其设置的标签将被覆盖。

如果您首次使用自己的SPATA2对象运行该函数,左侧不会显示图表。这是因为元数据框中目前没有可操作的分割变量。在本示例中,我们已创建空间分割变量histology。此外,请不必过于关注您绘制的多边形所遗漏的单个数据点,dissolveGroups()函数可能会为您节省时间和麻烦。

3.数据存储

在转录组学研究中,分组变量通常由聚类算法生成,并以因子的形式存储在元数据框(meta data.frame)中。由于空间分割变量也是分组变量,因此它们同样被存储在该细胞数据框中。

# show all grouping (factor) variables in the meta data.frame
getMetaDf(object_t269) %>%
  select(barcodes, where(is.factor))
## # A tibble: 3,213 × 5
##    barcodes           tissue_section   seurat_clusters histology  bayes_space
##    <chr>              <fct>            <fct>           <fct>      <fct>      
##  1 GTAGCGCTGTTGTAGT-1 tissue_section_1 1               tumor      2          
##  2 TTGTTTGTGTAAATTC-1 tissue_section_1 1               tumor      2          
##  3 CGTAGCGCCGACGTTG-1 tissue_section_1 2               tumor      2          
##  4 GTAGACAACCGATGAA-1 tissue_section_1 2               tumor      2          
##  5 ACAGATTAGGTTAGTG-1 tissue_section_1 9               tumor      2          
##  6 TGAGATCAAATACTCA-1 tissue_section_1 2               tumor      4          
##  7 CTGGTCCTAACTTGGC-1 tissue_section_1 9               tumor      4          
##  8 TGCACGAGTCGGCAGC-1 tissue_section_1 7               tumor      4          
##  9 ATAGTCTTTGACGTGC-1 tissue_section_1 9               transition 4          
## 10 GGGTGGTCCAGCCTGT-1 tissue_section_1 4               transition 4          
## # ℹ 3,203 more rows
# obtain only names from variables created with spatial segmentation
spat_segm_vars <- getSpatSegmVarNames(object_t269)

spat_segm_vars
## [1] "histology"
# show only variables that have been created by spatial segmentation
getMetaDf(object_t269) %>% 
  select(barcodes, all_of(spat_segm_vars))
## # A tibble: 3,213 × 2
##    barcodes           histology 
##    <chr>              <fct>     
##  1 GTAGCGCTGTTGTAGT-1 tumor     
##  2 TTGTTTGTGTAAATTC-1 tumor     
##  3 CGTAGCGCCGACGTTG-1 tumor     
##  4 GTAGACAACCGATGAA-1 tumor     
##  5 ACAGATTAGGTTAGTG-1 tumor     
##  6 TGAGATCAAATACTCA-1 tumor     
##  7 CTGGTCCTAACTTGGC-1 tumor     
##  8 TGCACGAGTCGGCAGC-1 tumor     
##  9 ATAGTCTTTGACGTGC-1 transition
## 10 GGGTGGTCCAGCCTGT-1 transition
## # ℹ 3,203 more rows
# visualize the (unfinished) spatial segmentation variable 
# from the gif above
plotSurface(object_t269, color_by = "example_spat_segm", clrp_adjust = c("unnamed" = "lightgrey"))

4. 使用分段变量

分组变量可以像其他任何分组变量一样使用,通常通过 group_by、grouping_variable 或 across 参数来引用。

# histology variable is a grouping option ...
getGroupingOptions(object_t269)
##            factor            factor            factor            factor 
##  "tissue_section" "seurat_clusters"       "histology"     "bayes_space"
# but not all grouping options derive from spatial segmentation
getSpatSegmVarNames(object_t269)
## [1] "histology"

由于新的空间分割变量与其他分组变量一样是元特征,因此适用于它的规则和选项与这些分组变量相同,包括getGroupNames()、renameGroups()和relevelGroups()。

# check group (segment) names
getGroupNames(object_t269, grouping = "histology")
## [1] "tumor"       "transition"  "infiltrated"
# rename groups (only temporary without storing the results)
renameGroups(object_t269, grouping_variable = "histology", "tumor_renamed" = "tumor") %>% 
  plotSurface(object = ., color_by = "histology", pt_clrp = "npg")

空间分割变量也可用于基于组织学的DEA和GSEA分析,并可在绘图函数中访问结果。

# run DEA based on histology
object_t269 <- runDEA(object = object_t269, across = "histology")
## Normalizing layer: counts
## Centering and scaling data matrix
## Running DEA across 'histology' with method 'wilcox'.
## Number of groups/clusters: 3
## Calculating cluster tumor
## For a (much!) faster implementation of the Wilcoxon Rank Sum Test,
## (default method for FindMarkers) please install the presto package
## --------------------------------------------
## install.packages('devtools')
## devtools::install_github('immunogenomics/presto')
## --------------------------------------------
## After installation of presto, Seurat will automatically use the more 
## efficient implementation (no further action necessary).
## This message will be shown once per session
## Calculating cluster transition
## Calculating cluster infiltrated
plotDeaVolcano(
  object = object_t269,
  across = "histology", 
  use_pseudolog = TRUE, 
  label_genes = c("EGFR", "MBP", "SNAP25"),
  pt_size = 1,
  label_size = 3
  )

plotSurfaceComparison(object_t269, color_by = c("EGFR", "MBP", "SNAP25"), nrow = 1)

plotBoxplot(object_t269, variables = c("EGFR", "MBP", "SNAP25"), across = "histology", nrow = 1, clrp = "npg")

图片

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐