首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于Seurat的空转单样本数据分析流程学习(三)-SpaCET

基于Seurat的空转单样本数据分析流程学习(三)-SpaCET

原创
作者头像
凑齐六个字吧
发布2025-09-14 08:52:09
发布2025-09-14 08:52:09
6800
代码可运行
举报
文章被收录于专栏:单细胞单细胞
运行总次数:0
代码可运行

前面的内容回顾了空转单样本的分析流程、RCTD和SPOTlight的分析流程。

  1. https://mp.weixin.qq.com/s/Zu3-VBaULysFdXUeScGNgQ
  2. https://mp.weixin.qq.com/s/GrZbAjyxXUzZXbK-lO8Fmw

本次学习一下SpaCET这个工具。

SpaCET用于估算肿瘤微环境中的细胞谱系组成和细胞间相互作用。简而言之,SpaCET首先通过整合常见恶性肿瘤的基因模式字典来推断癌细胞丰度。随后,SpaCET采用约束线性回归模型校正局部组织密度,并基于全面的非恶性细胞图谱来确定基质和免疫细胞的谱系比例。此外,SpaCET还能揭示肿瘤微环境中潜在的细胞—细胞相互作用,尤其是在肿瘤—免疫界面处。值得注意的是,尽管SpaCET在分析肿瘤ST数据时不需要任何输入的细胞参考信息,但它仍然可以结合匹配的单细胞RNA测序数据作为自定义参考,用于对任意ST数据集进行细胞类型去卷积分析。

分析流程

开发者通过该流程演示了如何使用空间转录组(ST)数据集运行SpaCET,以估计细胞身份和细胞间相互作用。每个SPOT直径为 55 µm,覆盖 1-10 个细胞。

1.导入
代码语言:javascript
代码运行次数:0
运行
复制
rm(list = ls())
library(Seurat)
library(future)
library(ggplot2)
library(hdf5r)
library(SingleCellExperiment)
library(SpatialExperiment)
library(scater)
library(scran)
library(SpaCET)

dir.create("0-GSM8633891-2")   
setwd("0-GSM8633891-2")   

数据结构和命名:

2.读取单样本数据
代码语言:javascript
代码运行次数:0
运行
复制
# 标准的spatial格式:h5文件和spatial文件夹是并列的
SpaCET_obj <- create.SpaCET.object.10X(visiumPath = "./0-GSM8633891-2/")


# Check
SpaCET_obj@input$counts[1:8,1:6]
# 8 x 6 sparse Matrix of class "dgCMatrix"
#            AAACCGTTCGTCCAGG-1 AAACGAGACGGTTGAT-1 AAACTGCTGGCTCCAA-1
# AL627309.1                  .                  .                  .
# LINC01409                   .                  .                  .
# LINC01128                   .                  1                  2
# LINC00115                   .                  .                  .
# FAM41C                      .                  .                  .
# LINC02593                   .                  .                  .
# SAMD11                      .                  .                  .
# NOC2L                       1                  5                  3
#            AAAGGCTACGGACCAT-1 AAAGGCTCTCGCGCCG-1 AAAGGGATGTAGCAAG-1
# AL627309.1                  .                  .                  .
# LINC01409                   .                  .                  .
# LINC01128                   .                  .                  .
# LINC00115                   .                  .                  .
# FAM41C                      .                  .                  .
# LINC02593                   .                  1                  .
# SAMD11                      .                  1                  .
# NOC2L                       3                  .                  3
3.质量控制
代码语言:javascript
代码运行次数:0
运行
复制
# 过滤掉表达基因数少于 100 的 spot
SpaCET_obj <- SpaCET.quality.control(SpaCET_obj, min.genes=100)

# 绘图展示QC结果
SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "QualityControl", 
  spatialFeatures=c("UMI","Gene"),
  imageBg = TRUE,
  imageSize = "CompleteImage" # CaptureArea,CompleteImage
)

“UMI”选项展示位点内的 UMI 总数,而“Gene”选项表示特定位点中表达的基因数量(即至少有一个UMI计数的基因)

4.解构空转数据

