gene ontology為了查找某個研究領域的相關信息,生物學家往往要花費大量的時間,更糟糕的是,不同的生物學數據庫可能會使用不同的術語,好比是一些方言一樣,這讓信息查找更加麻煩,尤其是使得機器查找無章可循。Gene Ontology就是為了解決這種問題而發起的一個項目。
Gene Ontology中最基本的概念是term。GO里面的每一個entry都有一個唯一的數字標記,形如GO:nnnnnnn,還有一個term名,比如"cell", "fibroblast growth factor receptor binding",或者"signal transduction"。每個term都屬於一個ontology,總共有三個ontology,它們分別是molecular function, cellular component和biological process。
一個基因product可能會出現在不止一個cellular component里面,也可能會在很多biological process里面起作用,並且在其中發揮不同的molecular function。比如,基因product "cytochrome c" 用molecular function term描述是"oxidoreductase activity",而用biological process term描述就是"oxidative phosphorylation"和"induction of cell death",最后,它的celluar component term是"mitochondrial matrix"和"mitochondrial inner membrane"。
Ontology中的term有兩種相互關系,它們分別是is_a關系和part_of關系。is_a關系是一種簡單的包含關系,比如A is_a B表示A是B的一個子集。比如nuclear chromosome is_a chromosome。part_of關系要稍微復雜一點,C part_of_D意味着如果C出現,那么它就肯定是D的一部分,但C不一定總會出現。比如nucleus part_of cell,核肯定是細胞的一部分,但有的細胞沒有核。
Ontology的結構是一個有向無環圖,有點類似於分類樹,不同點在於Ontology的結構中一個term可以有不止一個parent。比如 biological process term "hexose biosynthesis" 有兩個parents,它們分別是"hexose metabolism"和"monosaccharide biosynthesis",這是因為生物合成是代謝的一種,而己糖又是單糖的一種。
GO (gene ontology)對大家而言也許會是一個相對陌生的名詞,但是它已經成為生物信息領域中一個極為重要的方法和工具,並正在逐步改變着我們對 biological data的組織和理解方式,它的存在已經大大加快了我們對所擁有的生物數據的整合和利用,我們應該逐步學會理解和掌握這種思想和工具。
眾所周 知,sequence based biology中的核心內容即是對序列的Annotation(注釋),其中主要包含structural annotation和functional annotation,前者涉及分析sequence在genome中的locus以及exon,intron,promoter等的location, 而后者則是推斷序列編碼產物的功能,也正是我們在六月論題中所着重探討的。應該說,這二者是相互關聯的。
隨着多種生物genome的相繼解 碼,同時大量ESTs以及gene expression profile date的積累,使得annotation的工作量和復雜度大大增加。然而另一方面,大多數基因在不同真核生物中擁有共同的主要生物功能,通過在某些物種 中獲得的基因或者蛋白質(shared protein)的生物學信息,可以用以解釋其他物種中對應的基因或蛋白(especially in comparative genomics)。由於這些繁復的功能信息主要是包含在積累的文獻之中,如何有效的提取和綜合這些信息就是我們面臨的核心困難,這也是GO所要着力解決 的問題。通過建立一套具有動態形式的控制字集(controlled vocabulary),來解釋真核基因及蛋白在細胞內所扮演的角色,並隨着生命科學研究的進步,不斷積累和更新。一個ontology會被一個控制字集 來描述並給予一定的名稱,通過制定“本體”ontologies並運用統計學方法及自然語言處理技術,可以實現知識管理的專家系統控制。
到目 前為止,Gene Ontology Consortium(GO的發起組織)的數據庫中有3大獨立的ontology被建立起來:biological process生物過程, molecular function分子功能及cellular component細胞組分。而這三個ontology下面又可以獨立出不同的亞層次,層層向下構成一個ontologies的樹型分支結構。可以說, GO是生物學的統一化工具。
http://www.geneontology.org/Gene Ontology使用Oxford Dictionary of Molecular Biology (1997)中的定義,在分選時還要參考SWISS-PROT, PIR, NCBI CGAP, EC…中的注釋。建立起來的標准不是唯一的標准(這是GOC所一直強調的),自然也不規定每個研究者必須遵循這套控制字集系統。所采用的動態結構 (dynamic structure)使用DAGs(Directed Acyclic Graphs)方式的network,將每一個ontology串連起來,形成樹狀結構(hierarchical tree),也就是由前面所說的“is a”和“part of”兩種關系。
由於GO是一種整合性的分類系統,其下的3類主 ontology我們前面說是獨立的,但是無論是GOC原初的設計還是我們的使用中其實都還是存在一定的流程關系。一個基因/蛋白質或者一個 ontology在注解的過程中,首先是考慮涉及在構成細胞內的組分和元件(cellular component),其次就是此組分/元件在分子水平上所行使的功能(molecular function),最后能夠呈現出該分子功能所直接參與的生物過程(biological process)。由於這是一種存在反饋機制的注釋過程,並且整個系統是動態開放實時更新的,因此在某種程度上說它具有糾錯的能力。
在spiro轉貼的帖子中提到TAMBIS計划,這是目前唯一實現了在概念和聯系層次上集成信息源的系統。但是還有其他一些相關計划正在研究之中。比如BioKleisli (賓夕法尼亞大學計算機系),采用Mediator(調節器)技術實現了若干數據源的集成,其后的K2/Kleisli系統還利用數據倉庫實現了OLAP(聯機分析處理)。
DiscoveryLink (IBM研究院),基於Wrapper/ Mediator(包裝器/調節器)實現了信息源集成,提出了查詢的分解和基於代價的優化策略 TAMBIS (曼徹斯特大學計算機系)基於Wrapper/ Mediator實現了信息源集成,借助BioKleisli中的CPL語言作為查詢語言並給出了查詢優化的方法。通過TaO(TAMBIS Ontology)本體定義為用戶瀏覽和查詢處理提供領域知識。TINet (GSK公司和IBM研究院),基於多數據庫中間件OPM(Object-Protocol Model,對象協議模型)定義數據源的對象視圖,其CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結構)服務器使各數據源Wrapper(包裝器)更易於擴充。但是他們都存在一定的 缺陷。BioKleisli 系統查詢能力相對較弱,而且並未給出查詢優化策略;TAMBIS系統和DiscoveryLink系統集成的數據源數量相對還很少,后者在查詢處理中並未 運用領域知識,因而查詢分解也未從語義角度考慮;TINet系統中的查詢處理能力不強。
現在面臨的突出問題是在數據庫查詢中尤其是當 多個數據庫存在信息重疊時,缺乏從中選擇最佳檢索成員,動態生成優化檢索方案的能力。而且現有的工作主要面向數據集成,而對服務集成考慮不多。支持數據與 服務綜合性集成的體系仍欠完備。因此這也將是GO未來發展和提升的一個重要方向。
Ontology: 哲學中稱為本體論/存在論,這里本質是指一系列特定的文字可用來形容一些特定的模式、元件或角色,因此在國外的華人生物信息學家中試譯為語義(學)。
*********************************************************************
Gene Ontology (GO) 之分析實作簡介
在此先簡介一下如何使用MySQL來做GO分析,首先,請到ensembl的BioMart下載所需要的基因。
這里下載時有些事項要注意,選好database以及dataset后,請在Filter的Gene子項目中勾選Limit to genes … with GO ID(s) only。
接着在Attribute的EXTERNAL子項目中勾選go biological process, go cellular component, and go molecular function這三個子項目的GO ID。
其他細節可以依各自實驗所需來勾選 (如勾選染色體號碼以及基因的起始及結尾坐標)。
做GO的基本材料准備好后,接着必須具備一些MySQL的操作知識,之后去GO Database (http://www.geneontology.org/GO.downloads.database.shtml)下載MySQL的數據庫回來建 (下載時選擇 go_200904-assocdb-tables.tar.gz 這種table檔即可,里面包含了許多MySQL的建表格指令,網頁中也有使用教學,照着操作即可)。
下載好基因數據,建立好GO的表格后,請利用一些MySQL的指令,再多建立一個表格來匯入剛剛從ensembl下載回來的那些基因。
結束以上的前處理動作,就可以開始做GO的分析了。
1. 根據你所需要的數據類型,去剛建好的ensenbl數據庫中抓取所需要的基因出來。如:
Gene ID, Transcript ID, BiologicalProcess Cellular Component Molecular Function
ENSG00000196763 ENST00000359554 GO:0000012 GO:0005634 GO:0003684
ENSG00000119673 ENST00000238651 GO:0000038 GO:0005739 GO:0004091
ENSG00000119673 ENST00000238651 GO:0000038 GO:0005739 GO:0005515 …
在做GO分析時,會先挑選出某一類來做分析,看是要先做BP, CC, or MF。
所以就以上的例子,假如現在想先做BP的GO分析,想看這個基因在BP這個分類下,在某個level當中會有多少種功能。
於是就先挑出GO:0000012, GO:0000038這兩個最下層的GO ID來爬GO樹。
假設現在要做BP的level 2的話,先利用MySQL指令找出biological process這個root的id是多少。
select * from term where name='biological_process';
查詢后可以得知biological process這個root的id是6067。
接着,查詢出root到level 2的所有path是哪些。
select * from graph_path where term1_id=6067 and distance=1;
root=0, 所以distance=1表示在第二層。
紀錄每一筆select出來的term2_id值,這id值表示root到第二層的GO ID有哪些 (child id)。
然后用一個循環把GO:0000012的id放入term2_id 跟剛剛找到的那些level 2的id去做一輪select。
如何找GO:0000012的id? 從GO 的term table當中去做select。
select * from term where acc='GO:0000012';
如此可得知GO:0000012的id為32。
//for loop
select * from graph_path where term1_id=4581(剛找到的那些level 2的id) and term2_id=32;
做個一輪完,紀錄有select出來的結果
表示這個基因到level 2有個path在,紀錄結果的term1_id值,此值丟入term table可以取出GO ID。
如此可得之此GO:0000012在levle 2有哪種功能的分類。
(方式大致如上,寫的比較趕,之后會再詳細修改)