美文网首页GEOgeo相关转录组数据分析
GEO数据库视频学习笔记(差异分析、可视化、GSEA)

GEO数据库视频学习笔记(差异分析、可视化、GSEA)

作者: 生信start_site | 来源:发表于2020-05-06 06:00 被阅读0次

    笔记回顾:
    1.GEO数据库视频学习笔记(芯片数据下载和数据读取)
    2.GEO数据库视频学习笔记(ID转换)
    3.GEO数据库视频学习笔记(了解你的表达矩阵)

    这一讲的视频地址是:[https://www.bilibili.com/video/BV1is411H7Hq?p=7]

    (一)差异分析

    上面三个视频笔记,记录了如何获得矩阵、如何过滤探针、如何获得分组信息,具备了这些,就可以进行差异分析了。这里Jimmy大神用的是limma包(当然差异分析还有很多其他的包可以用),参考文章:用limma对芯片数据做差异分析

    首先做分组矩阵:

    > dim(exprSet)
    [1] 18821     6
    > library(limma)
    #这一步就是告诉design,哪几个样品是对照,哪几个样品是处理,1代表是,0代表不是
    > design <- model.matrix(~0+factor(group_list))
    > colnames(design)=levels(factor(group_list))
    > rownames(design)=colnames(exprSet)
    > design
                 control Vemurafenib
    control1           1           0
    control2           1           0
    control3           1           0
    Vemurafenib1       0           1
    Vemurafenib2       0           1
    Vemurafenib3       0           1
    attr(,"assign")
    [1] 1 1
    attr(,"contrasts")
    attr(,"contrasts")$`factor(group_list)`
    [1] "contr.treatment"
    

    再做比较矩阵:

    #这个矩阵声明,我们要把Vemurafenib组跟control组进行差异分析比较
    > contrast_matrix <- makeContrasts(Vemurafenib-control,levels=design)
    > contrast_matrix
                 Contrasts
    Levels        Vemurafenib - control
      control                        -1
      Vemurafenib                     1
    # 对照是用来被比的
    

    当你做比较矩阵的时候,如果你搞不清到底是谁和谁在比,请看文章:
    【r<-差异分析】当使用limma时,它在比较什么

    然后就是差异分析了:

    > library(limma)
    # step1
    > fit <- lmFit(exprSet,design)
    # step2
    > fit2 <- contrasts.fit(fit,contrast_matrix)
    > fit2 <- eBayes(fit2)
    # step3
    > tempOutput = topTable(fit2,coef=1,n=Inf)
    > nrDEG = na.omit(tempOutput)
    > head(nrDEG)
              logFC   AveExpr         t      P.Value    adj.P.Val        B
    CD36   5.780170  7.370282  79.74674 1.224250e-16 2.304160e-12 26.74942
    DUSP6 -4.212683  9.106625 -62.45965 1.822336e-15 1.339567e-11 25.00170
    DCT    5.633027  8.763220  61.57004 2.135222e-15 1.339567e-11 24.88864
    SPRY2 -3.801663  9.726468 -53.97076 9.143161e-15 4.302086e-11 23.80028
    MOXD1  3.263063 10.171635  47.09632 4.109399e-14 1.318367e-10 22.58677
    ETV4  -3.843247  9.667077 -47.00035 4.202860e-14 1.318367e-10 22.56798
    > dif <- tempOutput[tempOutput[,"P.Value"]<0.01,] #你可以只保存p<0.01的基因,也可以不筛选,这里不是强制的
    > write.csv(dif,file="Differential_limma_matrix.csv")
    
    重点到了!!!如何检查你的差异分析有没有问题???

    先看一下刚得到的差异分析矩阵:

    我们就以第一个基因为检查例子:CD36

    > exprSet[rownames(exprSet)=='CD36',]
        control1     control2     control3 Vemurafenib1 Vemurafenib2 Vemurafenib3 
         4.54610      4.40210      4.49239     10.25060     10.21480    10.31570 
    

    在表达矩阵里,CD36这个基因在对照组里大概是4,在处理组里是10左右。那么它的logFC应该是个正数,因为表达量经过处理后上升了。可以看到limma差异分析矩阵里logFC是5.78017,是个正数,那么就应该没什么问题。如果你发现表达上调的基因logFC是个负值,那么可能是你之前的分组,或者比较矩阵没有做对。

    简单的画个热图吧,选差异分析列表里的前25个基因:

    > library(pheatmap)
    > getgene = head(rownames(dif),25)
    > getgene_matrix=exprSet[getgene,]
    > getgene_matrix=t(scale(t(getgene_matrix)))
    > pheatmap(getgene_matrix)
    

    (二)火山图

    先画一个最丑火山图:

    > plot(nrDEG$logFC,-log10(nrDEG$P.Value))
    

    太丑了,可以给它美化一下,但是Jimmy在这个视频里并没有提到如何美化,所以我用了自己之前用过的代码:

    > library(EnhancedVolcano)
    > library(airway)
    > EnhancedVolcano(nrDEG,
                     lab = rownames(nrDEG),
                     x = 'logFC',
                     y = 'P.Value',
                     xlim = c(-6, 6),
                     title = 'Vemurafenib versus control',
                     pCutoff = 0.01,
                     FCcutoff = 2,
                     transcriptPointSize = 1.5,
                     transcriptLabSize = 3.0,
                     col=c('black', 'blue', 'green', 'red1'),
                     colAlpha = 1,
                     legend=c('NS','logFC','P.value',
                              'P.value & logFC'),
                     legendPosition = 'right',
                     legendLabSize = 14,
                     legendIconSize = 5.0,
                     gridlines.major = FALSE,
                     gridlines.minor = FALSE
    )
    
    是不是比前面那个黑白火山图强多了?

    (三)GO,KEGG,GSEA分析

    在视频里,关于GO和KEGG这两个部分讲的很快,没有涉及到具体的代码,需要的童鞋可以参考我之前写的文章:
    RNA-seq练习 第三部分(DEseq2筛选差异表达基因,可视化)

    做完差异分析后,实际上你得到的差异基因远远小于总基因数,你只是知道它上调下调了多少实际上是不够的,因为有些基因虽然在处理后有变化,但你还需要知道这些基因哪些是非常重要的。这时就需要GSEA分析。关于这一块,视频讲的有些凌乱。。。对于GESA软件,大神也木有细讲。可以参考我之前的笔记:GSEA学习笔记,里面都是非常非常详细的代码,也详细的讲了怎么看GSEA的图以及简单的原理,还有如何使用软件进行GSEA分析。这里只根据GEO数据贴上代码:

    > geneList <- nrDEG$logFC
    > names(geneList) <- gene.df$ENTREZID
    > geneList_new <- sort(geneList,decreasing = T)
    #go_result <- gseGO(geneList  = geneList_new,
    #                   ont = "BP", 
    #                   OrgDb = org.Hs.eg.db,
    #                   minGSSize    = 10,
    #                   maxGSSize = 500,
    #                   pvalueCutoff = 1)
    #go_result <- setReadable(go_result,OrgDb = org.Hs.eg.db)
    #go_result_df <- as.data.frame(go_result)
    #gseaplot(go_result,geneSetID = c("GO:0000727"))
    > kegg <-gseKEGG(geneList  = geneList_new,
                   organism     = 'hsa',
                   nPerm        = 1000,
                   minGSSize    = 10,
                   maxGSSize = 500,
                   pvalueCutoff = 1,
                   verbose      = FALSE)
    > kegg_result <- as.data.frame(kegg)
    > gseaplot(kegg,geneSetID = 'hsa03030') #这里你可以根据上一行代码得到的data.frame里任何一个通路代码来进行展示
    #图就不放了
    

    上面你会发现我分别用了GO和KEGG的结果来展示GESA,这就是根据富集结果来展示哪些基因(通路)是重要的一种手段。

    参考文章;生信技能树:差异分析得到的结果注释一文就够

    相关文章

      网友评论

        本文标题:GEO数据库视频学习笔记(差异分析、可视化、GSEA)

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