最近Orthofinder2開始陸續更新,文章已經投發到biorxiv上,在網上搜了一圈,關於Orthofinder的使用的中文教程幾乎是空白的,這周就藉此機會和大家一起來學習一下這款軟體。
OrthoFinder是比較基因組學中的實用的,運行快速,準確的全面的工具。它的主要功能是,找到了正交群和直系同源物,推斷出所有正交群的根基因樹,並識別那些基因樹中的所有基因重複事件。它還為所分析的物種推斷出有根的物種樹,並將基因重複事件從基因樹比對到物種樹的分支中。
另外,OrthoFinder還為比較基因組分析提供全面的統計數據。相比OrthoMCL, OrthoFinder使用簡單安裝都很簡單,安裝只需要用過conda就行,運行只需一組FASTA格式的蛋白質序列文件(每個物種一個)。
基礎知識介紹為了讓大家更好的理解使用Orthofinder,在正式介紹其使用的流程前,先來回顧一下與之相關的生物學知識。
直系同源物和旁系同源物
Orthologs(直系同源物)是在兩個物種的最後共同祖先(LCA)中來自單個基因的一對基因。直系同源物是同源性基因,是物種形成事件的結果。Paralogs(旁系同源物)是同源基因,是重複事件的結果。下圖就可以看到,不同物種間的alpha-chain gene互為Orthologs(直系同源物)。這時候可以引用一個新名詞orthogroup (正交群)就用來形容自一組物種的LCA中的單個基因的基因組(在圖中就是alpha chain gene)。然後同一物種間alpha 和beta chain gene互為Paralogs(旁系同源物)。最後所有這些關係都可以由OrthoFinder來識別。
為什麼要研究正交群?
正交群中的所有基因都來自單個祖先基因。因此,正交群中的所有基因都有類似的序列和功能。由於基因重複和丟失在進化中經常發生,一對一的直系同源物很少見,通過分析orhtogroup所有直系同源的情況(一對一,多對一,多對多),我們可以分析數據的所有情況。
直系同源物是由系統發育定義的。它不能通過胺基酸含量,密碼子偏好,GC含量或其他序列相似性測量定義。在沒有系統發育的情況下使用這些分數來定義,直向同源物的方法只能提供猜測。從序列相似性提供粗略的類比猜測直系同源,類似於從氣味中猜測顏色。因此,真正識別直向同源物的唯一方法是通過分析系統發育樹。確保直系分配正確的唯一方法是對所考慮的物種的最後共同祖先的單個基因下降的所有基因進行系統發育重建。這組基因是正交群。因此,定義直系同源的唯一方法是分析正交群。
安裝廢話說了一大篇,是時候開始安裝軟體了。在這裡推薦大家使用conda來安裝,簡單明了,不用擔心其他Dependencies的安裝
conda install orthofinder
接著準備好測試數據,為了展示的方便,我將原始測試數據重新命名:
##重命名
cd /work1/ExampleData
mv Mycoplasma_agalactiae.faa Maga.faa
mv Mycoplasma_gallisepticum.faa Mgal.faa
mv Mycoplasma_genitalium.faa Mgen.faa
mv Mycoplasma_hyopneumoniae.faa Mhyo.faa
##創建新的數據目錄
mkdir Mycoplasma/
cp *faa Mycoplasma/
正式運行Orthofinder,相當簡單的操作, -f輸入目錄,裡面包含你需要運行的蛋白質fasta文件, -t 所用到的CPU數目。基本的用法就如下,更多的可以去manual中查看。
orthofinder -f Mycoplasma/ -t 2
生成的結果會存儲於Results_XXX文件中,現在簡單看看裡面有啥。正交群以兩種不同的格式返回,一種是制表符分隔的表格格式(* .csv),另一種格式與orthoMCL(* .txt)的輸出格式相同。還應該有一個名為WorkingDirectory的目錄,其中包含運算過程的中間文件,例如blast結果。
cd Mycoplasma/Results_Nov10/
ll -thrl
-rw-r 1 hhu hhu 12K Nov 10 16:50 Orthogroups.GeneCount.csv
-rw-r 1 hhu hhu 59K Nov 10 16:50 Orthogroups.csv
-rw-r 1 hhu hhu 89K Nov 10 16:50 Orthogroups.txt
-rw-r 1 hhu hhu 110 Nov 10 16:50 Orthogroups_SpeciesOverlaps.csv
-rw-r 1 hhu hhu 33K Nov 10 16:50 Orthogroups_UnassignedGenes.csv
drwxr-x--- 6 hhu hhu 4.0K Nov 10 16:50 Orthologues_Nov10
-rw-r 1 hhu hhu 2.5K Nov 10 16:50 SingleCopyOrthogroups.txt
-rw-r 1 hhu hhu 1.5K Nov 10 16:50 Statistics_Overall.csv
-rw-r 1 hhu hhu 2.5K Nov 10 16:50 Statistics_PerSpecies.csv
drwxr-x--- 2 hhu hhu 4.0K Nov 10 16:50 WorkingDirectory
使用R簡單分析Orthofinder的結果安裝加載以下R包
install.packages("micropan")
install.packages("phangorn")
library(micropan)
library(phangorn)
讀取Orthofinder中正交群的文件。結果文件將正交群存儲為制表符分隔表,其中每一行是正交群,其名為OG,後跟7位數字(例如OG0000123)。表中的每列對應一個物種,並且與fasta文件具有相同的名稱。表中的單元格包含序列ID。由於正交組可以包含來自單個物種的幾個基因(即,旁系同源物),因此表中的單個cell可以包含由逗號分隔的幾個序列ID。下面是讀取結果文件的例子:
# Define orthofinder results directory (may vary)
resultsDir <- "orthofinder/Mycoplasma/Results_Oct22"
grpsTbl <- read.table( file.path(resultsDir,"OrthologousGroups.csv"),
header=T, sep = "\t", row.names = 1, stringsAsFactors=F)
# Split the comma-separated paralogs
grps <- strsplit( as.matrix(grpsTbl),", ")
# grps is now a list of character vectors..
# Add dimensions to grps:
dim(grps) <- dim(grpsTbl)
# Add row and column names:
dimnames(grps) <- dimnames(grpsTbl)
獲取特定正交群的信息:
grps["OG0000018", ]```
可以清晰的看到,在對應的fa文件中,在該特定的正交群OG000018下所包含的fasta序列,其結果如下:
## $Maga.faa
## character(0)
##
## $Mgal.faa
## [1] "Mgal_AAP56913.2" "Mgal_AAP56907.2" "Mgal_AAP56908.2"
##
## $Mgen.faa
## [1] "Mgen_AAC71531.2" "Mgen_AAC71529.1" "Mgen_AAC71563.2"
##
## $Mhyo.faa
## character(0)
接著讓我們來看開正交群的數目,為了獲得特定正交群的序列,需要在每個正交群中構建每個物種的基因數量的矩陣:
grpSize <- apply(grps,2,sapply,length)
我們可以在正交群OG0000018中檢查每個物種中的旁系同源物的數量:
grpSize["OG0000018", ]
## Maga.faa Mgal.faa Mgen.faa Mhyo.faa
## 0 3 3 0
我們還可以繪製每個正交群中存在的基因數量:
plot(table(apply(grpSize>0,1,sum)),ylab="no. orthogroups",xlab="no. genomes represented")
另外一寫有趣的事我們可以查看,每個物種中只有一個直系同源的正交群(1:1:1:1正交群):
sum(apply(grpSize==1,1,all)) # number of 1:1:1:1 groups
## [1] 254
正好只存在於兩個物種(1:1:0:0正交群)的正交群:
sum(apply(grpSize==1,1,sum)==2 & apply(grpSize > 1,1,sum)==0)
## [1] 155
讓我們找出這個數字背後所對應的物種:
# get the 1:1:0:0 groups
is1100 <- apply(grpSize==1,1,sum)==2 & apply(grpSize > 1,1,sum)==0
spcs <- sub("\\.faa","",colnames(grps)) # get species names
# Count the combination of species-pairs in the 1:1:0:0 groups
table(apply(grpSize[is1100, ], 1, function(grpSizeRow){
paste(spcs[ grpSizeRow==1 ], collapse="&")
}))
##
## Maga&Mgal Maga&Mgen Maga&Mhyo Mgal&Mgen Mgal&Mhyo Mgen&Mhyo
## 15 2 57 70 8 3
基本的用法和分析就講解到這裡,當然這只是最基本的東西。其結果涉及到的下遊分析還有很多很多,例如構建直系同源基因樹等等的知識,大家可以自行進行探討。
星期三是我的專題日哦,如果你喜歡我的文章,請點一下文末的小贊給與我更多創作的動力,如果你想了解更多,歡迎點擊閱讀原文,查看更多我的筆記~
▼ 如果你生信基本技能已經入門,需要提高自己,請關注下面的生信技能樹,看我們是如何完善生信技能,成為一個生信全棧工程師。
▼ 如果你是初學者,請關注下面的生信菜鳥團,了解生信基礎名詞,概念,紮實的打好基礎,爭取早日入門。