前面我们讲过GO.db这个包,现在接着延伸topGO包,该包是用来协助GO富集分析

1)安装

if("topGO" %in% rownames(installed.packages()) == FALSE) {source("http://bioconductor.org/biocLite.R");biocLite("topGO")}
suppressMessages(library(topGO))
ls("package:topGO")

2)使用方法

该包主要有三个使用步骤:

2.1、Data preparation:准备数据集,用于构建 topGOdata.对象。

2.1.1、包括gene标识符(List of genes identifiers)及相应的分值gene scores(例如p值等)
2.1.2、差异表达基因list或经一定标准按照分值筛选的基因集用于后续分析(list of differentially expressed genes or a criteria for selecting genes
        based on their scores);
2.1.3、identifier和GO term间的map,即GOterm表:(gene-to-GO annotations ) ####例如测试文件中的geneid2go.map
2.1.4、GO的层级结构,由GO.db提供,目前这个包只支持GO.db提供的结构

goterm表示例(gene-to-GO annotations ):

2.2、Running enrichment tests:进行富集分析,用任何可行的混合统计测试和方法来处理 GO拓扑结构(GO topology)

2.3、Analysis results:用 summary functions 和 visualisation tools对第二步进行统计和可视化

3)简单示例(guide)

3.1.1、准备输入文件

library(ALL)
data(ALL)
data(geneList) ##文件1:基因list,
affyLib <- paste(annotation(ALL), "db", sep = ".") #####"hgu95av2.db"
library(package = affyLib, character.only = TRUE) ########GO term表
sum(topDiffGenes(geneList) ###选择差异基因集,

3.1.2、构建 topGOdata对象(核心步骤):

sampleGOdata <- new("topGOdata",
description = "Simple session", ##topGOdata的描述,可选
         ontology = "BP", ##可指定要分析的GO term的类型,即BP、CC之类
allGenes = geneList, ##基因identifier的原始列表
         geneSel = topDiffGenes, ##geneSelectionFun联合作用,筛选出后续参与分析的基因
nodeSize = 10, ##富集的GO term辖下基因的最小数目,这里选择10.即最少10个
annot = annFUN.db, ##提取gene-to-GO mappings 的对应关系
        affyLib = affyLib)
sampleGOdata

3.2 Performing the enrichment tests

有了topGOdata对象,接下来就可以用来进行富集分析。这里用两种检验方法:Fisher’s exact test (基于 gene counts)和Kolmogorov-Smirnov like test (computes enrichment based on gene scores)。
其中用runTest函数来进行这些检验,该函数含有3个参数:第一个是topGOdata对象、第二个是algorithm(用于指定处理 GO graph structured的方法)、第三个是statistic(用于指定检验方法)

resultFisher <- runTest(sampleGOdata, algorithm = "classic", statistic = "fisher")   ##Fisher’s exact test

resultKS <- runTest(sampleGOdata, algorithm = "classic", statistic = "ks")  #Kolmogorov-Smirnov test,classic method
resultKS.elim <- runTest(sampleGOdata, algorithm = "elim", statistic = "ks")#Kolmogorov-Smirnov test, elim method

3.3 Analysis of results

当富集检验结束后,我们就可以分析并解析结果。

runTest()这个函数用来分析显著富集的 GO terms及其相应的p值。

allRes <- GenTable(sampleGOdata,                 ##之前构建的topGOdata实例
      classicFisher = resultFisher, ##生成GO graphde的方法
classicKS = resultKS, ##生成GO graphde的方法
      elimKS = resultKS.elim, ##生成GO graphde的方法
orderBy = "elimKS",
      ranksOf = "classicFisher",
      topNodes = 10) ##这里显示前10个显著结果

用 score()函数来测评topGO结果对象中 GO term的 p-values ,并用散点图来说明。

pValue.classic <- score(resultKS)
pValue.elim <- score(resultKS.elim)[names(pValue.classic)]
gstat <- termStat(sampleGOdata, names(pValue.classic))
gSize <- gstat$Annotated / max(gstat$Annotated) * 4
plot(pValue.classic, pValue.elim, xlab = "p-value classic", ylab = "p-value elim",pch = 19, cex = gSize)

差看显著富集的GO terms在 GO graph中的分布.

showSigOfNodes(sampleGOdata, score(resultKS.elim), firstSigNodes = 5, useInfo = 'all')

4)实战

4.1 原始数据集的准备(上面的4个文件)

library(topGO)
library(ALL) ##准备数据集
data(ALL) ##文件1:原始数据集
BPterms <- ls(GOBPTerm)
MFterms <- ls(GOMFTerm)
CCterms <- ls(GOCCTerm)
head(BPterms)
head(MFterms)
head(CCterms) library(genefilter) ##对原始数据进行过滤
selProbes <- genefilter(ALL, filterfun(pOverA(0.20, log2(100)), function(x) (IQR(x) > 0.25)))#数据清洗
eset <- ALL[selProbes, ] ##数据清洗:这里去掉及其低表达的基因,及探针在每个样品中表达变化不大的的基因

