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

笔记回顾:
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,这就是根据富集结果来展示哪些基因(通路)是重要的一种手段。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352