直击热点,巧用ssGSEA进行免疫浸润分析|细胞|肿瘤|丰度|微环境
关于免疫浸润分析,可谓是最近一段时间的热点,很多文章基于肿瘤免疫细胞微环境进行分析,不管是进行下游基因筛选也好,还是构建诊断模型也好,发表了很多相关的研究。在前面关于《》中,我们讲解了免疫浸润分析中一个比较权威的软件-CIBERSORT。可是在很多文献中,除了CIBERSORT,我们还经常看到其他类型的免疫浸润分析软件,例如TIMER,ssGSEA,ESTIMATE等等。例如下面这篇文章,2020年发表在Frontiers in Oncology杂志(2020年发布的影响因子4.8分),直接把ssGSEA作为主要分析方法写在文章题目当中。
文中的methods部分写到,使用ssGSEA对相应的数据集进行免疫细胞丰度的测定:
下面我们就来学习一下,如何使用ssGSEA对表达谱进行免疫浸润分析。
原理介绍
单样本基因集富集分析(single sample gene set enrichment analysis, ssGSEA),是GSEA方法的扩展,ssGSEA允许定义一个富集分数,该分数表示给定数据集内每个样本中基因集的绝对富集程度。文章2009年发表于nature,题目为Systematic RNA interference reveals that oncogenic KRAS-driven cancers require TBK1。
其具体的实现原理我们这里不做过多详细解读,现在直奔主题,看看其具体的实现过程。
实例演练
ssGSEA是通过R包GSVA去实现的,在分析之前,我们需要安装GSVA包,其存储在Bioconductor仓库,具体的安装过程如下:
1if (!requireNamespace("BiocManager", quietly = TRUE))
2 install.packages("BiocManager")
3BiocManager::install("GSVA")
然后看一下我们今天的测试数据,我们用的是GEO中的肝癌数据GSE19665(https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE19665)这个数据集,其中共20个样本,10个肝癌vs10个癌旁样本。了解了测试数据,下面我们要做的就是开始进行ssGSEA分析啦。
第一步,读入数据:
1## read in expression matrix
2exp = read.table("./expression.txt", row.names = 1, header = T)
3View(head(exp))
看一下我们的数据:
第二步,读入文献当中定义的28种免疫细胞的基因集合,在这里我们看到有Activated CD8 T cell, Central memory CD8 T cell等等。
但是,需要注意的是在GSVA包提供的分析ssGSEA分析函数中,需要读入的是一个list,也就是列表格式的基因集合,所以在这里为了大家读取数据方便,我们就直接把上述基因集合的列表进行整理,将其存储为list格式的R data,用load()函数直接读取即可。代码如下:
1## read in gene set
2load("gene_set.Rdata")
第三步,也就是最重要的一步,就是进行ssGSEA分析了,这里直接把代码贴出来,方便大家学习使用(文末有领取方式):
1# run gsva
2library(GSVA)
3library(limma)
4
5ssgsea.res <-
6 gsva(
7 as.matrix(exp),
8 gene.set.list,
9 method = "ssgsea",
10 kcdf = "Gaussian",
11 abs.ranking = T
12 )
13View(head(ssgsea.res))
结果运行出来是这个样子的:
我们来看一下计算结果,也就是每种免疫细胞的丰度:
每一行代表一种免疫细胞,每一列代表一个样本,就等同于一个表达值矩阵。好了,关于ssGSEA的分析就到这里。下面的内容,我们可以基于这个免疫细胞丰度的矩阵玩出很多花样,比如和基因进行关联分析,根据免疫细胞定量把样本进行分类,关联患者预后进行分析,结合LASSO回归构建风险评估模型等等内容,诸如此类在相关文献中有很多种玩法,后面我们会一一进行讲解。
在这里先给大家做一个层次聚类的热图,先行一睹为快,看看通过免疫细胞微环境,能否把肿瘤和正常组织区分开来。热图代码如下(文末有领取方式):
1#绘制热图
2library(pheatmap)
3
4# read in phenotype
5target = read.table("target.txt", header = T, sep = "\t")
6
7
8annotation_col = as.data.frame(target$group)
9colnames(annotation_col) = "Group"
10rownames(annotation_col) = colnames(ssgsea.res)
11color.key <- c("#3300CC", "#3399FF", "white", "#FF3333", "#CC0000")
12pheatmap(
13 ssgsea.res,
14 color = colorRampPalette(color.key)(50),
15 border_color = NA,
16 annotation_col = annotation_col,
17 labels_row = NULL,
18 clustering_method = "ward.D2",
19 show_rownames = T,
20 show_colnames = T,
21 fontsize_col = 5
22)
绘制出来的图形如下所示:
从上图中我们看出,在肿瘤(cancer)和癌旁(control)组织中,其免疫细胞的浸润是显著不同的,通过聚类分支可以看出两类样本显著富集于不同的分支上。
好了,小试牛刀,没想到ssGSEA的结果这么不错,还不赶紧试试!
如需获取分析代码和测试数据
科研猫公众号对话框回复:ssGSEA
如何快速制作箱线图?
关注科研猫视频号~