談談本體論
為什么需要本體論
作為一位大學統計棉花表皮毛的苦逼生物狗,深刻體會什么叫做經驗,也就是人類模式識別能力的強大和不精確性。當時的導師教我如何根據表皮毛的長短和濃密進行基因型的判定,但是我一直糾結長和短,密和疏之間的分界。在讀研的時候,師姐會讓我提供基因Genomic序列,這來自于TAIR的定義,此外TAIR還定義了full length cDNA和full length CDS。我經常糾結這些序列和我GFF里面的CDS,mRNA,gene的關系是什么?直到我把所有序列都拿出來,進行多序列聯配才發現它們之間的差異。
計算機科學來自于多學科的交互,比如說數學,語言學,邏輯學等。為了保證互聯網的通信,代碼的復用,API的調用等,計算機協會制定了很多協議進行標準化。比如說“意思意思”這句話在中文的語境千變萬化,但是在計算機里面可能就會翻譯成mean of mean。為了能讓計算機分析生物數據,就要生物學的一些概念進行精確定義,而不是“只可意會,不可言傳”
Karen在文章The Sequence Ontology: a tool for the unification of genome annotations就寫了這樣一段話:
Unfortunately, biological terminology is notoriously ambiguous; the same word is often used to describe more than one thing and there are many dialects. For example, does a coding sequence (CDS) contain the stop codon or is the stop codon part of the 3'-untranslated region (3' UTR)?
There really is no right or wrong answer to such questions, but consistency is crucial when attempting to compare annotations from different sources, or even when comparing annotations performed by the same group over an extended period of time.****
也就是說一致性比正確性更加重要,如果雙方各執一見,對一個概念的定義模棱兩可,那么討論只會浪費時間。這就是為什么我們需要建立統一的概念。
本體論是什么
本體論是概念化的詳細說明,一個ontology往往就是一個正式的詞匯表,其核心作用就在于定義某一領域或領域內的專業詞匯以及他們之間的關系。這一系列的基本概念如同工程一座大廈的基石,為交流各方提供了一個統一的認識。在這一系列概念的支持下,知識的搜索、積累和共享的效率將大大提高,真正意義上的知識重用和共享也成為可能
目前最常見的就是序列本體論(SO)和基因本體論(GO)。當然還有許多其他的本體論,都列在http://www.obofoundry.org/. 可以去尋找和自己研究領域相關的本體論,比如說植物本體論(PO)用于定義植物基因組數據中的和解剖,形學,生長發育相關的信息。
實際上,生信本質依舊還是序列分析。序列分析比較關注兩個內容:
- 這個DNA片段是什么?(注釋或分類)
- 這個DNA片段做什么?(功能分析)
de novo 基因組組裝就是要構建原來的基因組,然后對上面的片段進行注釋,判斷是蛋白質還是非編碼蛋白。RNA-Seq就是想通過差異表達的轉錄本來解釋表型。RNA-Seq實驗的理想結果就是找到DNA功能的機制以及如何產生觀察的表型。
序列本體論(Sequence Ontology)
所謂的序列本體論(SO),其實就是定義基因組不同區域的feature。 比如說可以從Sequence Ontology Browser尋找words的定義
例如搜索X_element_combinatorial_repeat就會得到它的定義,還有他的關系圖。
X element combinatorial repeat
An X element combinatorial repeat is a repeat region located between the X element and the telomere or adjacent Y' element.
PS: 不是所有序列數據都遵守SO,如CDS的定義。
如何查看SO數據
盡管在日常使用中并不需要接觸原始SO數據,但是花點時間理解它是如何組織還是很有必要的
可以在 https://github.com/The-Sequence-Ontology/SO-Ontologies 尋找SO數據。
URL=https://raw.githubusercontent.com/The-Sequence-Ontology/SO-Ontologies/master/so-simple.obo
curl $URL > so.obo
# 了解有多少term
grep 'Term' so.obo | wc -l
# 快速查找SO
cat so.obo | grep 'PCR' -B 2 -A 2
當你查看GFF文件的時候,如果好奇里面的mRNA, gene的定義就可以用grep
進行查找。
Gene Ontology
其實目前最完善的還是基因本體論,也就是GO。基因本體論(GO)是一個受控詞匯,用于將每個基因連接到一個或多個功能。
基因本體論用于分類基因產物,而非基因本身。因為同一個基因可以有不同產物,行使不同的功能。
GO必須知道的幾個概念
一: GO的組織結構
要記住GO分為三類, CC(細胞組分), MF(分子功能)和BP(生物學過程)。分別回答了基因的產物在哪里發揮功能,如何發揮功能,以及為什么需要該產物這三個問題。
二: GO詞條的組織形式
GO本體被構造為有向的非循環圖,其中每個術語定義了與同一域中的一個或多個其他術語的關系,并且有時與其他域有關。比如說Golgi Cisterna
的GO詞條為(GO:0031985),在Quick GO的展示如下
三: GO數據的存儲格式
使用GO的時候一般需要GO定義文件和GO關聯文件。GO定義文件存放GO詞條的定義,而GO關聯文件則是不同命名體系與GO詞條的映射關系。
實際使用時并不需要獲取GO的原始數據,但是能夠了解它儲存內容的話有助于從多個角度理解生物學。可以從 GO Download數據下載
curl -OL http://purl.obolibrary.org/obo/go.obo
GO詞義文件所包含的內容如下:
[Term]
# 編號
id: GO:0000002
# 全稱
name: mitochondrial genome maintenance
# 命名空間,BP, CC OR MF
namespace: biological_process
# 定義
def: "The maintenance of the structure and integrity of
the mitochondrial genome; includes replication and
segregation of the mitochondrial chromosome." [GOC:ai, GOC:vw]
# 從屬關系
is_a: GO:0007005 ! mitochondrion organization
四: GO數據庫更新
由于研究的深入,GO的注釋數據庫會不斷地更新。而GO富集分析就和數據庫的大小有很大關系。注意了,當公司給你富集分析結果時,一定要注意他們所用的分析工具及其GO數據庫版本。
生信數據的功能分析
大部分人學習生物信息學,其實就是為了對數據做出合理的解釋,都希望從生物角度獲得新的洞見。但是很尷尬,大家花了大部分時間用于收集數據,卻對已有的數據的組織和分類及其短視。好像把數據丟到數據庫,問題就會自動解決一樣。
然而,組織已有的知識是一件非常吃力,但未必討好的工作。并且大家都指望別人能夠搞定這件事情,而不愿意自己動手。于是就導致了”公地悲劇“。一些組織和公司就從中看到了商機,京都基因和基因組百科全書(KEGG)改變授權,對大批量數據檢索收費,商業公司構建了專門的數據庫進行出售。
因此,商業就是最大的善。它讓資源得到合理地配置,讓數據變得更有價值,而不是一堆paper。也讓科學家們意識上,不合理存放已有數據會有多大的代價。
接下來,讓我們聊一塊錢的富集分析,其實應該說通路分析(pathway analysis),更好聽的說法是功能分析(functional analysis)。也就是當你得到一堆基因或者蛋白后,最常用的方法。目前有三類算法:
功能分析的算法演化
推薦先去閱讀Ten Years of Pathway Analysis: Current Approaches and Outstanding Challenges
第一代:Over-Representation Analysis
ORA翻譯成中文就是過表征分析,其實就想看看某類功能或分類和隨機事件相比是否有更明顯的趨勢。這就好比經典統計學中的白球和黑球的抽樣問題,如果黑箱中的白球比黑球多,體現在抽樣上就是白球會比黑球更容易被抽到。
ORA分析需要你提供4類輸入,
- 一共有多少個基因,也就是背景
- 屬于某分類的基因有多少個
- 樣本一共有多少個基因
- 樣本屬于某分類的有多少個基因
之后通過超幾何分布或2X2獨立表進行檢驗
ORA是公司標準化流程中必備的一步,因為這個方法最簡單,當然出現的也足夠早。大家總是不太愿意去嘗試新鮮事物,不是嗎?但是ORA其實是存在很多問題,
- ORA沒有考慮到基因的表達水平,僅僅關注基因是否屬于分類
- ORA僅僅使用部分數據,存在主觀臆斷
- 基因和功能被認為是相互獨立。這只是一種統計學假設而已,實際情況下并非如此。
但是既然ORA還是目前最常用的方法, 我們還是要盡可能保證這個方法的結果是可靠的。比如說符合如下要求:
- 公司的結題報告中用于富集分析的數據庫與時俱進,
- 公司的結題報告中用于富集分析的數據庫一定與時俱進,
- 公司的結題報告中用于富集分析的數據庫必須與時俱進,
畢竟2016年,Nature Methods 專門寫了Impact of outdated gene annotations on pathway enrichment analysis 吐槽大家還在用老舊的DAVID。
第二代:Functional Class Scoring (FCS)
由于ORA方法存在很多弊端,于是就出現了FCS算法。它的基本假設是:雖然單個基因的巨大改變會對通路有顯著性印象,但是那些功能相關的類似微效基因累加后也能有顯著效果。換句話說,英雄人物可以在某種程度上改變歷史進程,但是人民群眾的力量也是不容小覷。
實現FCS方法需要三步:
第一步: 通過實驗計算出單個基因的基因水平(gene-level)的統計值,比如說基因差異表達衡量會用到的ANOVA,Q-statistic, 信噪比, t-test, Z-score等。
第二步: 同一條通路上所有基因的基因水平(gene-level)統計值聚合成單個通路水平(pathway-level)的統計值。可選方法有,Kolmogorov-Smirnov statistic [21,29],基因水平統計值的和, 均值或中位數, Wilcoxon rank sum, maxmean statistic。
第三步:評估通路水平統計顯著性。這一步所需要的統計學思想是重抽樣(bootstrap)。也就是對于一個特定通路而言,隨機排序和按照一定規則排序是否有差異。
雖然FCS已經比ORA有很大提升了,但實際上依舊有不足。第一,它是單獨分析每個通路,而不是多通路組合分析。第二,FCS也只將基因表達的差異用做給定通路的排序而已。比如說A和B的表達量分別改變了2倍和20倍,但是對于不同的通路而言,A和B的排名就有可能相同。
第三代: Pathway Topology (PT)-Based Approaches
為了克服第二代方法, 于是有了第三代基于通路拓撲學的方法。但是這類方法需要用到給定通路互作的信息,而目前相關的數據庫不夠,于是這個方法只是美妙的設想
富集分析的工具
biostar hanbook里面提到的所有的工具我都不推薦,你也不需要浪費時間去看了。只要知道clusterProfiler
就行了,它支持ORA和FCS兩類算法。函數為
- enrichGO, gseGO: GO富集分析
- enrichKEGG, gseKEGG: KEGG富集分析
- enrichDAVID: DAVID富集分析
劃重點: clusterProfiler
的KEGG數據庫與時俱進。
這個工具目前唯一的問題就是知道的人還不夠。以及大家習慣用網頁工具,對代碼的無名恐懼,以至于不敢去嘗試。還有大家用軟件非常害怕去讀文檔。