用户需要通过cancerType参数指定该肿瘤ST数据集的癌症类型。该参数用于选择特定癌症类型的CNA或表达特征,以推断恶性细胞比例。在将ST spot的表达谱与癌症类型特异性特征进行相关分析时,首先采用癌症类型特异性的CNA特征,因为染色体不稳定性被广泛认为是人类肿瘤的一个共同特征。如果没有spot与CNA特征呈现出强相关,则会启用癌症类型特异性的表达特征。这种情况可能源于染色体稳定、CNA水平较低的癌细胞。对于未包含在“字典”中的癌症类型,通过对所有癌症类型特异性表达特征取平均,构建了一个泛癌表达特征。

SpaCET包含了30种实体肿瘤的拷贝数变异和表达变化的基因模式“字典”。某一癌症类型的特异性CNA特征,是通过对该类型患者在基因水平上的整体肿瘤CNA值取平均而得到的。在计算CNA特征之前,会先排除按总CNA负担排序后处于下四分位数的患者。某一癌症类型的特异性表达特征,则是通过比较肿瘤样本与正常样本的差异表达,计算log2倍数变化而生成的。对于部分癌症类型,由于缺乏足够的正常样本(n < 10 位患者),无法生成表达特征。泛癌表达特征是通过对所有癌症类型的特异性表达特征取平均而得到的。

代码语言:javascript
代码运行次数:0
运行
复制
# 结构空转数据
SpaCET_obj <- SpaCET.deconvolution(SpaCET_obj, cancerType="HNSC", coreNo=6)
# 由于Windows不支持并行计算,请在Windows系统下将coreNo设置为 1。

# 展示结果
SpaCET_obj@results$deconvolution$propMat[1:13,1:6]
#                    52x42        35x79        45x67        62x54        55x55        24x62
# Malignant   4.521964e-02 9.651163e-01 5.968992e-01 6.072351e-01 3.191214e-01 7.700258e-01
# CAF         1.849961e-01 4.543891e-08 2.251459e-01 2.583148e-01 6.467909e-01 1.168107e-01
# Endothelial 8.016312e-02 1.491354e-02 7.737878e-05 1.267896e-04 2.355922e-03 2.464707e-04
# Plasma      5.298576e-01 1.506045e-06 6.677466e-05 5.564595e-04 1.223452e-07 1.217042e-07
# B cell      8.860276e-06 4.365787e-07 9.400134e-05 5.282757e-03 4.734720e-06 2.853153e-06
# T CD4       9.845032e-07 7.576083e-07 4.216988e-06 1.460956e-06 2.560384e-06 4.215570e-07
# T CD8       7.047777e-08 9.032065e-05 8.463263e-06 1.049272e-04 2.353461e-07 1.138594e-05
# NK          3.085421e-06 5.375555e-07 1.872340e-07 9.274043e-04 3.362568e-07 4.844771e-03
# cDC         9.725538e-07 1.799787e-02 3.571536e-06 5.558585e-07 9.331132e-06 3.429331e-06
# pDC         2.700468e-02 1.697397e-05 3.608122e-02 2.433750e-02 1.321708e-03 1.843436e-02
# Macrophage  6.666681e-02 4.411762e-05 9.219139e-03 2.524628e-02 2.670870e-02 3.748515e-02
# Mast        3.106721e-04 8.494204e-08 4.302341e-04 1.656345e-03 3.682889e-03 2.666450e-04
# Neutrophil  1.281092e-06 3.811517e-06 3.619236e-03 9.600915e-08 7.053267e-08 8.998686e-06
5.可视化细胞类型比例
代码语言:javascript
代码运行次数:0
运行
复制
# 展示恶性细胞和巨噬细胞的空间分布
SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "CellFraction", 
  spatialFeatures=c("Malignant","Macrophage")
)
5.1 展示所有细胞类型的空间分布。
代码语言:javascript
代码运行次数:0
运行
复制
SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "CellFraction", 
  spatialFeatures="All", 
  sameScaleForFraction = TRUE,
  pointSize = 0.1, 
  nrow=5
)

# 由于某些细胞类型的丰度相对较低,用户可以通过将 sameScaleForFraction = FALSE 来获得更清晰的可视化效果。
5.2 绘制细胞类型饼图

