轉(zhuǎn)錄組完整的ID轉(zhuǎn)換:biomaRt和gtf

ID轉(zhuǎn)換過程中會有基因丟失這件事情,在部分做干實驗的人看來,是非常正常的。但不做干實驗的濕實驗人知道這件事,心里可能會有疙瘩。為什么要丟失呢?為什么丟失了不補(bǔ)回來?

在分析結(jié)果中查閱重要的基因并繪圖時發(fā)現(xiàn)竟然無此基因的數(shù)據(jù),或者是繪圖時row.name的部分丟失,會讓我們的強(qiáng)迫癥爆發(fā)。真心希望有一個完整的ID轉(zhuǎn)換方法。在這之前我使用的是ENSEMBL的官方工具BiomaRt。目前BiomaRt囊括了多達(dá)208種物種的ID數(shù)據(jù),可以說是又大由全。然而即使我做的是人類基因ID轉(zhuǎn)換,仍然還是發(fā)現(xiàn)有基因丟失,是可忍孰不可忍。后經(jīng)過多方查閱,決定使用參考基因組的gtf文件進(jìn)行完整的ID轉(zhuǎn)換。下面我們就來對比一下,BiomaRt和gtf的ID轉(zhuǎn)換結(jié)果。

(注:使用BiomaRt進(jìn)行ID轉(zhuǎn)化出現(xiàn)ID丟失的原因不一定是因為R包不好,有可能是數(shù)據(jù)的版本不同)

數(shù)據(jù)準(zhǔn)備

在這里使用本人的轉(zhuǎn)錄組數(shù)據(jù)用于測試,數(shù)據(jù)經(jīng)過上游處理后簡單整理數(shù)據(jù)如下:

0
> dim(count) # 檢查數(shù)據(jù)框大小
[1] 58884     9

> table(duplicated(count$geneid)) # 檢查是否有重復(fù)的ensemble ID
FALSE 
58884 

由上信息可見,我的轉(zhuǎn)錄組數(shù)據(jù)經(jīng)過比對后得到58884個“基因”,因此gene symbol轉(zhuǎn)換要越接近這個數(shù)值越好。

1. BiomaRt

1.1 install BiomaRt

安裝代碼可以從bioconductor http://www.bioconductor.org/packages/release/bioc/html/biomaRt.html上查閱

if (!requireNamespace("biomaRt", quietly = TRUE) ){
  BiocManager::install("biomaRt")
}
  
library(biomaRt)  # 激活R包

1.2 選定人類數(shù)據(jù)集

listMarts()  ## 查看目前提供的數(shù)據(jù)庫
# formal class mart 
my_mart<- useMart("ENSEMBL_MART_ENSEMBL") # 選定數(shù)據(jù)集
## 查看數(shù)據(jù)集
datasets<- listDatasets(my_mart)
datasets
dim(datasets)  # [1] 202   3  目前有208個數(shù)據(jù)集(物種ID信息)
# 設(shè)定人類ID數(shù)據(jù)集
human_dataset<- useDataset("hsapiens_gene_ensembl",mart = my_mart) # 約1.3 M
1

1.3 簡單查看人類ID數(shù)據(jù)集

human_dataset@attributes$name[1:20] ## 查看一下都有什么名字
2

可以看到數(shù)據(jù)集中包含:ensemble ID和gene id的轉(zhuǎn)換,基因轉(zhuǎn)錄本ID等等內(nèi)容。簡單查閱一遍,可知“ensembl_gene_id”是我們想要的內(nèi)容。

1.4 設(shè)定attributes參數(shù)

attributes參數(shù)定義了四個輸出項ensembl_gene_id,chromosome_name, hgnc_smbol以及hgnc_id

count_value<- count$geneid  # 設(shè)定需要轉(zhuǎn)換的ID
attr1<- c("ensembl_gene_id","chromosome_name","hgnc_symbol","hgnc_id") # 設(shè)定參數(shù)
count_ID<- getBM(attributes = attr1,
          filters = "ensembl_gene_id",
          values = count_value, 
          mart = human_dataset)

輸出結(jié)果如下:可見attribute定義的四個輸出項

ID conversion

1.5 查看ID轉(zhuǎn)換的完整度

> dim(count_ID)  # 查看ID轉(zhuǎn)換結(jié)果
[1] 58666     4  # 有58666個ensemble ID完成了比對

可見有58666個ensemble ID完成了轉(zhuǎn)換,這比原始數(shù)據(jù)中的58884少了218個ensemble ID。但這僅僅是ensemble ID的轉(zhuǎn)換結(jié)果,我們還需要查看gene symbol(也就是表格中的hgnc_symbol)的完成度。

table(is.na(count_ID$ensembl_gene_id))
table(is.na(count_ID$hgnc_symbol))
table( count_ID$hgnc_symbol == "")
table(duplicated(count_ID$hgnc_symbol))
biomaRt

小結(jié):biomaRt ID轉(zhuǎn)換會出現(xiàn)大量的gene symbol的丟失,具體原因可能是已經(jīng)將重復(fù)的gene symbol去除(有多個ensemble ID對應(yīng)gene symbol的情況)。

2. 使用基因組的gtf注釋文件

在自己用于比對的參考基因組那里可以找到相應(yīng)的注釋文件,我使用的是hg38版本

hg38

2.1 配置R包

BiocManager::install("rtracklayer")
library(rtracklayer)

進(jìn)行相應(yīng)的文件設(shè)置

# input 
gff <- readGFF("Homo_sapiens.GRCh38.96.gtf")
head(gff)

mapid <- gff[gff$type == "gene", c("gene_id", "gene_name")]
head(mapid)
#gff文件很大,用掉就刪掉

# 判斷我們要轉(zhuǎn)換的基因是不是都在
table(count$geneid %in%mapid$gene_id)
mapid <- read.csv("ensemble2symbol.csv")
head(mapid)
whether all

至此,mapid文件則是存儲ID轉(zhuǎn)換信息的文件。

2.2 合并

查看mapid文件并與需要進(jìn)行ID轉(zhuǎn)換的數(shù)據(jù)合并

# 查看gene symbol是否有空值
table( mapid$gene_name == "")

# 用merge進(jìn)行合并
df <- merge(count, mapid, by.x="geneid", by.y="gene_id")

# 先判斷是不是存在重復(fù)的基因名,如果存在重復(fù),先考慮去重
table(duplicated(df$gene_name))

df <- df[!duplicated(df$gene_name),]
table(duplicated(df$gene_name))
image

由上可知,使用gtf文件進(jìn)行ID轉(zhuǎn)換會得到最全的結(jié)果。但最全的結(jié)果是否最適合后續(xù)分析,我們還需要進(jìn)一步考察。

2.3 查看gtf轉(zhuǎn)換文件

image

由上圖可見,有一些ensemble ID其實是對應(yīng)同一個gene symbol,只不過這些gene symbol有不同的版本號,可見名字后面的小數(shù)點(diǎn)。于是我們會提出疑問,該如何處理不同版本的gene symbol呢?暫未明確,須待考察。

3. 小結(jié)

總體來說,使用gtf注釋文件進(jìn)行ID轉(zhuǎn)換是最完整的ID轉(zhuǎn)換。關(guān)于ID轉(zhuǎn)換的事情困擾我已久,或許這本不是什么大問題,但仍是一個問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容