做通路富集分析常需要批量进行基因ID转换,总结了3种简便方法与大家分享。
方法1和2依赖于基因组注释R包,如果无相应物种R包就必须用方法3。好在的是常用物种人、小鼠、大鼠等都是有的,一般能满足需要。基因组注释R包全集在网站Bioconductor - 3.9 AnnotationData Packages查看,如我们能在里面找到人基因组注释R包 org.Hs.eg.db
, 我们安装这个注释包,就能用方法1和2转换人种基因ID。
开始教程前先将所有需要的R包导入,并展示用于例子的数据。
library(org.Hs.eg.db)
library(clusterProfiler)
library(biomaRt)
# 例子数据选取了5个Ensembl基因名。
E_genes <- c("ENSG00000110514", "ENSG00000163467", "ENSG00000161021", "ENSG00000254694", "ENSG00000225108")
方法1:使用 select
函数从基因组注释R包选择基因名转换数据。
下面例子展示如何返回NCBI基因ID于SYMBOL
> gene_map <- select(org.Hs.eg.db, keys=E_genes, keytype="ENSEMBL", columns=c("ENTREZID", "SYMBOL"))
'select()' returned 1:1 mapping between keys and columns
> gene_map
ENSEMBL ENTREZID SYMBOL
1 ENSG00000110514 8567 MADD
2 ENSG00000163467 128229 TSACC
3 ENSG00000161021 9794 MAML1
4 ENSG00000254694 <NA> <NA>
5 ENSG00000225108 <NA> <NA>
出现 NA 是正常的,不同数据库对基因定义有差异,无法一一对应。
方法2:使用 clusterProfiler 包的 bitr
函数。clusterProfiler 是通路富集常用 R 包,富集前顺带就用 bitr
把基因名转换。重要参数:
> gene_map <- bitr(geneID=E_genes, fromType="ENSEMBL", toType=c("ENTREZID", "SYMBOL"), OrgDb=org.Hs.eg.db)
'select()' returned 1:1 mapping between keys and columns
Warning message:
In bitr(geneID = E_genes, fromType = "ENSEMBL", toType = c("ENTREZID", :
40% of input gene IDs are fail to map...
> gene_map
ENSEMBL ENTREZID SYMBOL
1 ENSG00000110514 8567 MADD
2 ENSG00000163467 128229 TSACC
3 ENSG00000161021 9794 MAML1
其中 NA 数据被丢弃了,使用 drop
参数控制这个行为。
点评:方法1和2本质是一样的。优点是可以本地操作(无联网行为)且很简单。缺点是数据依赖于基因组注释 R 包,无法保证处于最新状态。如果有需要用最新的基因名对照数据,切勿用这两方法。
方法3:使用 biomaRt 包从在线数据库请求。biomaRt 包让我们无需学习 SQL 语句就能便捷从在线数据库获取数据,这包很强大建议学习。
使用 biomaRt 转换基因名主要分2步,第一步选择需要的数据集,第二步发送请求取得结果。
第一步使用 useMart
函数选择需要的数据库于数据集,可用的在线数据库使用 listMarts
函数查看;选择数据库后,每个数据库都包含大量数据集,比如 Ensembl 每个物种都是一个数据集,使用 listDatasets
函数查看可用的数据集。如果知道了需要的数据集,那么反过来可以在 useMart
函数选择数据库的时候同时选择数据集。
# 查看可用数据库
> listMarts()
biomart version
1 ENSEMBL_MART_ENSEMBL Ensembl Genes 97
2 ENSEMBL_MART_MOUSE Mouse strains 97
3 ENSEMBL_MART_SNP Ensembl Variation 97
4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 97
# 选择在线数据库
> ensembl=useMart(biomart='ensembl')
> datasets <- listDatasets(ensembl)
> head(datasets, n=2)
dataset description
1 abrachyrhynchus_gene_ensembl Pink-footed goose genes (ASM259213v1)
2 acalliptera_gene_ensembl Eastern happy genes (fAstCal1.2)
version
1 ASM259213v1
2 fAstCal1.2
# 使用人基因数据集
ensembl = useDataset("hsapiens_gene_ensembl",mart=ensembl)
# 或者 useMart 直接指定
ensembl <- useMart("ensembl", dataset="hsapiens_gene_ensembl")
第二步使用 getBM
函数索引需要数据。getBM
是 biomaRt 最主要的请求函数。
> gene_map <- getBM(values=E_genes, filters="ensembl_gene_id", attributes=c("hgnc_symbol", "ensembl_gene_id", "entrezgene_id"), mart=ensembl)
> gene_map
hgnc_symbol ensembl_gene_id entrezgene_id
1 MADD ENSG00000110514 8567
2 MAML1 ENSG00000161021 9794
3 TSACC ENSG00000163467 128229
4 ZBTB45P1 ENSG00000225108 NA
5 ENSG00000254694 NA
点评:方法3优点是保持数据最新和无需下载本地数据;缺点是依赖网络和操作更繁琐。
网友评论