前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三阴性乳腺癌表达数据探索笔记之GSVA分析

三阴性乳腺癌表达数据探索笔记之GSVA分析

作者头像
生信技能树
发布2020-10-26 10:59:36
4.1K0
发布2020-10-26 10:59:36
举报
文章被收录于专栏:生信技能树生信技能树
学徒和学员已经陆续出师,是时候把生信技能树的舞台交给后辈了!

下面是学徒写的《GEO数据挖掘课程》的配套笔记(第6篇)

  1. 文献解读
  2. 数据下载及理解
  3. 差异性分析
  4. 差异基因的富集分析
  5. TNBC定义
  6. 三阴性乳腺癌表达数据分析笔记之PAM50
  7. 三阴性乳腺癌表达矩阵探索笔记之GSEA

除了GSEA之外,还有很多其他类型的分析方式,用到的统计学原理有差别。如GSVASSGSEAPGSEA

GSVAGSEA的差别在于,这种方法不需要对基因进行排序,因此也意味着不需要首先进行其他的统计学分析,如基因在样本之间的表达差异,如变化倍数,然后根据变化值从高到低进行排序。只需要样本内基因的排序,每个样本内部可以根据基因表达的count值来进行排序,从而在样本内部是否有基因富集。针对每个样本进行分析。

  • 数据准备:
  1. 表达矩阵,需要进行ID转换,需要SYMBOL号,这根据下载的数据集类型,和GSEA用到的数据集,从MSigDB 下载
  2. 需要分组信息
  3. 基因集(gene_list)
  • 第一步:表达矩阵的探针名转换为SYMBOL
代码语言:javascript
复制
  load(file = 'step1-output.Rdata')
  # 每次都要检测数据
  dat[1:4,1:4]  
  library(hgu133plus2.db)
  ids=toTable(hgu133plus2SYMBOL)
  #通过看hgu133plus2.db这个包的说明书知道提取probe_id(探针名)和symbol(基因名)的对应关系的表达矩阵的函数为toTable
  head(ids)
  dat=dat[ids$probe_id,]
  dat[1:4,1:4] 
  ids$median=apply(dat,1,median)
  #对dat这个矩阵按行操作,取每一行的中位数,将结果添加到ids矩阵median列
  ids=ids[order(ids$symbol,ids$median,decreasing = T),]
  #对ids$symbol按照ids$median中位数从大到小排列的顺序排序,将对应的行赋值为一个新的ids
  ids=ids[!duplicated(ids$symbol),]
  #将symbol这一列去除重复项
  dat=dat[ids$probe_id,]
  rownames(dat)=ids$symbol
  dat[1:4,1:4]  

ID转换结果

  • 第二步:进行GSVA分析,获得GSVA得分矩阵
代码语言:javascript
复制
  X=dat
  table(group_list)
  ## Molecular Signatures Database (MSigDb) 
  d='D:/bioinformation/曾老师任务/GSE76275-TNBC-master/MSigDB/symbols/'
  gmts=list.files(d,pattern = 'all')
  gmts
  library(ggplot2)
  library(clusterProfiler)
  library(org.Hs.eg.db)
  library(GSVA) # BiocManager::install('GSVA')
  
  es_max <- lapply(gmts, function(gmtfile){ 
      #gmtfile=gmts[8];gmtfile
      geneset <- getGmt(file.path(d,gmtfile))  
      es.max <- gsva(X, geneset, 
                     mx.diff=FALSE, verbose=FALSE, 
                     parallel.sz=1)
      return(es.max)
    }) #es_max是一个长度为8的list,其中的每个元素都是基因集数据库对应的GSVA得分矩阵

GSVA得分矩阵

  • 第三步:对GSVA得分矩阵分别进行差异分析
