批量转换基因名

作者: BeeBee生信 | 来源:发表于2021-08-07 13:32 被阅读0次

    做通路富集分析常需要批量进行基因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优点是保持数据最新和无需下载本地数据;缺点是依赖网络和操作更繁琐。

    相关文章

      网友评论

        本文标题:批量转换基因名

        本文链接:https://www.haomeiwen.com/subject/xoawvltx.html