myInterestingGenes <- sample(geneNames, length(geneNames) / 10) #文件二:经一定标准对p值等筛选获取感兴趣基因集用于后续分析
geneList <- factor(as.integer(geneNames %in% myInterestingGenes))
names(geneList) <- geneNames
str(geneList) geneID2GO <- readMappings(file = system.file("examples/geneid2go.map", package = "topGO"))##文件三:goterm的map文件
str(head(geneID2GO)) GO2geneID <- inverseList(geneID2GO) ###额外知识:用inverseList()函数实现gene-to-GOs与 GO-to-genes 之间的转换
str(head(GO2geneID)) ##

topGO的更多相关文章

  1. 10、差异基因topGO富集

    参考:http://www.biotrainee.com/thread-558-1-1.html http://bioconductor.org/packages/3.7/bioc/ http://w ...

  2. R: 修改镜像、bioconductor安装及go基因富集分析

    1.安装bioconductor及go分析涉及的相关包 source("http://bioconductor.org/biocLite.R") options(BioC_mirr ...

  3. 20155205 2016-2017-2 《Java程序设计》第6周学习总结

    20155205 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 在Java中,输入串流代表对象为Java.io.InputStream实例,输出串流 ...

  4. 20155318 2016-2017-2 《Java程序设计》第六周学习总结

    20155318 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解 ...

  5. 20155328 2016-2017-2 《Java程序设计》第六周 学习总结

    20155328 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 根据不同的分类标准,IO可分为:输入/输出流:字节/字符流:节点/处理流. 在不使用Inpu ...

  6. 20155339 2016-2017-2 《Java程序设计》第6周学习总结

    20155339 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 串流设计 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 ...

  7. 20155224 2016-2017-2 《Java程序设计》第6周学习总结

    20155224 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 Thread线程: 定义某线程后,要有 xxx.stard(); Thread.sleep( ...

  8. 20155237 2016-2017-2 《Java程序设计》第6周学习总结

    20155237 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入与输出 InputStream与OutputStream 流(Stream)是对 ...

  9. 20155229 2016-2017-2 《Java程序设计》第六周学习总结

    20155229 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第十章 Java中,输入串流代表对象为java.io.InputStream,输出串流代表对 ...

随机推荐

  1. BASIC-1_蓝桥杯_闰年判断

    正确代码: #include <stdio.h> int main(void){ int year = 0 ; scanf("%d",&year); if (y ...

  2. jenkins 定时构建 位置

    定时器构建语法 * * * * * 星号中间用空格隔开 第一个*表示分钟,取值0~59 第二个*表示小时,取值0~23 第三个*表示一个月的第几天,取值1~31 第四个*表示第几月,取值1~12 第五 ...

  3. appium定位方法

    1.id定位 driver.find_element_by_id("这里是resource-id") 2.name定位 (新版本的appium 1.7 已经没有这个定位方法了) d ...

  4. 术语-服务:PaaS

    ylbtech-术语-服务:PaaS PaaS是Platform-as-a-Service的缩写,意思是平台即服务. 把服务器平台作为一种服务提供的商业模式.通过网络进行程序提供的服务称之为SaaS( ...

  5. 廖雪峰Java1-2Java程序基础-3整数运算

    1.四则运算规则 int i =(100 + 200) * (99 -88);//3300 int n = i + 9;//3309 //除法结果为整数 int q = n / 100;//33 // ...

  6. [UE4]Pawn和Controller,第一人称和第三人称切换

    一. Pawn 可以被控制的Actor,可以被Controller持有控制,并且从Controller中接受输入.例如:玩家.NPC(Not Player Character) 二.Controlle ...

  7. Java内部类引用外部类中的局部变量为何必须是final问题解析

    今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方 ...

  8. Spark 编程模型(中)

    先在IDEA新建一个maven项目 我这里用的是jdk1.8,选择相应的骨架 这里选择本地在window下安装的maven 新的项目创建成功 我的开始pom.xml文件配置 <project x ...

  9. SQL函数汇总(MySQL教材)

    1.SQL重复记录查询的几种方法 https://www.cnblogs.com/firstdream/p/5826238.html 2.SQL两列字段,合并为一个字符串,中间加符号 https:// ...

  10. 进度条 --- socket ---socketserver

    TCP:可靠的面向连接的协议,传输效率低,全双工通信,流数据传输.运用:web浏览器,电子邮件,文件传输程序 UDP:不可靠的,无连接的服务,传输效率高,面向数据包的传输,只能发短消息.运用:dns ...