用topGO進行GO富集分析

topGO是一個半自動的GO富集包,該包的主要優勢是集中了好幾種統計檢驗的方法,目前支持的統計方法如下:


一、安裝

BiocManager::install('topGO')
需要R的版本為>=2.10,但biocmanager安裝需要的R版本更高,現在應該是3.6。

二、數據準備

富集工作主要包括3個步驟:
1、準備相關數據;
2、進行富集統計檢驗;
3、分析結果。
所以最重要的工作就是數據的準備。需要的數據包括包含全部geneID(背景基因名,一般是研究物種的全部基因)的文件,需要進行富集分析的geneID(差異表達基因或感興趣的基因)文件,還有gene-to-GO的注釋文件。

物種全部的geneID和差異基因ID比較容易獲得,比較費勁的是gene-to-GO文件。
topGO提供了一些函數來幫助我們自動獲取注釋信息:
annFUN.db:用于Bioconductor上有注釋包的物種的芯片數據;
annFUN.org:用于Bioconductor上有“org.XX.XX”注釋包的數據;
annFUN.gene2GO:用戶自己提供gene-to-GO文件;
annFUN.GO2gene:用戶提供的GO-to-gene文件也可以;
annFUN.file:讀取有gene2GO或GO2gene的txt文件。
一般Bioconductor提供的注釋物種并不多,我的方法主要是用AnnotationHub的select函數或biomaRt的getBM函數來獲取,具體操作見:https://github.com/xianyu426/gene_annotation

自己提供gene2GO文件時,格式應該為:
gene_ID<TAB>GO_ID1, GO_ID2, GO_ID3, ....

三、數據導入

library(topGO)
# 讀取gene-to-GO mapping文件
gene2go <- readMapping(file = "gene-to-GO文件") # 這里我用的是物種全部的基因對應GO文件
# 讀取差異基因文件
DEGs <- read.table("差異基因文件", header = TRUE)

# 定義背景基因和感興趣基因
genenames <- names(gene2go)
genelist <- factor(as.integer(genenames %in% DEGs$geneid)) 
# 這里會生成一個factor,有兩個levels:0和1,其中1表示感興趣的基因。
names(genelist) <- genenames
GOdata <- new("topGOdata", ontology="MF", allGenes = genelist, 
              annot = annFUN.gene2GO, gene2GO = gene2go)

這樣就定義了一個topGOdata對象。

四、統計檢驗

test.stat <- new("classicCount", testStatistic = GOFisherTest, name = "Fisher test")
resultFisher <- getSigGroups(GOdat, test.stat)
test.stat <- new("elimScore", testStatistic = GOKSTest, name = "Fisher test", cutOff = 0.01)
resultElim <- getSigGroups(GOdata, test.stat)
test.stat <- new("weightCount", testStatistic = GOFisherTest, name="Fisher test", sigRatio = "ratio")
resultWeight <- getSigGroups(GOdata, test.stat)
test.stat <- new("classicScore", testStatistic = GOKSTest, name = "KS tests")
resultKS <- getSigGroups(GOdata, test.stat)
elim.ks <- runTest(GOdata, algorithm = "elim", statistic = "ks")
allRes <- GenTable(GOdat, classic=elim.ks, KS=resultKS, weight = resultWeight,
                   orderBy = "weight", ranksOf = "classic", topNodes =10)
write.table(allRes, file = "sig_GO_result.txt",
            row.name = FALSE, col.names=TRUE)

結果可以作氣泡富集圖。

五、顯示結果

showSigOfNodes(GOdata, score(resultWeight), firstSigNodes = 10, useInfo = "all")

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容