美文网首页
ssGSEA 与CIBERSORT分析--肿瘤免疫浸润分析

ssGSEA 与CIBERSORT分析--肿瘤免疫浸润分析

作者: 801ca16edefa | 来源:发表于2022-03-12 22:09 被阅读0次

背景

GSEA、GSVA、ssGSEA和GO、KEGG富集分析之间的区别?

从输入的表达矩阵入手
1. GSEA的输入矩阵:差异表达分析后得到的矩阵!
一列基因名/ENTREZ + logFC值(记得按照logFC值从大到小排列)
2. GSVA的输入矩阵:列是样本、行是基因、单元格内是表达量【没有差异分析!】
3. ssGSEA 名字长得像GSEA,其实是GSVA的好兄弟,因为(single sample GSEA)人如其名,都单样本了还怎么做差异分析呢?没有差异分析怎么做GSEA呢?所以ssGSEA就是单样本的GSVA
4. GO/KEGG的输入矩阵:它们连read counts都不要!只用提供基因名!

分析方法
1. GSEA:GSEA同时考虑了基因在整个表达谱中Rank of FoldChange & 同一基因集中的基因在表达谱中的相互之间的距离。 通俗来讲,GSEA基于如下假设: 一个基因集中的基因在表达谱中所处的Rank越极端(高/低FoldChange)& 基因之间的距离越短(Rank相近)= 该基因集越显著。
2. GSVA:更好理解!如果某个基因存在于某个通路,那就给它“一分”,不在就扣它“一分”,这样就能计算得到Enrichment Score(ES)。 这样,某个通路在某个样本中就会有一个最终的得分。所以看GSVA分析完之后的表达矩阵,变成了:列是样本,行是通路,单元格是Enrichment Score(ES)

  1. ssGSEA:只有一个样本,其他计算方法=GSVA。

GSEA分析需要输入gmt文件,这个文件可以来自[GSEA/MsigDB](GSEA | MSigDB (gsea-msigdb.org);
GSVA 和ssGSEA 需要提供geneset文件,他是一种算法,根据您提供的geneset进行相应的分析。
CIBERSORT是一个程序包,使用LM22仅仅对免疫浸润细胞进行分析。

ssGSEA分析

1 文件准备 (文件样式)

1. 表达矩阵
2.cellMarker 原始表格
3. cellMarker 整理成list样式

代码

#加载包
library(tidyverse)
library(data.table)
library(GSVA)

#1.2 准备细胞marker (geneset)
cellMarker <- data.table::fread("cellMarker.csv",data.table = F)
colnames(cellMarker)[2] <- "celltype"
#将cellMarker文件列名的第2个修改为celltype
type <- split(cellMarker,cellMarker$celltype)
#将cellMarker文件以celltype为分组拆分成list数据格式
#处理data.tables列表通常比使用group by参数按组对单个data.table进行操作要慢得多
cellMarker <- lapply(type, function(x){
  dd = x$Metagene
  unique(dd)
})
#将list中每个celltype中的基因进行合并
save(cellMarker,file = "cellMarker_ssGSEA.Rdata")#保存中间文件
load("immune_infiltration//cellMarker_ssGSEA.Rdata")

##1.3 表达量矩阵的准备
###行是基因,列是样本
expr <- data.table::fread("LIHC_fpkm_mRNA_01A.txt",data.table = F)   #读取表达文件
rownames(expr) <- expr[,1]   #将第一列作为行名
expr <- expr[,-1]   #去除第一列
expr <- as.matrix(expr)   #将expr转换为矩阵格式

2. 使用ssGSEA量化免疫浸润

gsva_data <- gsva(expr,cellMarker, method = "ssgsea")

a <- gsva_data %>% t() %>% as.data.frame()
identical(rownames(a),rownames(group))
a$group <- group$group
a <- a %>% rownames_to_column("sample")
write.table(a,"ssGSEA.txt",sep = "\t",row.names = T,col.names = NA,quote = F)
ssGSEA输出结果

3. 可视化

library(ggsci)
library(tidyr)
library(ggpubr)
b <- gather(a,key=ssGSEA,value = Expression,-c(group,sample)) # 提前准备好group信息
ggboxplot(b, x = "ssGSEA", y = "Expression",
         fill = "group", palette = "lancet")+
 stat_compare_means(aes(group = group),
                    method = "wilcox.test",
                    label = "p.signif",
                    symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1),
                                     symbols = c("***", "**", "*", "ns")))+
 theme(text = element_text(size=10),
       axis.text.x = element_text(angle=45, hjust=1)) 

