直击热点,巧用ssGSEA进行免疫浸润分析
关于免疫浸润分析,可谓是最近一段时间的热点,很多文章基于肿瘤免疫细胞微环境进行分析,不管是进行下游基因筛选也好,还是构建诊断模型也好,发表了很多相关的研究。在前面关于《CIBERSORT在免疫浸润中的应用》中,我们讲解了免疫浸润分析中一个比较权威的软件-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 matrix2exp = 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 = T12 )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)组织中,其免疫细胞的浸润是显著不同的,通过聚类分支可以看出两类样本显著富集于不同的分支上。