若要以饼图形式展示细胞类型组成,用户可以将 spatialType = "CellTypeComposition"。如果希望裁剪出特定区域(如 #48),可以将 imageSize = "CustomizedArea",并在 CustomizedAreaScale 中指定 4 个 0~1 之间的数值,对应于上图的 (x_left, x_right, y_bottom, y_top)。

代码语言:javascript
代码运行次数:0
运行
复制
#  加载细胞类型的颜色
hiresST_Path <- system.file("extdata", 'hiresST_CRC', package = 'SpaCET')
load(paste0(hiresST_Path,"/colors_vector.rda"))
colors_vector["Unidentifiable"] <- "grey82"

# 绘制散点饼图
SpaCET.visualize.spatialFeature(
     SpaCET_obj, 
     spatialType = "CellTypeComposition", 
     spatialFeatures = "MajorLineage", 
     colors = colors_vector,
     pointSize = 3
 )
 
# 分散饼图
SpaCET.visualize.spatialFeature(
     SpaCET_obj, 
     spatialType = "CellTypeComposition", 
     spatialFeatures = "MajorLineage", 
     colors = colors_vector,
     pointSize = 2,
     imageBg = TRUE,
     imageSize = "CustomizedArea",
     CustomizedAreaScale = c(0, 0.2, 0.2, 0.5)
 )
5.3 交互式可视化
代码语言:javascript
代码运行次数:0
运行
复制
SpaCET.visualize.spatialFeature(SpaCET_obj,interactive=TRUE)
6.估计细胞间相互作用

在分解细胞组分后,SpaCET 可以根据细胞共定位和配体-受体共表达来推断细胞间相互作用。通过计算所有空转Spot中不同细胞类型间细胞组分的线性相关性,来评估细胞类型的共定位情况。高度正相关表明细胞类型对倾向于一起共定位。为了推断物理相互作用,SpaCET 会检测共定位细胞类型对在同一 空转Spot内配体和受体基因的共表达情况。

6.1 寻找共定位的细胞类型
代码语言:javascript
代码运行次数:0
运行
复制
# 计算细胞间共定位
SpaCET_obj <- SpaCET.CCI.colocalization(SpaCET_obj)

# 可视化细胞间共定位
SpaCET.visualize.colocalization(SpaCET_obj)

在该头颈鳞癌数据集中,我们识别出了几个潜在的共定位细胞类型对(见左侧面板中的红点),例如CAF 与内皮细胞以及M2型巨噬细胞。为了排除由于参考谱相似导致的高细胞比例相关性,比较了细胞类型比例之间的相关性与细胞类型参考谱之间的相关性(见右侧面板)。虽然CAF与内皮细胞的比例相关性较高,但它们的参考谱相似度也相应较高。然而,CAF与M2 型巨噬细胞参考谱之间的相似度极低,这表明CAF-M2的共定位并不是简单由参考谱相似性引起的。

6.2 分析空转位点的L-R富集情况

细胞共定位并不直接表明存在物理相互作用。因此,通过分析空间转录组点位内的配体-受体(L-R)相互作用,进一步寻找细胞间相互作用的证据。研究团队收集了约2,500对L-R作为内部 L-R 网络。对于每个ST数据集,SpaCET使用BiRewire包对L-R相互作用网络进行打乱,生成1,000个随机化网络,同时保持有向度分布不变。对于每个点位,L-R 网络评分定义为所有L-R对表达量乘积的总和,再除以来自1,000个随机化网络的平均随机值。

代码语言:javascript
代码运行次数:0
运行
复制
# 计算空间转录组(ST)各点位的配体-受体(L-R)网络评分。
SpaCET_obj <- SpaCET.CCI.LRNetworkScore(SpaCET_obj,coreNo=6)

# 可视化配受体网络
SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "LRNetworkScore", 
  spatialFeatures=c("Network_Score","Network_Score_pv")
)

每个ST点位的L-R网络评分反映了该位置配体-受体相互作用的总体强度,但不能说明两个细胞类型之间的具体相互作用。因此,SpaCET进一步对每对细胞类型的L-R网络评分进行了富集分析。例如,对于头颈鳞癌组织中CAF 与M2细胞的共定位,SpaCET将所有ST点位分为四类:CAF-M2共定位、CAF或M2占主导,以及其他(见下图左侧和中间面板)。结果发现CAF-M2共定位的点位其L-R相互作用网络评分明显是低于CAF/M2 占主导的点位(右侧面板)。这就说明了即使CAF和M2在空间上共定位,它们之间的配体-受体相互作用并不活跃,可能只是靠近而没有强的信号交流。相反,某些 CAF 或 M2 单独占主导的位点可能存在更活跃的 L-R 相互作用,但可能是与其他细胞类型发生的,而不是 CAF 与 M2 之间。总结来说,共定位 不一定等于强相互作用,需要结合 L-R 网络得分判断功能性联系。

