首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >空间转录组: 标准化+特征选择

空间转录组: 标准化+特征选择

作者头像
数据科学工厂
发布2025-09-17 14:46:18
发布2025-09-17 14:46:18
8800
代码可运行
举报
运行总次数:0
代码可运行

引言

本系列讲解 空间转录组学 (Spatial Transcriptomics) 相关基础知识与数据分析教程[1],持续更新,欢迎关注,转发,文末有交流群

摘要

本文将演示几种数据处理步骤——标准化、特征选择和降维——的方法,这些步骤在应用下游分析方法之前是必需的。

我们使用来自 scater和 scran包的方法,这些方法最初是为 scRNA-seq 数据开发的,并(简化地)假设通过将 spot 视为与 cell 等价,可以将这些方法应用于基于 spot 的 ST 数据。

在处理步骤之后,还包括聚类和标记基因的识别。

依赖

代码语言:javascript
代码运行次数:0
运行
复制
library(scran)
library(scater)
library(ggspavis)
library(pheatmap)
library(patchwork)
library(BayesSpace)
library(SpatialExperiment)

# set seed for reproducibility
set.seed(123)

加载数据

在此,我们加载来自 10x Genomics Visium 的数据,这些数据取自一块来自背外侧前额叶皮层(DLPFC)区域的人脑尸检组织切片(Maynard et al. 2021),并已在上一章第 9 章中完成了质量控制与过滤。

代码语言:javascript
代码运行次数:0
运行
复制
# load data saved in previous chapter
(spe <- readRDS("seq-spe_qc.rds"))

标准化

一种简单且快速的标准化方法是 “library size normalization”,其步骤是利用 library size factors 计算对数转换后的标准化计数(“logcounts”),并将每个 spot 视为等同于一个 cell。该方法简单、快速,通常能提供一个良好的基线。它可以通过 scater和 scran包进行计算。

然而,library size normalization 并未利用任何空间信息。在某些数据集中,将每个 spot 视为等同于单个 cell 的简化假设并不合适,并可能在分析过程中造成问题。

一些来自 scRNA-seq 流程的非空间替代方法(例如通过 deconvolution 进行标准化)也不太适用于基于 spot 的 ST 数据,因为 spot 可能包含来自一个或多个 cell type 的多个 cell,且数据集可能包含多个样本(例如多个组织切片),这可能导致 sample-specific 的聚类。

代码语言:javascript
代码运行次数:0
运行
复制
# calculate library size factors
spe <- computeLibraryFactors(spe)

summary(sizeFactors(spe))

hist(sizeFactors(spe), breaks = 50, main = "Histogram of size factors")
代码语言:javascript
代码运行次数:0
运行
复制
# calculate logcounts and store in new assay
spe <- logNormCounts(spe)

assayNames(spe)
  • Spatially-aware normalization

SpaNorm是专门为 ST 数据开发的,它采用逐基因的模型(例如 negative binomial),将变异分解为一个依赖于 library size 的(技术性)成分和一个独立于 library size 的(生物学性)成分。

特征选择

识别一组顶级的 “highly variable genes”(HVGs)是许多 scRNA-seq 流程中的标准特征选择步骤,也可作为基于 spot 的 ST 数据中一种简单且快速的基线方法。这同样基于把 spot 视为等同于 cell 的简化假设。

在此,我们采用一种标准方法来挑选 HVGs;首先,我们移除 mitochondrial genes,因为这些基因通常表达量极高,且并非主要的生物学关注点。

代码语言:javascript
代码运行次数:0
运行
复制
# identify mitochondrial genes
nm <- rowData(spe)$gene_name
mt <- grepl("^MT-", nm, ignore.case = TRUE)
table(mt)
# remove them
spe <- spe[!mt, ]

##  mt
##  FALSE  TRUE 
##  21820    13

接下来,应用来自 scran 的方法。这会给出一份 top HVGs 的列表,可作为后续步骤的输入。参数 prop 定义要选取的 HVGs 的比例——例如,prop = 0.1 返回前 10%。(或者,也可以使用参数 n 来指定一个固定数量的 top HVGs,比如 1000 或 2000。)

代码语言:javascript
代码运行次数:0
运行
复制
# fit mean-variance relationship
dec <- modelGeneVar(spe)
# select top HVGs
sel <- getTopHVGs(dec, prop = 0.1)
# number of HVGs selected
length(sel)

另一种做法是使用 spatially-aware 的方法来识别一组 “spatially variable genes”(SVGs)。这些方法会考虑测量值的空间坐标,从而能够生成一份更具生物学信息价值的基因排序,这些基因与组织区域内的生物学结构相关。随后,这组 SVGs 可以在后续步骤中替代 HVGs,或与 HVGs 互补使用。

未完待续,欢迎关注!

Reference

[1]

Ref: https://lmweber.org/OSTA/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 摘要
  • 依赖
  • 加载数据
  • 标准化
  • 特征选择
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档