GO,KEGG,DO富集分析

這是我聽B站鯪魚不會飛視頻(GO,KEGG,DO富集分析)里的筆記哦~
當然有的地方加上的是我自己的理解,如果哪里和視頻上講的不一樣那是我自己發揮的,自行忽略....

市面上公司做RNA-Seq的一般流程是:

tophat2 ---> Cufflinks ---> Cuffdiff ---> R

  • tophat2是把reads回帖到基因組上;
  • Cufflinks在計算基因表達量;
  • Cuffdiff比較control和treatment找差異基因(生成一個數據框)

后面的富集分析,一般只做GO分析,KEGG pathway 分析,最多再做一個DO分析,公司一般用的是已經成熟的database,這就導致數據分析不完全,而且公司用的數據庫很多時候都已經過時了,所以我們需要自己學會做下游的富集分析。


GO分析的理論知識

what is Gene Ontology(GO)? 基因"本體論"
基因本體論是對基因在不同維度和不同層次上的描述。

對基因的描述一般從三個層面進行:

  • Cellular component,CC 細胞成分
  • Biological process, BP 生物學過程
  • Molecular function,MF 分子功能

這三個層面具體是指:

  • Cellular component解釋的是基因存在在哪里,在細胞質還是在細胞核?如果存在細胞質那在哪個細胞器上?如果是在線粒體中那是存在線粒體膜上還是在線粒體的基質當中?這些信息都叫Cellular component。
  • Biological process是在說明該基因參與了哪些生物學過程,比如,它參與了rRNA的加工或參與了DNA的復制,這些信息都叫Biological process
  • Molecular function在講該基因在分子層面的功能是什么?它是催化什么反應的?
    So, we will have a gene annotation infarmation.
    立足于這三個方面,我們將得到基因的注釋信息。

得到GO注釋

model organism ---> annotated database
non-model organism ---> search database or blast

  • 模式生物 ---> 有標準的注釋數據庫;
  • 非模式生物 ---> 自己搜注釋數據庫(怎們搜后面具體介紹),搜不到就用blast的辦法解決。

做GO分析的思路:

control VS treatment ---> DEG ---> GO enrichment analysis

也就是RNA-Seq先測出各組的基因表達分布:
control gene expression distribution
treatment gene expression distribution
control VS treatment ---> DEG : differential expression genes
通過比較 control 和 treatment 得到差異表達基因
再去做GO富集分析:
DEG ---> GO enrichment analysis
用找到的差異基因去做GO富集分析,希望能從這三方面找到和我們背景不一樣的地方。
比如,在疾病研究的時候,進行藥物治療之后某些基因的表達量明顯的發生了變化,拿這些基因去做GO分析發現在Biological process過程當中集中在RNA修飾上,然后在此基礎上繼續進行挖掘。這個例子就是想啟示大家拿到差異表達基因DEG只是一個開始,接下來就應該去做GO注釋,之后需要進行一個分析看這些注釋主要集中在哪個地方。假如我們有100個差異表達基因其中有99個都集中在細胞核里,那我們通過GO分析就得到了一個顯著的分布。

GO富集分析原理:有一個term注釋了100個差異表達基因參與了哪個過程,注釋完之后(模式生物都有現成的注釋包,不用我們自己注釋),計算相對于背景它是否顯著集中在某條通路、某一個細胞學定位、某一種生物學功能。

KEGG enrichment analysis?
把生物體中所有的pathway都要進行富集分析
DO enrichment analysis?
看目標基因是否在某個疾病或某一類疾病當中富集

代碼部分

  1. RNA-seq分析中第一步是:fastq ---> bam (tophat2 , hisat2 , star....);
  2. 使用 cufflink 輸入文件是bam;
  3. 使用 cutffdiff 做差異表達分析,輸入文件是 bam GTF注釋文件

這套流程是上游分析,拿到cutffdiff結果之后就可以轉到R里進行下一步分析:

1. load cutffdiff result

cuffdiff_result = read.table(file="./hela_gene_exp.diff",header = T,sep = "\t")
cuffdiff_result$sample_1 = "treat"
cuffdiff_result$sample_2 = "ctrl"

2. select DEG

  • I. FPKM1 or FPKM2 > 1
  • II. log2(fold change) >1 or < -1
  • III. p-value < 0.05
select_vector = (cuffdiff_result$value_1 > 1 | cuffdiff_result$value_2 > 1) & (abs(cuffdiff_result$log2.fold_change.) >= 1) & (cuffdiff_result$p_value < 0.05)

得到差異表達基因,賦值給一個新的數據框 cuffdiff_result.sign

cuffdiff_result.sign = cuffdiff_result[select_vector,]
> dim(cuffdiff_result.sign)
[1] 2739   14

這就說明在這種條件下我們篩選出了2739個差異表達基因,這個其實有點多了。我們只是為了走一下富集分析的流程,所以把條件再加緊一下,篩出一千來個基因去做分析正好:

> select_vector = (cuffdiff_result$value_1 > 1 | cuffdiff_result$value_2 > 1) & (abs(cuffdiff_result$log2.fold_change.) >= 1.5) & (cuffdiff_result$p_value < 0.05)
> cuffdiff_result.sign = cuffdiff_result[select_vector,]
> dim(cuffdiff_result.sign)
[1] 1268   14

網頁工具做GO分析

david

打開谷歌 ---> 搜david --->第一個點進去 ---> 就是做GO分析的最常用的網站

做GO分析的最常用的網站-david