代码语言:javascript
复制
    adjPvalueCutoff <- 0.001
    logFCcutoff <- log2(2)
    es_deg <- lapply(es_max, function(es.max){
      #es.max <- es_max[[2]]
      table(group_list)
      dim(es.max)
      design <- model.matrix(~0+factor(group_list))
      colnames(design)=levels(factor(group_list))
      rownames(design)=colnames(es.max)
      design
      library(limma)
      contrast.matrix<-makeContrasts(paste0(unique(group_list),collapse = "-"),
                                     levels = design)
      contrast.matrix<-makeContrasts("TNBC-noTNBC",
                                     levels = design)
      
      contrast.matrix ##这个矩阵声明,我们要把TNBC组跟noTNBC进行差异分析比较
      
      deg = function(es.max,design,contrast.matrix){
        ##step1
        fit <- lmFit(es.max,design)
        ##step2
        fit2 <- contrasts.fit(fit, contrast.matrix) 
        ##这一步很重要,大家可以自行看看效果
        
        fit2 <- eBayes(fit2)  ## default no trend !!!
        ##eBayes() with trend=TRUE
        ##step3
        res <- decideTests(fit2, p.value=adjPvalueCutoff)
        summary(res)
        tempOutput = topTable(fit2, coef=1, n=Inf)
        nrDEG = na.omit(tempOutput) 
        #write.csv(nrDEG2,"limma_notrend.results.csv",quote = F)
        head(nrDEG)
        return(nrDEG)
      }
      
      re = deg(es.max,design,contrast.matrix)
      nrDEG=re
      head(nrDEG) 
      return(nrDEG)
    }) #es_deg是一个列表,包含全部GSVA得分矩阵的差异分析矩阵,与es_max对应

GSVA得分差异分析矩阵

  • 第四步:绘制热图展示差异显著的通路
代码语言:javascript
复制
library(pheatmap)
  lapply(1:length(es_deg), function(i){
    # i=2
    print(i)
    dat=es_max[[i]]
    df=es_deg[[i]]
    df=df[df$P.Value<0.01 & abs(df$logFC) > 0.5,] #筛选出差异比较显著的通路
    print(dim(df))
    if(nrow(df)>5){
      n=rownames(df)
      dat=dat[match(n,rownames(dat)),]
      ac=data.frame(g=group_list)
      rownames(ac)=colnames(dat)
      rownames(dat)=substring(rownames(dat),1,50)
      pheatmap::pheatmap(dat, 
                         fontsize_row = 8,height = 11,
                         annotation_col = ac,show_colnames = F,
                         filename = paste0('gsva_',strsplit(gmts[i],'[.]')[[1]][1],'.pdf'))
      
    }
}) #以上的代码会绘制出8个数据集的全部热图
  
  adjPvalueCutoff <- 0.001
  logFCcutoff <- log2(2)
  df=do.call(rbind ,es_deg)
  es_matrix=do.call(rbind ,es_max)
  df=df[df$P.Value<0.01 & abs(df$logFC) > 0.5,]
  write.csv(df,file = 'GSVA_DEG.csv') #将所有GSVA的得分差异显著的结果保存为一个csv,便于检查

GSVA得分差异矩阵热图

  • 结果解读:

GSVA对数据库中的每一个通路在每个样本中算了一个值,相当于GSEA的enrichment score, 如果得分越高,说明这个通路在该样本中被改变的越严重。

得到的GSVA得分矩阵可以用来做差异分析,看哪些通路在两个分组中存在差异,类似于基因表达差异分析。

这些分析,基本上读一下我五年前在生信技能树的表达芯片的公共数据库挖掘系列推文 就明白了;

视频观看方式

我把3年前的收费视频课程:3年前的GEO数据挖掘课程你可以听3小时或者3天甚至3个月,免费到B站:

  • 这个课程超级棒,B站免费学习咯:https://m.bilibili.com/video/BV1dy4y1C7jz
  • 配套代码在GitHub哈:https://github.com/jmzeng1314/GSE76275-TNBC
  • TCGA数据库挖掘,代码在:https://github.com/jmzeng1314/TCGA_BRCA
  • GTEx数据库挖掘,代码在:https://github.com/jmzeng1314/gtex_BRCA
  • METABRIC数据库挖掘,代码在:https://github.com/jmzeng1314/METABRIC

然后马上就有了3千多学习量,而且有学员给出来了图文并茂版本万字笔记,让我非常感动!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档