跨物种同源基因转换(biomaRt和homologene)2022-06-17

适用背景

当我们进行跨物种比较分析时会发现基因名对不上,或者找不到基因,这时候就需要进行物种间的同源基因转换。最常用的工具就是Ensembl的biomaRt,另外还查到NCBI的一个工具homologene,因此本文将详细讲解这两个包。

方法一 biomaRt

biomaRt是基于Ensembl数据库的R包,当然也可以在网页查询同源基因,但如果基因较多,物种较多,网页版就比较麻烦。需要注意的是,biomaRt包需要联网才能正常使用

  • 先安装包
    BiocManager::install("biomaRt")
  • 加载包
    library(biomaRt)
  • 查看数据库列表
> listMarts()
               biomart                version
1 ENSEMBL_MART_ENSEMBL      Ensembl Genes 106
2   ENSEMBL_MART_MOUSE      Mouse strains 106
3     ENSEMBL_MART_SNP  Ensembl Variation 106
4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 106
  • 查看特定数据库的数据集,'ensembl'表示使用所有数据库,可以看到所有可用数据库里共有215个数据集。
> umart = useMart('ensembl')
> datalist = listDatasets(umart)
> head(datalist)
                       dataset                           description
1 abrachyrhynchus_gene_ensembl Pink-footed goose genes (ASM259213v1)
2     acalliptera_gene_ensembl      Eastern happy genes (fAstCal1.2)
3   acarolinensis_gene_ensembl       Green anole genes (AnoCar2.0v2)
4    acchrysaetos_gene_ensembl       Golden eagle genes (bAquChr1.2)
5    acitrinellus_gene_ensembl        Midas cichlid genes (Midas_v5)
6    amelanoleuca_gene_ensembl       Giant panda genes (ASM200744v2)
      version
1 ASM259213v1
2  fAstCal1.2
3 AnoCar2.0v2
4  bAquChr1.2
5    Midas_v5
6 ASM200744v2
> dim(datalist)
[1] 215   3
  • 模糊搜索数据库里的数据集
> searchDatasets(mart = umart, pattern = "Mouse")
                   dataset                  description  version
107  mmurinus_gene_ensembl Mouse Lemur genes (Mmur_3.0) Mmur_3.0
108 mmusculus_gene_ensembl         Mouse genes (GRCm39)   GRCm39
  • 构建数据集
mouse <- useMart('ensembl',dataset = "mmusculus_gene_ensembl")
macaque <- useMart('ensembl',dataset = "mfascicularis_gene_ensembl")

如果需要获取单个物种的某些基因信息,getBM可以实现,但需要指定输入的格式和输出的格式。

getBM(attributes, filters = "", values = "", mart, curl = NULL, 
checkFilters = TRUE, verbose = FALSE, uniqueRows = TRUE, bmHeader = FALSE,
quote = "\"", useCache = TRUE)
  • 获取某个物种全部基因
    不指定 filters参数,只使用attributes参数,mmusculus_gene_ensembl是小鼠的数据集。
g1 <- getBM(attributes = c("external_gene_name"),mart = useEnsembl("ensembl",dataset = 'mmusculus_gene_ensembl', host = "https://dec2021.archive.ensembl.org/"),uniqueRows = T)
  • 输入 filters
    filters参数可以指定基因的信息类型,用的最多的当然是基因名,但也可以给定基因在染色体位置,基因ID等其它信息。简单来说filters就指定了类型,例如"external_gene_name",values则是具体的值,例如基因Gad1,Sst。
    listFilters可以列出所有输入基因信息的类型,而searchFilters还可以搜寻相关类型的名称。可以看到刚刚构建的小鼠数据集可以输入400种基因信息类型。
> head(listFilters(mouse))
             name              description
1 chromosome_name Chromosome/scaffold name
2           start                    Start
3             end                      End
4      band_start               Band Start
5        band_end                 Band End
6          strand                   Strand
> dim(listFilters(mouse))
[1] 400   2
> searchFilters(mart = mouse, 'gene_name')
                 name                           description
53 external_gene_name             Gene Name(s) [e.g. mt-Tf]
98      wikigene_name WikiGene name(s) [e.g. 0610005C13Rik]
  • 输出 attributes
    类似的,指定输出类型使用attributes参数,用listAttributes函数查看可输出的类型,searchAttributes模糊查询可输出的类型。可以看到可以输出2987种类型。
> dim(listAttributes(mouse))
[1] 2987    3
> head(listAttributes(mouse))
                           name                  description         page
1               ensembl_gene_id               Gene stable ID feature_page
2       ensembl_gene_id_version       Gene stable ID version feature_page
3         ensembl_transcript_id         Transcript stable ID feature_page
4 ensembl_transcript_id_version Transcript stable ID version feature_page
5            ensembl_peptide_id            Protein stable ID feature_page
6    ensembl_peptide_id_version    Protein stable ID version feature_page
> searchAttributes(mart = mouse, 'ensembl_gene_id')
                        name            description         page
1            ensembl_gene_id         Gene stable ID feature_page
2    ensembl_gene_id_version Gene stable ID version feature_page
183          ensembl_gene_id         Gene stable ID    structure
184  ensembl_gene_id_version Gene stable ID version    structure
223          ensembl_gene_id         Gene stable ID     homologs
224  ensembl_gene_id_version Gene stable ID version     homologs
2884         ensembl_gene_id         Gene stable ID          snp
2885 ensembl_gene_id_version Gene stable ID version          snp
2942         ensembl_gene_id         Gene stable ID    sequences
2943 ensembl_gene_id_version Gene stable ID version    sequences
  • 使用示例
