专栏首页生物信息云biomaRt包实现不同物种之间同源基因转换

biomaRt包实现不同物种之间同源基因转换

在之前,我介绍过生物学中

可能常见的转换是小鼠和人之间的转换,因为小鼠的基因和人的基因的同源性

,约80%的小鼠蛋白质在人类基因组中具有严格的1:1种间同源体,其序列同一性通常介于70%~100%。当然跟人类亲缘关系最近的物种是黑猩猩。

好了,我们正式介绍如何把小鼠的gene ID进行同源性映射到人的基因上去?

我们用到的R包是biomaRt包。bioMart包是一个连接bioMart数据库的R语言接口,能通过这个软件包自由连接到bioMart数据库。可以进行各种基因转换。

没有安装过的需要先安装包。

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("biomaRt")
library(biomaRt)

使用biomaRt包的第一步是选择要使用的BioMart 数据库和数据集。使用useMart函数可以连接到指定的BioMart 数据库和数据库中的数据集。要知道哪些BioMart 数据库是可用的,可以利用listMarts函数查看。

> listMarts()
               biomart                version
1 ENSEMBL_MART_ENSEMBL      Ensembl Genes 101
2   ENSEMBL_MART_MOUSE      Mouse strains 101
3     ENSEMBL_MART_SNP  Ensembl Variation 101
4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 101

要知道在一个BioMart数据库中哪些数据集是可用的,首先选择使用useMart的BioMart数据库,然后使用listDatasets函数在选定的BioMart,见listDatasets函数。

listDatasets()用于查询当前数据库所含的基因组注释。比如查看人的和鼠的。

> listDatasets(human)
                           dataset
1         acalliptera_gene_ensembl
2       acarolinensis_gene_ensembl
3        acchrysaetos_gene_ensembl
4        acitrinellus_gene_ensembl
..........
79             hhucho_gene_ensembl
80           hsapiens_gene_ensembl
...........
> listDatasets(mouse)
                           dataset
1         acalliptera_gene_ensembl
2       acarolinensis_gene_ensembl
3        acchrysaetos_gene_ensembl
4        acitrinellus_gene_ensembl
...........
105          mmurinus_gene_ensembl
106         mmusculus_gene_ensembl
...........

我们后面用到的是hsapiens_gene_ensembl这个数据集。还有小鼠的mmusculus_gene_ensembl数据集。

用useDataseq()函数选定数据库中的基因组。

useDataset(dataset,mart, verbose = FALSE)

dataset就是要使用的数据集。可能的数据集的列表可以使用listDatasets函数检索,也就是我们上面介绍的。mart是使用useMart函数创建的Mart对象。

mart <- useDataset("hsapiens_gene_ensembl", useMart("ensembl"))

用lsitFilters()函数查看可选择的类型,选定要获取的注释类型,以及已知注释的类型。

> listFilters(mart)
                                     name
1                         chromosome_name
2                                   start
3                                     end
4                              band_start
5                                band_end
6                            marker_start

那么我们怎进行同源基因转换呢?按照开始说的,使用biomaRt包的第一步是选择要使用的BioMart 数据库和数据集。使用useMart函数可以连接到指定的BioMart 数据库和数据库中的数据集。所以第一步是构建mart对象。

human <- useMart('ensembl',dataset = "hsapiens_gene_ensembl")
mouse <- useMart('ensembl',dataset = "mmusculus_gene_ensembl")

也就是选择数据库ensembl,数据集是人的hsapiens_gene_ensembl或者小鼠的mmusculus_gene_ensembl。

getLDS函数是biomaRt查询的主要功能,连接两个数据集,并从这些链接的biomaRt数据集检索信息。在Ensembl中,这转化为同源映射。

我这里有一串小鼠基因。mouse.gene

将其映射到人的基因上。

m2h.g <- getLDS(attributes = c("mgi_symbol"),filters = "mgi_symbol",
       values = mouse.gene,mart = mouse,
       attributesL = c("hgnc_symbol","chromosome_name","start_position"),
       martL = human,uniqueRows = T)

attributes:属性参数:代表我们所要检索的数据集的属性参数,比如这里我们用的是mgi_symbol,代表的就是小鼠的基因的symbol名字。可以使用listAttributes函数检索可能的属性列表。

> 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

