作者,Evil Genius
科研进展
2023年02月20日,上海交通大学医学院上海市免疫学研究所叶幼琼研究员团队在Nature Communications 上发表题为“Reconstruction of the tumor spatial microenvironment along the malignant-boundary-nonmalignant axis”的研究论文。该研究开发了肿瘤空间微环境解析工具Cottrazm (Construction of Tumor Transition Zone Microenvironment), 结合空间转录组数据和HE染色图像以及单细胞转录组数据,精准绘制了肿瘤组织中连接恶性和非恶性区域的肿瘤边界区域,利用反卷积的方法解析不同空间定位上的细胞组成,并在sub-spot水平重构细胞类型特异的基因表达谱。利用该工具以结直肠癌和肝癌的肿瘤样本为例,发现在肿瘤边界富集的特定细胞亚型、细胞互作、以及靶向边界的潜在治疗靶点,为临床靶向肿瘤空间微环境治疗提供了新策略。
文章在Reconstruction of the tumor spatial microenvironment along the malignant-boundary-nonmalignant axis(nature communications IF 16.6)
肿瘤微环境(TME)由多种常驻或浸润性宿主细胞(如恶性细胞、免疫细胞和基质细胞)和非细胞成分(如分泌因子、细胞外基质蛋白)组成,它们都对肿瘤的发生、进展和转移有重要影响,并与免疫检查点阻断(ICB)治疗的应答有关。然而,TME因位置和组织而异,包括细胞组成和细胞间相互作用。肿瘤边界是一个由实体瘤最外圈的恶性细胞和非恶性细胞组成的生态位,它们在空间结构上紧密相连,将这些不同的空间区域连接起来。虽然细胞组成、细胞相互作用和肿瘤边界的分子网络调控都对TME重塑有深远的影响,但肿瘤边界一直是科学家或病理学家基于免疫组化(IHC)染色数据主观描述的,没有明确的标准或一致的方法。目前,缺乏实验或生物信息学工具来有效地划定肿瘤边界。肿瘤异质性以遗传变异和拷贝数变异(CNVs)为特征;根据空间转录组(ST)数据计算不同SPOT的CNV评分可以反映恶性细胞的比例,有助于确定核心肿瘤区域。
ST结合单细胞RNA测序(scRNA-seq)的优势使基因表达谱能够直接在组织内与二维空间信息相结合。与scRNA-seq分析中的聚类方法相比,ST在评估基因表达、空间定位和组织学信息时需要更全面和综合的考虑。许多原位捕获技术,如10X Genomics Visium,利用5000个直径为55-100µm的SPOT来记录6.5 × 6.5 mm捕获区域内的mRNA位置。这种方法容易在一个SPOT中包含多个同质或异质细胞(每个斑点1-10个细胞),这使得在混合SPOT中区分细胞身份变得困难。用于ST分析的传统生物信息学工具通常考虑图像分析、细胞类型鉴定、反卷积、空间分布、细胞-细胞通信、空间表达模式、调节因子在空间位置的相互作用和亚细胞分辨率。大多数用于ST数据中细胞类型鉴定的工具要么基于细胞类型映射,要么基于细胞类型反卷积。细胞类型定位方法通常根据基因表达或结合成像数据或邻近点推断出最可能的细胞类型,而失去了实际的细胞组成。细胞型反卷积方法一般依靠scRNA-seq数据作为参考来推断每个SPOT或位置的细胞组成,但不考虑SPOT的位置和形态特征,可能忽略了空间结构对细胞组成的影响。此外,目前还没有有效的方法来高分辨率重建同一点不同细胞类型的表达矩阵,这限制了对同一点不同细胞类型之间相互作用的研究以及空间建筑中特定细胞类型标记物潜在靶标的识别。在这里,文章开发了Cottrazm,一个集成的工具框架,能够基于10x Genomics Visium平台的空间转录组学构建肿瘤边界周围的微环境。Cottrazm确定连接恶性和非恶性细胞SPOT的肿瘤边界(Cottrazm- boundarydefine)。根据形态学调整后的表达矩阵的聚类和肿瘤的高CNV特征确定肿瘤核心的SPOT。其次,利用六边形系统连续外推肿瘤核心spot的相邻spot,并计算相邻点到肿瘤质心的UMAP距离。该方法能够确定相邻点是肿瘤还是边界(Bdy)。
空间转录组学构建肿瘤边界微环境
核心功能:利用Cottrazm界定了连接恶性和非恶性空间点的肿瘤边界 (Cottrazm-BoundaryDefine);其次通过整合scRNA-seq、空间转录组学和空间点的位置信息通过反卷积算法预测空间各点的细胞组成 (Cottrazm-SpatialDecon);最终利用ST和scRNA-seq数据在sub-spot水平重建了细胞类型特异的基因表达谱 (Cottrazm-SpatialRecon)。
针对Cottrazm-BoundaryDefine,进行了空间形态基因表达(SME)归一化算法,利用相邻信息(空间位置)和形态距离对ST数据的基因表达进行归一化,得到了形态调整后的空间转录组学表达矩阵。然后,使用基于形态学调整表达矩阵的k近邻(KNN)算法对spot进行聚类,并根据免疫特征计算正常评分,获得正常组织内聚类的值。恶性spot被认为具有最高的CNV评分,并且由最高比例的恶性细胞组成。利用CNV评分在单细胞RNA-seq中分离恶性细胞和非恶性细胞,然后cotrazm通过intercnv鉴定拷贝数变异最大的cluster作为恶性spot的核心spot。Cottrazm在六边形格子上排列空间spot,计算点之间的曼哈顿距离,从而识别出肿瘤核心附近曼哈顿距离小于线性模型拟合半径的点。此外,根据到肿瘤质心的均匀流形近似和投影(UMAP)距离,利用六边形系统从恶性细胞的核心spot逐层推断,确定一个spot是恶性(Mal)斑点还是肿瘤边界(Bdy)斑点。当恶性spot的所有邻居都不是恶性时,外推过程结束,剩余的spot被标记为非恶性区域(nMal),既不是Mal spot,也不是Bdy spot.
Delineating the tumor boundary
我们主要关心的是肿瘤边界的部分
我们来看看借助CNV的力量实现边界划分
library(Seurat)
library(magrittr)
library(dplyr)
library(Matrix)
library(ggplot2)
library(stringr)
library(RColorBrewer)
library(patchwork)
library(ggtree)
library(BiocGenerics)
library(readr)
library(rtracklayer)
library(infercnv)
library(phylogram)
library(utils)
library(dendextend)
library(assertthat)
library(reticulate)
library(openxlsx)
library(scatterpie)
library(cowplot)
library(stats)
library(quadprog)
library(data.table)
library(Rfast)
library(ggrepel)
library(tibble)
library(clusterProfiler)
library(utils)
library(org.Hs.eg.db)
#from local path
devtools::install_github('Yelab2020/Cottrazm')
#from github
install.packages("Cottrazm.tar.gz", repos = NULL, type = "source")
library(Cottrazm)
处理肿瘤数据,QC
print('STPreProcess')
InDir = paste(system.file("extdata/outs",package = "Cottrazm"),"/",sep = "")
Sample = "CRC1"
OutDir = paste(getwd(),"/",Sample,"/",sep = "")
TumorST <-
STPreProcess(
InDir = InDir,
OutDir = OutDir,
Sample = Sample
)
形态学调整空转数据
print('STModiCluster')
res = 1.5
TumorST <-
STModiCluster(
InDir = InDir,
Sample = Sample,
OutDir = OutDir,
TumorST = TumorST,
res = res
)
运行CNV
print('STCNV' )
STInferCNV <-
STCNV(
TumorST = TumorST,
OutDir = OutDir,
assay = "Spatial"
)
print('STCNVScore')
TumorST <-
STCNVScore(
TumorST = TumorST,
assay = "Spatial",
Sample = Sample,
OutDir = OutDir
)
划分肿瘤边界
将CNV最高分定义为核心肿瘤spot
TumorSTn <-
BoundaryDefine(
TumorST = TumorST,
MalLabel = c(1,2),
OutDir = OutDir,
Sample = Sample
)
划分绘图
TumorST <-
BoundaryPlot(
TumorSTn = TumorSTn,
TumorST = TumorST,
OutDir = OutDir,
Sample = Sample
)