Advertisement

R语言---生信分析---ssGSEA基因集富集分析、免疫浸润

阅读量:

R语言---生信分析---ssGSEA基因集富集分析、免疫浸润

  • 背景介绍

  • 代码

      • 0. 设置工作目录,加载需要的包
      • 1. 读取 TPM 表达矩阵数据,或表型数据
      • 2. 数据处理
      • 3. 加载需要的包,数据
      • 4. 读取基因列表,得到免疫细胞对应的特异的基因
      • 5. ssgsea分析
      • 6. 富集分数画热图
  • 结果

  • 参考

背景介绍

单样本基因集富集分析(single sample gene set enrichment analysis, ssGSEA),是GSEA方法的扩展,计算每个样本和基因集配对的富集分数。每个ssGSEA富集评分代表了样本中特定基因集的成员被协调上调或下调的程度

代码

0. 设置工作目录,加载需要的包

复制代码
    setwd('D:\ Desktop\ GEO分析\ GSE1991')
    rm(list=ls())

1. 读取 TPM 表达矩阵数据,或表型数据

复制代码
    a <- read.table('data_tpms.xls',
                header = T)
                # ,row.names=1)#读取已经下载好的补充的表达矩阵压缩文件
    a[1:4,1:4]
    
    #去掉基因名,得到纯粹的表达矩阵raw_data
    raw_data<- a[,-1]
    raw_data[1:4,1:4]
    
    ###读取表型信息
    pheno <- read.csv(file = 'GSE1991_series_matrix.txt')
    # 获取Sample_title Sample_characteristics, 标本名称、样本编号 进行处理,替换为P
    # pheno <- data.frame(num1 = strsplit(as.character(pheno[42,]),split='\t')[[1]][-1],
    #                     num2 = gsub('patient: No.','P',strsplit(as.character(pheno[51,]),split='\t')[[1]][-1]))

2. 数据处理

复制代码
    ####数据过滤,把表达量和为0的基因去掉(去O)
    data<- a[!apply(raw_data,1,sum)==0,]
    ####去除重复基因名的行,归一化
    data$median=apply(data[,-1],1,median)#计算每行的中位数,添加到 data数据中
    data[1:4,1:4]
    
    data=data[order(data$gene_name, data$median,decreasing = T),]#排序
    data=data[!duplicated(data$gene_name),]#去除重复的基因名
    rownames(data)=data$gene_name#把基因名变成行名
    uni_matrix <- data[,grep('\ d+',colnames(data))]
    #grep('\ d+',colnames(data))识别有数字的位置,然后挑出来
    uni_matrix <- log2(uni_matrix+1)#把表达矩阵log
    colnames(uni_matrix)<- gsub('DSP.','',gsub('\ .','\ -',colnames(uni_matrix)))#处理行名
    uni_matrix<- uni_matrix[,order(colnames(uni_matrix))]#根据行名排序表达矩阵
    ### 中间保存
    save(uni_matrix, file = 'uni_matrix.Rdata')##把处理好的数据存好
    write.table(uni_matrix, 'log2_tpm_uni_matrix.xls', sep='\t')
    uni_matrix[1:4,1:4]

3. 加载需要的包,数据

复制代码
    #======== 进行ssGSEA分析 =============
    ## 
    #if (!require("BiocManager", quietly = TRUE))
    #  install.packages("BiocManager")
    
    #BiocManager::install("GSVA")
    
    rm(list=ls())
    #加载包
    {
      library(genefilter)
      library(GSVA)
      library(Biobase)
      library(stringr)
    }
    ##载入数据
    load('uni_matrix.Rdata')

4. 读取基因列表,得到免疫细胞对应的特异的基因

TILs_marker.csv :
忘记从哪下载的了,忘记是否经过处理了。可以在上面的链接中下载,不要积分。
–==
又找了个其他的资源,可能需要做下处理
下载28种免疫细胞的参考基因集 < http://cis.hku.hk/TISIDB/data/download/CellReports.txt >

复制代码
    # 读取基因列表,得到免疫细胞对应的特异的基因
    gene_set<- read.csv('../TILs_marker.csv',
                    header = T)##读取已经下载好的免疫细胞和对应基因列表,来源见文献附件
    gene_set<-gene_set[, 1:2]#选取特异基因和对应的免疫细胞两行
    head(gene_set)

5. ssgsea分析

复制代码
    ### 读取基因列表,得到免疫细胞对应的特异的基因
    list<- split(as.matrix(gene_set)[,1], gene_set[,2])
    
    #评估Estimates GSVA enrichment scores.
    gsva_matrix<- gsva(as.matrix(uni_matrix), list,method='ssgsea',
                   kcdf='Gaussian',abs.ranking=TRUE)
    save(gsva_matrix, file = 'gsva_matrix.Rdata')##把处理好的数据存好
    write.table(gsva_matrix, 'gsva_matrix.xls', sep='\t')

6. 富集分数画热图

复制代码
    ##======   富集分数画热图   =========
    load('gsva_matrix.Rdata')
    # install.packages("pheatmap")
    library(pheatmap)
    gsva_matrix1<- t(scale(t(gsva_matrix)))#归一化
    gsva_matrix1[gsva_matrix1< -2] <- -2
    gsva_matrix1[gsva_matrix1>2] <- 2
    anti_tumor <- c('Activated CD4 T cell', 'Activated CD8 T cell', 'Central memory CD4 T cell', 'Central memory CD8 T cell', 'Effector memeory CD4 T cell', 'Effector memeory CD8 T cell', 'Type 1 T helper cell', 'Type 17 T helper cell', 'Activated dendritic cell', 'CD56bright natural killer cell', 'Natural killer cell', 'Natural killer T cell')
    pro_tumor <- c('Regulatory T cell', 'Type 2 T helper cell', 'CD56dim natural killer cell', 'Immature dendritic cell', 'Macrophage', 'MDSC', 'Neutrophil', 'Plasmacytoid dendritic cell')
    anti<- gsub('^ ','',rownames(gsva_matrix1))%in%anti_tumor
    pro<- gsub('^ ','',rownames(gsva_matrix1))%in%pro_tumor
    non <- !(anti|pro)##设定三种基因
    gsva_matrix1<- rbind(gsva_matrix1[anti,],gsva_matrix1[pro,],gsva_matrix1[non,])#再结合起来,使图分成三段
    normalization<-function(x){
      return((x-min(x))/(max(x)-min(x)))}#设定normalization函数
    nor_gsva_matrix1 <- normalization(gsva_matrix1)
    
    # annotation_col = data.frame(patient=pheno$num2)#加上病人编号
    # rownames(annotation_col)<-colnames(uni_matrix)#使编号能互相对应
    
    # bk = unique(c(seq(0,1, length=100)))#设定热图参数
    pheatmap(nor_gsva_matrix1,
         show_colnames = F,
         cluster_rows = F,cluster_cols = F,
         # annotation_col = annotation_col,
         # breaks=bk,
         # cellwidth=5,cellheight=5,
         # fontsize=5,
         gaps_row = c(12,20),)
         # filename = 'ssgsea.pdf',width = 8)#画热图
    # 保存数据
    # save(gsva_matrix,gsva_matrix1,pheno,file = 'score.Rdata')

结果

在这里插入图片描述

参考

https://www.jianshu.com/p/b53fa8b5c253
代码原理:http://biozhong.cn/categories/study/ssGSEA.html

全部评论 (0)

还没有任何评论哟~