直击热点,巧用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)组织中,其免疫细胞的浸润是显著不同的,通过聚类分支可以看出两类样本显著富集于不同的分支上。

(0)

相关推荐