image.png

CIBERSORT分析

#加载R包
library(e1071)
library(parallel)
library(preprocessCore)
source("CIBERSORT.R")   #加载CIBERSORT程序包
sig_matrix <- "LM22.txt"   
mixture_file = 'LIHC_fpkm_mRNA_01A.txt'   #肿瘤患者表达谱
res_cibersort <- CIBERSORT(sig_matrix, mixture_file, perm=100, QN=TRUE)
save(res_cibersort,file = "res_cibersort.Rdata")   #保存中间文件
load("res_cibersort.Rdata")
res_cibersort <- res_cibersort[,1:22]   
ciber.res <- res_cibersort[,colSums(res_cibersort) > 0]   #去除丰度全为0的细胞

可视化

显示同一个样本,不同免疫细胞的浸润比例,总和是1.

mycol <- ggplot2::alpha(rainbow(ncol(ciber.res)), 0.7) #创建彩虹色板(带70%透明度)
par(bty="o", mgp = c(2.5,0.3,0), mar = c(2.1,4.1,2.1,10.1),tcl=-.25,las = 1,xpd = F)
barplot(as.matrix(t(ciber.res)),
        border = NA, # 柱子无边框写
        names.arg = rep("",nrow(ciber.res)), # 无横坐标样本名
        yaxt = "n", # 先不绘制y轴
        ylab = "Relative percentage", # 修改y轴名称
        col = mycol) # 采用彩虹色板
axis(side = 2, at = c(0,0.2,0.4,0.6,0.8,1), # 补齐y轴添加百分号
 labels = c("0%","20%","40%","60%","80%","100%"))
legend(par("usr")[2]-20, # 这里-20要根据实际出图的图例位置情况调整
       par("usr")[4], 
       legend = colnames(ciber.res), 
       xpd = T,
       fill = mycol,
       cex = 0.6, 
       border = NA, 
       y.intersp = 1,
       x.intersp = 0.2,
       bty = "n")

结果输出:
每一列代表一个样本。可以清晰的看出,不同免疫细胞在肿瘤中的占比。

CIBERSORT免疫浸润

可视化

分组显示--箱型图

a <- read.table("CIBERSORT-Results.txt", sep = "\t",row.names = 1,check.names = F,header = T)
a <- a[,1:22]
identical(rownames(a),rownames(group))
b <- group
class(b$group)
a$group <- b$group
a <- a %>% rownames_to_column("sample")
library(ggsci)
library(tidyr)
library(ggpubr)
#install.packages("ggsci")
#install.packages("tidyr")
#install.packages("ggpubr")

b <- gather(a,key=CIBERSORT,value = Proportion,-c(group,sample))

ggboxplot(b, x = "CIBERSORT", y = "Proportion",
          fill = "group", palette = "lancet")+
  stat_compare_means(aes(group = group),
                     method = "wilcox.test",
                     label = "p.signif",
                     symnum.args=list(cutpoints = c(0, 0.001, 0.01, 0.05, 1),
                                      symbols = c("***", "**", "*", "ns")))+
  theme(text = element_text(size=10),
        axis.text.x = element_text(angle=45, hjust=1))

结果输出:

image.png

两种方法略有不同,但都是说明同一个问题,可以比较着看。

相关文章

网友评论

      本文标题:ssGSEA 与CIBERSORT分析--肿瘤免疫浸润分析

      本文链接:https://www.haomeiwen.com/subject/skocdrtx.html