filter:参数过滤器,应在查询中使用的过滤器。这些过滤器将应用于主数据集。可以使用函数listFilters检索可能的过滤器列表。

value:代表我们想要输入的数据集,就是输入我们构造的要查询的向量。

mart :指的是输入数据的mart对象,由于输入数据是小鼠的基因,自然选择的mart对象为小鼠。

attributesL:代表的是我们需要同源转化的另外一个数据库,这里我们自然是由小鼠转为人,选择的就是需要连接到的人的Mart对象,在属性参数里面我们填写了三个参数,分别是gene_symbol ,染色体位置,基因起始位点。

useMartL:参数是代表我们需要链接的Mart对象,这里自然就是人的。


我们查看一下结果:

> head(m2h.g)
  MGI.symbol HGNC.symbol Chromosome.scaffold.name Gene.start..bp.
1     mt-Nd1      MT-ND1                       MT            3307
2     Ube2j2      UBE2J2                        1         1253909
3   Aurkaip1    AURKAIP1                        1         1373730
4     mt-Nd5      MT-ND5                       MT           12337
5       Agrn        AGRN                        1         1020120
6     mt-Co3      MT-CO3                       MT            9207

这样我们就完成了转换。可以看的出来,人的基因和小鼠的基因名称就是大小写的区别(大多数,不是全部)。

最后额外介绍一下用getBM()函数获取注释。给定一组过滤器和相应的值,它从连接到的BioMart数据库中检索用户指定的属性。

ensg <- c("ENSG00000242268","ENSG00000270112",
  "ENSG00000167578","ENSG00000273842",
  "ENSG00000078237","ENSG00000146083",
  "ENSG00000225275","ENSG00000158486",
  "ENSG00000198242","ENSG00000259883",
  "ENSG00000231981","ENSG00000269475")
hg_symbols<- getBM(attributes=c('ensembl_gene_id','hgnc_symbol',"chromosome_name", "start_position","end_position", "band"), filters= 'ensembl_gene_id', values = ensg, mart = mart)

这也达到的注释的目的。

更多功能,参考官方文档。

本文分享自微信公众号 - MedBioInfoCloud(MedBioInfoCloud),作者:DoubleHelix

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R语言基础教程——第8章:文件的输入与输出

    做生物信息分析,少不了的就是数据,比如转录组的数据,无论是下载的还是测序的,用R进行分析,就必须将这些数据读入,分析的结果,比如一些图,就少不了输出,因此,文件...

    DoubleHelix
  • alona:一个用于单细胞RNA-seq分析的web工具

    alona是一个基于网络的生物信息学服务,旨在分析单细胞RNA测序(scRNA-seq)数据。该服务使用一些最流行的scRNA-seq算法执行处理、分析和可视化...

    DoubleHelix
  • Linux系统下Anaconda的安装和使用教程

    去官网下载:https://www.anaconda.com/products/individual

    DoubleHelix
  • Matpotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法

    最近有小伙伴私信我关于matplotlib时间类型刻度的设置问题,第一感觉就是官网有好多例子介绍啊

    数据森麟
  • exif信息对照

    因为找不到一个完整的exif的key对照表,所以自己写一个吧,以下的key不是exif的全部,是iPhone自带像机拍摄的全部exif信息,方便大家万一有需求。

    黒之染
  • OpenCV特征点检测——ORB特征

    目录 什么是ORB 如何解决旋转不变性 如何解决对噪声敏感的问题 关于尺度不变性 关于计算速度 关于性能 Related posts 什么是ORB ? ORB是...

    智能算法
  • <img>标签

    <img> 标签向网页中嵌入一幅图像。<img> 标签并不会在网页中插入图像,而是从网页上链接图像。<img> 元素创建的是被引用图像的占位空间。

    Html5知典
  • 生成模型学习的特征属性如何操作修改等介绍

    https://devblogs.nvidia.com/parallelforall/photo-editing-generative-adversarial-...

    用户1908973
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)

    阅读目录: 1.开篇介绍 2.Model与View的使用关系(数据上下文DataContext与View呈现) 3.Metadata元数据驱动设计(如何使用中间...

    王清培
  • go笔记:json的简单处理

    json的本质就是数组和字典的组合,但系统的数组和字典都是确定类型的,所以,go的interface{}就能大显身手了。 下面的代码描述了自定义类型 List...

    超级大猪

扫码关注云+社区

领取腾讯云代金券