> getBM(attributes = c("ensembl_gene_id","external_gene_name"),filters = "external_gene_name", values = c("Gad1","Sst"),mart = mouse,uniqueRows = T)
     ensembl_gene_id external_gene_name
1 ENSMUSG00000070880               Gad1
2 ENSMUSG00000004366                Sst

以下来自另一篇博主的用法

### 根据entrez ID号来找
entrzID=c("672","1") ##定义entrez ID
getBM(attributes=c("entrezgene","external_gene_name","gene_biotype"), filters = "ensembl_gene_id_version", values =entrzID, mart=human,uniqueRows=TRUE)
### 通过染色体及起始终止坐标来挑选基因
getBM(c('affy_hg_u133_plus_2','ensembl_gene_id'), filters = c('chromosome_name','start','end'), values=list(16,1100000,1250000), mart=human)
###根据染色体位置(6p21.1)查找所有位于其上的基因
getBM(c('entrezgene','hgnc_symbol', 'transcript_biotype', 'chromosome_name','start_position','end_position', 'band'), filters = c('chromosome_name','band_start','band_end'), values=list(6,'p21.1','p21.1'), mart=human)

获取不同物种的同源基因

  • 使用函数getLDS
getLDS(attributes, filters = "", values = "", mart, attributesL,
filtersL = "", valuesL = "", martL, verbose = FALSE, uniqueRows = TRUE, 
bmHeader=TRUE)

getBM类似,参考物种还是原来的参数,而查询物种则需要在原参数名加上L,例如参考物种是attributes,则查询物种是attributesL
使用示例

gene.mo2ma <- getLDS(attributes = c("external_gene_name"),filters = "external_gene_name",values = c("Gad1","Sst"),mart = mouse,attributesL = c("external_gene_name","chromosome_name"),martL = macaque,uniqueRows = T)
> gene.mo2ma <- getLDS(attributes = c("external_gene_name"),filters = "external_gene_name",values = c("Gad1","Sst"),mart = mouse,attributesL = c("external_gene_name","chromosome_name"),martL = macaque,uniqueRows = T)
> head(gene.mo2ma)
  Gene.name Gene.name.1 Chromosome.scaffold.name
1       Sst         SST                        2
2      Gad1        GAD1                       12
  • 小插曲
    我运行上面的脚本时出现下面的报错:
> gene.mo2ma <- getLDS(attributes = c("external_gene_name"),filters = "external_gene_name",values = c("Gad1","Sst"),mart = mouse,attributesL = c("external_gene_name","chromosome_name"),martL = macaque,uniqueRows = T)
错误: biomaRt has encountered an unexpected server error.
Consider trying one of the Ensembl mirrors (for more details look at ?useEnsembl)

查了谷歌后发现是网页自身的问题,在构建数据集的时候需更换2021年版本的一个网页才能正常运行,估计是2022年版本的bug。
解决办法是是用host参数指定2021年版本网页。

macaque <- useMart("ensembl", dataset = "mfascicularis_gene_ensembl", host = "https://dec2021.archive.ensembl.org/") 

方法二 homologene

biomaRt不同,homologene是基于NCBI HomoloGene数据库的一个包,感兴趣可以进官网了解一下此数据库,因此,两者做出来的结果会有差异,建议可以互为补充。
HomoloGene最新更新时间是2014-04-09,只有21个物种,可能还是biomaRt更完善一些。

  • 安装包
    BiocManager::install("homologene")
  • 加载包
    library(homologene)
    这个包比较简单,但是可提取信息也比较少,就一个函数就可以查询同源基因,只需传入三个参数,genelist是基因列表,inTax 是参考物种的Taxonomy ID,outTax是查询物种的Taxonomy ID。例如小鼠是10090,人是9606。
> genelist=c('Gad','Sst')
> homologene(genelist, inTax = 10090, outTax = 9606)
  10090 9606 10090_ID 9606_ID
1   Sst  SST    20604    6750
  • 常用物种的Taxonomy ID(来自这篇文章):
10090   Mus musculus
10116   Rattus norvegicus
28985   Kluyveromyces lactis
318829  Magnaporthe oryzae
33169   Eremothecium gossypii
3702    Arabidopsis thaliana
4530    Oryza sativa
4896    Schizosaccharomyces pombe
4932    Saccharomyces cerevisiae
5141    Neurospora crassa
6239    Caenorhabditis elegans
7165    Anopheles gambiae
7227    Drosophila melanogaster
7955    Danio rerio
8364    Xenopus (Silurana) tropicalis
9031    Gallus gallus
9544    Macaca mulatta
9598    Pan troglodytes
9606    Homo sapiens
9615    Canis lupus familiaris
9913    Bos taurus   

小结与补充

总的来说biomaRt更加完善,功能更强大,所以更推荐biomaRt。但是只能对两个物种进行转换,如果是多个物种进行转换,该怎么做呢?下一篇文章试试写一下2个及以上物种的转换函数吧。

你可能感兴趣的:(跨物种同源基因转换(biomaRt和homologene)2022-06-17)