如圖,點進去后,把gene list 放進白色的框里

寫個代碼把 gene id 那一列單獨提取出來并保存到本地。

output.gene_id = data.frame(gene_id = cuffdiff_result.sign$gene_id)
write.table(output.gene_id,file="./sign_gene_id.txt",col.names = F,row.names = F,sep = "\t",quote = F)

這時當前文件夾就多了一個名為sign_gene_id.txt里面裝有所有gene_id 的txt文件。

所有差異表達基因的數據框

Enrichr

還推薦了一個常用的網站 Enrichr

R代碼做GO分析

用R可以做一些網站上不能做的東西。

1.準備工作——安裝R包

# 安裝包
source("https://bioconductor.org/biocLite.R")

BiocManager::install("clusterProfiler")  #用來做富集分析
BiocManager::install("topGO")  #畫GO圖用的
BiocManager::install("Rgraphviz")
BiocManager::install("pathview") #看KEGG pathway的
BiocManager::install("org.Hs.eg.db") #這個包里存有人的注釋文件

# 載入包dian
library(clusterProfiler)
library(topGO)
library(Rgraphviz)
library(pathview)
library(org.Hs.eg.db)

2.作圖前處理——提取symbol ID --> 轉換為ENTREZID

DEG.gene_symbol = as.character(output.gene_id$gene_id) #獲得基因 symbol ID

防止在做GO分析的時候出現報錯,需要將symbolID轉換成ENTREZID:用mapIds函數就可以轉換ID。

DEG.entrez_id = mapIds(x = org.Hs.eg.db,
                       keys = DEG.gene_symbol,
                       keytype = "SYMBOL",
                       column = "ENTREZID")

這時就已經把symbolID轉換成ENTREZID了,但會出現個別的轉換不成功的情況,就是圖中NA的地方,我們進行以下操作即可去掉:

DEG.entrez_id = na.omit(DEG.entrez_id)

做好準備工作,我們就開始做富集分析

3.GO分析代碼

BP(Biological process)層面上的富集分析:

erich.go.BP = enrichGO(gene = DEG.entrez_id,
                       OrgDb = org.Hs.eg.db,
                       keyType = "ENTREZID",
                       ont = "BP",
                       pvalueCutoff = 0.5,
                       qvalueCutoff = 0.5)

##分析完成后,作圖
dotplot(erich.go.BP)

解讀BP層面富集分析圖:
橫坐標是GeneRatio,意思是說輸入進去的基因,它每個term(縱坐標)站整體基因的百分之多少。圓圈的大小代表基因的多少,圖中給出了最大的圓圈代表60個基因,圓圈的顏色代表P-value,也就是說P-value越小gene count圈越大,這事就越可信。

dotplot(erich.go.BP)

CC(Cellular component)層面上的富集分析:

erich.go.CC = enrichGO(gene = DEG.entrez_id,
                       OrgDb = org.Hs.eg.db,
                       keyType = "ENTREZID",
                       ont = "CC",
                       pvalueCutoff = 0.5,
                       qvalueCutoff = 0.5)
## 畫圖
barplot(erich.go.CC)
barplot(erich.go.CC)

一般GO分析畫這兩個圖就可以了,有時也把GO分析畫成樹形圖,可以更加幫助我們理解。

plotGOgraph(erich.go.BP)
plotGOgraph(erich.go.BP)

樹狀圖很大,所以我們用代碼把它存成pdf,學習下如何用代碼

pdf(file="./enrich.go.bp.tree.pdf",width = 10,height = 15)
plotGOgraph(erich.go.BP)
dev.off()

至此,GO分析就做完了 ----> over


KEGG pathway介紹

KEGG: Kyoto Encyclopedia of Genes and Genomes
KEGG是日本主導的一個項目對gene和genome進行了非常詳細的注釋

KEGG網頁分析里面有非常全的注釋。

KEGG pathway 分析和上面介紹的GO分析是一樣的只是把enrichGO()函數改成 enrichKEGG()
GO分析:enrichGO() —---—> KEGG pathway分析:enrichKEGG()
所以不細講啦~

DO分析介紹

DO分析用enrichDO()函數,是做疾病的,這里我們做一下:

enrichDO(gene = DEG.entrez_id,ont = "DO",pvalueCutoff = 0.5,qvalueCutoff = 0.5)

非模式生物如何做富集分析

其實這個問題的核心是非模式生物怎樣找到org.db數據庫(標準注釋庫)?因為有了注釋庫后面的分析都一樣一樣的~
search org.db ----> 套路分析

非模式生物但有參考基因組的情況
以番茄為例,番茄有參考基因組但不在標準注釋庫里
先安裝兩個包

source("https://bioconductor.org/biocLite.R")
BiocManager::install("AnnotationHub")
BiocManager::install("biomaRt")

# 載入包
library(AnnotationHub)
library(biomaRt)

自己制作一個OrgDB

hub <- AnnotationHub::AnnotationHub()

使用query在我們制作的OrgDB --> hub里面找到番茄相關的database即org.Solanum_lycopersicum.eg.sqlite 注:Solanum_lycopersicum是番茄的拉丁名和它對應的編號AH59087

query(hub, "Solanum")  # Solanum番茄的拉丁名

找到之后把它下載下來:

Solanum.OrgDb <- hub[["AH59087"]]

此時,番茄的database就會賦值到變量Solanum.OrgDb
解決完標準注釋庫的問題,剩下的和模式生物做富集分析完全一樣了~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容