前言
SpaCET是一个分析肿瘤空间转录组数据的R包,它能估计细胞谱系和肿瘤微环境中的细胞互作。SpaCET首先通过整合常见的恶性肿瘤模式推断肿瘤细胞,然后采用约束线性回归模型来校准局部组织密度,并基于全面的非恶性细胞图谱确定基质和免疫细胞谱系分数。此外,SpaCET能够揭示肿瘤微环境中假定的细胞间相互作用,特别是在肿瘤免疫界面处。值得注意的是,尽管SpaCET不需要任何参考细胞表达谱来分析肿瘤空转数据,但SpaCET仍然可以将匹配的scRNA-seq数据集作为定制参考,以对任何空转数据集进行细胞类型反卷积。
GitHub主页:https://github.com/data2intelligence/SpaCET?tab=readme-ov-file
我们在上一期的推文中介绍了使用SpaCET的算法原理和直接反卷积与细胞通讯分析部分的实操教程,感兴趣的小伙伴可以先阅读这部分内容哦。
单细胞数据辅助反卷积
与很多反卷积的工具一样,SpaCET也是能够使用单细胞数据进行辅助反卷积的,这个功能也是SpaCET唯一能用在小鼠数据上的功能哦。
空转数据的读取
如果空转数据不是10X Visium该怎么读取呢?这次我们换一种读取方式,看看通用空转数据怎么读取。
PDAC_Path = system.file("extdata", "oldST_PDAC", package = 'SpaCET')
load(paste0(PDAC_Path, "/st_PDAC.rda"))
这里counts和spotCoordinates分别记录着表达矩阵和spot的空间坐标信息,展示如下。
counts[1:6,1:5]
10x10 10x13 10x14 10x15 10x16
A1CF 0 0 0 0 0
A2M 13 0 4 0 0
A4GALT 1 0 0 0 0
A4GNT 0 0 1 0 0
AAAS 0 0 0 0 0
AACS 0 0 0 0 0
spotCoordinates[1:5, ]
X Y
10x10 10 10
10x13 10 13
10x14 10 14
10x15 10 15
10x16 10 16
使用下面代码创建SpaCET对象。这里imagePath指定的是H&E染色的图像,这套数据没有,所以是NA。platform是空间组学平台,可以是"Visium"、"OldST"或者"Slide-seq"。"OldST"是早期原位空间捕获技术。
SpaCET_obj = create.SpaCET.object(
counts,
spotCoordinates,
imagePath = NA,
platform = "oldST"
)
可能是由于数据质量比较好,没有需要过滤的点,官方教程在这里就没有进行质控了,但是还是养成好习惯,做做质控的好。
# calculate the QC metrics
SpaCET_obj = SpaCET.quality.control(SpaCET_obj)
# plot the QC metrics
SpaCET.visualize.spatialFeature(
SpaCET_obj,
spatialType = "QualityControl",
spatialFeatures = c("UMI", "Gene"),
imageBg = T
)
这样我们就得到了UMI count数和基因数在空间中的分布。我们也可以看出,这套空间组学图像长得像赛尔号是没有H&E染色的底片的,仅由空间spot组成。
单细胞数据的导入
单细胞转录组数据需要首先处理成sc_counts和sc_annotation的形式,这两个矩阵就是大家非常熟悉的counts矩阵和metadata,很容易从seurat对象得到。
sc_counts[1:6, 1:5]
c1 c2 c3 c4 c5
A1BG 0 0 0 0 0
A1CF 0 0 0 1 0
A2M 0 0 0 0 0
A2ML1 0 0 0 0 0
A3GALT2 0 0 0 0 0
A4GALT 0 0 0 0 0
sc_annotation[1:6,]
cellID bio_celltype
c1 "c1" "Acinar cells"
c2 "c2" "Ductal - terminal ductal like"
c3 "c3" "Ductal - terminal ductal like"
c4 "c4" "Ductal - CRISP3 high/centroacinar like"
c5 "c5" "Cancer clone A"
c6 "c6" "Cancer clone A"
这个软件非常好用的地方还在于,它可以同时对大群和亚群进行反卷积,只需要把大群对应的亚群存储在sc_lineageTree这个列表里就行了。
head(sc_lineageTree)
$Cancer
[1] "Cancer clone A" "Cancer clone B"
$Ductal
[1] "Ductal - APOL1 high/hypoxic" "Ductal - CRISP3 high/centroacinar like"
[3] "Ductal - MHC Class II" "Ductal - terminal ductal like"
$Macrophage
[1] "Macrophages A" "Macrophages B"
$mDC
[1] "mDCs A" "mDCs B"
$`Acinar cells`
[1] "Acinar cells"
$`Endocrine cells`
[1] "Endocrine cells"
反卷积
然后就是反卷积和可视化的过程,就跟之前类似,就不再赘述了。
SpaCET_obj = SpaCET.deconvolution.matched.scRNAseq(
SpaCET_obj,
sc_counts = sc_counts,
sc_annotation = sc_annotation,
sc_lineageTree = sc_lineageTree,
coreNo = 8
)
SpaCET.visualize.spatialFeature(
SpaCET_obj,
spatialType = "CellFraction",
spatialFeatures = c("Cancer clone A", "Cancer clone B", "Acinar cells", "Ductal - CRISP3 high/centroacinar like"),
nrow = 2
)
这里再将这四种细胞类型的marker基因展示一下,由此可以看出反卷积效果还是挺好的。
SpaCET.visualize.spatialFeature(
SpaCET_obj,
spatialType = "GeneExpression",
spatialFeatures = c("TM4SF1", "S100A4", "PRSS1", "CRISP3"),
nrow = 2
)
最后保存SpaCET对象,后面的细胞互作分析就留作给读者的作业啦。
write_rds(SpaCET_obj, "brac.deconv.sc.rds")
基因集评分
类似于GSVA和AUCell,SpaCET也能计算基因集评分,这里我就省略前面数据导入和质控的过程,直接计算几个基因集的分数。
Hallmark
官网位置:https://www.gsea-msigdb.org/gsea/msigdb/human/collections.jsp#H
经常做GSEA或GSVA的读者应该清楚,Hallmark是Msigdb数据库中的一个经典基因集,我们可以用下面代码对Hallmark基因集进行评分。
SpaCET_obj = SpaCET.GeneSetScore(SpaCET_obj, GeneSets = "Hallmark")
计算完成后的基因集评分矩阵存储在了result下面,可以进行查看。这里行名为基因集名,列名为spot名。
SpaCET_obj@results$GeneSetScore[1:6, 1:6]
50x102 59x19 14x94 47x13 73x43 61x97
HALLMARK_ADIPOGENESIS 0.1577183 0.18533833 0.14495333 0.16393333 0.1640183 0.16843500
HALLMARK_ALLOGRAFT_REJECTION 0.2078400 0.14678500 0.15672667 0.22078000 0.1486567 0.13316000
HALLMARK_ANDROGEN_RESPONSE 0.1230528 0.14306601 0.12574917 0.12489439 0.1682046 0.15501320
HALLMARK_ANGIOGENESIS 0.1749259 0.06383333 0.09259259 0.13099074 0.1601759 0.03875000
HALLMARK_APICAL_JUNCTION 0.1428600 0.13054833 0.12602333 0.14001500 0.1462733 0.13059000
HALLMARK_APICAL_SURFACE 0.0734697 0.06328030 0.06287121 0.05065152 0.0674697 0.07623485
使用下面代码对其中两个基因集的富集分数进行可视化。
SpaCET.visualize.spatialFeature(
SpaCET_obj,
spatialType = "GeneSetScore",
spatialFeatures = c("HALLMARK_HYPOXIA", "HALLMARK_TGF_BETA_SIGNALING")
)
Cancer cell state
文献:https://www.nature.com/articles/s41588-022-01141-9 Cancer cell state基因集记录的是肿瘤细胞的各种状态对应的基因,可以采用相同的方式进行基因集评分和可视化。这里可视化了周期中肿瘤细胞和EMT转化的肿瘤细胞。
# run gene set calculation
SpaCET_obj = SpaCET.GeneSetScore(SpaCET_obj, GeneSets = "CancerCellState")
# visualize two gene sets
SpaCET.visualize.spatialFeature(
SpaCET_obj,
spatialType = "GeneSetScore",
spatialFeatures = c("CancerCellState_Cycle", "CancerCellState_cEMT")
)
TLS
文献:https://www.researchsquare.com/article/rs-3921508 TLS就是一个单独的基因集,它包含有30个三级淋巴结构的标志基因,计算这个基因集的评分并进行可视化,可以明显看出三级淋巴结构的位置。
SpaCET_obj = SpaCET.GeneSetScore(SpaCET_obj, GeneSets = "TLS")
SpaCET.visualize.spatialFeature(
SpaCET_obj,
spatialType = "GeneSetScore",
spatialFeatures = "TLS"
)
自定义基因集
除了上面3种软件内置基因集,也可以根据分析需求自己定义基因集,将其整理成列表的形式就能进行分析了。这里是将T细胞和髓系细胞的marker基因创建为基因集。
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 = "Tcell"
)
在Msigdb官网上能够下载到各种通路的gmt文件,而gmt文件读取进来就是列表格式,所以能直接进行分析。这里举的例子是读取KEGG通路进行评分分析。
gmt2 = read.gmt("~/ref/human/msigdb_v2023.1.Hs_files_to_download_locally/msigdb_v2023.1.Hs_GMTs/c2.cp.kegg.v2023.1.Hs.symbols.gmt")
SpaCET_obj = SpaCET.GeneSetScore(SpaCET_obj, GeneSets = gmt2)
SpaCET.visualize.spatialFeature(
SpaCET_obj,
spatialType = "GeneSetScore",
spatialFeatures = "KEGG_DNA_REPLICATION"
)
总的来说,SpaCET是一个较为强大的分析肿瘤空转数据的R包,许多功能都非常实用,并且函数的参数也很显而易见,对于新手很友好,推荐大家使用。