代码语言:javascript
代码运行次数:0
运行
复制
# 共定位细胞类型对的配体-受体分析
SpaCET_obj <- SpaCET.CCI.cellTypePair(SpaCET_obj, cellTypePair=c("CAF","Macrophage M2"))
## [1] "CAF and Macrophage M2 have potential intercellular interaction in the current tissue."

# 可视化共定位细胞类型对的相互作用分析
SpaCET.visualize.cellTypePair(SpaCET_obj, cellTypePair=c("CAF","Macrophage M2"))
7.分析肿瘤-免疫界面

CAF-M2与肿瘤-免疫边界之间的距离是通过计算每个CAF-M2相互作用位点与其最近的肿瘤边界位点的距离平均值来确定的。从非恶性区域随机选择了与CAF-M2位点相同数量的位点,并计算它们到边界的距离作为零分布。结果表明,CAF-M2相互作用位点与肿瘤-免疫边界显著更近。

代码语言:javascript
代码运行次数:0
运行
复制
# 识别肿瘤-免疫交界区
SpaCET_obj <- SpaCET.identify.interface(SpaCET_obj)

# 可视化该交界区
SpaCET.visualize.spatialFeature(SpaCET_obj, 
                                spatialType = "Interface", 
                                spatialFeature = "Interface")
7.1 合并界面位点和相互作用位点并可视化
代码语言:javascript
代码运行次数:0
运行
复制
# 合并界面位点和相互作用位点
SpaCET_obj <- SpaCET.combine.interface(SpaCET_obj,
                                       cellTypePair=c("CAF","Macrophage M2"))

# 可视化界面。spatialFeature应格式化为'Interface&celltype1_celltype2',其中细胞类型1和2按字母顺序排列
SpaCET.visualize.spatialFeature(SpaCET_obj, 
                                spatialType = "Interface", 
                                spatialFeature = "Interface&CAF_Macrophage M2")
7.2 计算 CAF-M2 到肿瘤边界的距离
代码语言:javascript
代码运行次数:0
运行
复制
# 计算CAF-M2到肿瘤边界的距离
SpaCET.distance.to.interface(SpaCET_obj, 
                             cellTypePair=c("CAF", "Macrophage M2"))

还可以计算计算CAF-M2到肿瘤边界的距离

8.探索癌细胞状态

肿瘤细胞的基因表达谱(即癌细胞状态)既受肿瘤细胞自身遗传背景影响,也受周围环境中细胞间相互作用的影响。作为一种探索性扩展,SpaCET可以自动分析不同癌细胞状态的空间分布。

基于头颈部鳞癌数据集的解卷积结果,选择了恶性细胞比例较高(> 0.7)的ST位点作为肿瘤位点。然后,SpaCET对这些恶性位点进行层次聚类,以推断不同的癌细胞状态。通过Silhouette值来评估每个聚类内 ST 位点与其他聚类之间的相似性,从而选择最优聚类数。这样,不同癌细胞状态的参考谱可以通过对聚类内所有位点的表达谱取平均来计算,即得到一个癌细胞状态的参考谱。

类似于免疫主要谱系解卷积到亚谱系的过程,总体恶性细胞比例会被分解为多个癌细胞状态。因此,每个位点的各癌细胞状态比例之和等于该位点的恶性细胞比例。

代码语言:javascript
代码运行次数:0
运行
复制
# 进一步解卷积癌细胞的状态
SpaCET_obj <- SpaCET.deconvolution.malignant(SpaCET_obj, coreNo=6)

# 显示前五个位点的癌细胞状态比例
SpaCET_obj@results$deconvolution$propMat[c("Malignant cell state A",
                                           "Malignant cell state B"),1:5]
#                              52x42     35x79     45x67        62x54      55x55
# Malignant cell state A 0.017309851 0.2339925 0.1333348 3.695192e-01 0.06172765
# Malignant cell state B 0.004596182 0.2958130 0.1551506 7.801236e-07 0.10048300

SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "CellFraction", 
  spatialFeatures=c("Malignant","Malignant cell state A","Malignant cell state B"), 
  nrow=1
)
9.基因集评分
9.1 计算signature评分
代码语言:javascript
代码运行次数:0
运行
复制
# 内部50个标志性基因集是从MSigDB收集的,只需将GeneSets设置为“Hallmark”。 
# SpaCET.GeneSetScore将调用 UCell 包来计算基因集评分。结果以矩阵形式存储在 SpaCET_obj@results$GeneSetScore 中。
SpaCET_obj <- SpaCET.GeneSetScore(SpaCET_obj, GeneSets="Hallmark")

# 展示结果
SpaCET_obj@results$GeneSetScore[1:6,1:6]

# 展示所有的基因set
rownames(SpaCET_obj@results$GeneSetScore)

# 可视化
SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "GeneSetScore", 
  spatialFeatures = c("HALLMARK_HYPOXIA","HALLMARK_TGF_BETA_SIGNALING")
)
9.2 计算癌细胞状态得分
代码语言:javascript
代码运行次数:0
运行
复制
# 一项最新研究通过泛癌单细胞RNA测序分析,鉴定出一系列基因模块,其表达定义了 16 种复发性癌细胞状态。为了使用这些基因模块,用户只需将GeneSets设置为“CancerCellState”。
SpaCET_obj <- SpaCET.GeneSetScore(SpaCET_obj, GeneSets="CancerCellState")

#展示所有的基因set
rownames(SpaCET_obj@results$GeneSetScore)

# 可视化
SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "GeneSetScore", 
  spatialFeatures = c("CancerCellState_Cycle","CancerCellState_cEMT")
)
9.3 计算三级样淋巴结构得分
代码语言:javascript
代码运行次数:0
运行
复制
# run gene set calculation
SpaCET_obj <- SpaCET.GeneSetScore(SpaCET_obj, GeneSets="TLS")

# 可视化
SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "GeneSetScore", 
  spatialFeatures = c("TLS")
)
9.4 计算其他基因集得分
代码语言:javascript
代码运行次数:0
运行
复制
# 构建自定义基因集有两种方法。1) 生成一个列表来定义一些简单的基因集(例如,T 细胞和髓系特征)。2) 从 MSigDB 下载一个gmt文件(例如,GO术语),然后使用read.gmt 将该文件读取为列表。

# 1)
gmt1 <- list(
  Tcell = c("CD2","CD3E","CD3D"), 
  Myeloid = c("SPI1","FCER1G","CSF1R")
)
SpaCET_obj <- SpaCET.GeneSetScore(SpaCET_obj, GeneSets = gmt1)
# 可视化
SpaCET.visualize.spatialFeature(
  SpaCET_obj, 
  spatialType = "GeneSetScore", 
  spatialFeatures = c("Tcell")
)

# 2)
# gmt2 <- read.gmt("Path_to_gmt_file")
# SpaCET_obj <- SpaCET.GeneSetScore(SpaCET_obj, GeneSets = gmt2)
参考资料:
  1. Estimation of cell lineages in tumors from spatial transcriptomics data. Nature Communications 14, 568 (2023)
  2. SpaCet github: https://data2intelligence.github.io/SpaCET/articles/visium_BC.html

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台。更多相关内容可关注公众号:生信方舟

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析流程
    • 1.导入
    • 2.读取单样本数据
    • 3.质量控制
  • 4.解构空转数据
    • 5.可视化细胞类型比例
      • 5.1 展示所有细胞类型的空间分布。
      • 5.2 绘制细胞类型饼图
      • 5.3 交互式可视化
    • 6.估计细胞间相互作用
      • 6.1 寻找共定位的细胞类型
      • 6.2 分析空转位点的L-R富集情况
    • 7.分析肿瘤-免疫界面
      • 7.1 合并界面位点和相互作用位点并可视化
      • 7.2 计算 CAF-M2 到肿瘤边界的距离
    • 8.探索癌细胞状态
    • 9.基因集评分
      • 9.1 计算signature评分
      • 9.2 计算癌细胞状态得分
      • 9.3 计算三级样淋巴结构得分
      • 9.4 计算其他基因集得分
  • 参考资料:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档