你的基因和小鼠的基因之间可能就差一个同源转换~
Hi,大家好,这里是晨曦碎碎念,在这里将记载着晨曦学习路上的一些心得和感悟,也放在这里和大家一起分享~
今天我们的主题是——biomaRt包实现不同物种之间同源基因转换
晨曦单细胞数据库系列传送门
引言
说起来很有意思,之所以会想起来学习这里,主要是因为前段时间我和身边同学有了一次争论。
A同学
曦曦,你说小鼠可算是实验动物中最接近人的了,那么人和小鼠之间的同源基因可以如何转换呢?
曦曦
停停,和人最相近的不是猩猩吗?
A同学
。。。。。。。
B同学
晨曦啊,你实验室养猩猩了啊!~
曦曦
(望天状QAQ)那就简单的大小写转换不就好了,毕竟人的Gene symbol基本都是大写,小鼠的基本都是小写~
A同学B同学
你都说“基本”了,那万一出错了呢?
曦曦
。。。。。。
所以这篇推文应运而生,让我们开始今天的学习吧~
背景知识
大约有接近80%的小鼠蛋白质在人类基因组中具有严格的1:1种间同源体,其序列同一性通常介于70%-100%。
富集分析因为大多数参考数据集都是人的,所以我们可以通过映射来解释小鼠该基因的功能。
我们这里可以使用biomarRt包把小鼠的gene ID进行同源映射到人的基因上去,进而展开后续的单基因分析。
代码讲解
#安装R包if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")BiocManager::install("biomaRt")library(biomaRt)#流程:#第一步:明确biomart中哪些数据库可以使用(用listMarts函数)#第二步:链接到四大数据集中的其中之一(用usemart函数)#第三步:使用listDatasets函数调取选定的四大数据库之一的子数据库(基因组注释分类)#第四步:选定需要的基因组注释分类(useDataset()函数)#第一步:明确biomart中哪些数据库可以使用(用listMarts函数)#可见该R包管理数据库的形式是层层管理(四大数据库下又包含很多子集)listMarts()# biomart version#1 ENSEMBL_MART_ENSEMBL Ensembl Genes 104#2 ENSEMBL_MART_MOUSE Mouse strains 104#3 ENSEMBL_MART_SNP Ensembl Variation 104#4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 104#第二步:链接到四大数据集中的其中之一(用usemart函数)plant = useMart('ensembl')#调取的是四大数据排名第一的#第三步:使用listDatasets函数展示选定的四大数据库之一的子数据库listDatasets(plant)#查看大数据库下的子数据库# dataset#1 acalliptera_gene_ensembl#2 acarolinensis_gene_ensembl#3 acitrinellus_gene_ensembl#4 amelanoleuca_gene_ensembl#5 amexicanus_gene_ensembl#6 anancymaae_gene_ensembl#7 aocellaris_gene_ensembl#···#···#54 hsapiens_gene_ensembl#我们后面用到的是hsapiens_gene_ensembl这个数据集。还有小鼠的mmusculus_gene_ensembl数据集##第四步:选定需要的基因组注释分类(useDataset()函数)#示例:useDataset(dataset,mart, verbose = FALSE)#dataset就是要使用的数据集(使用listDatasets函数)#mart是使用useMart函数创建的Mart对象(锁定的四大数据库之一)#实践:mart <- useDataset("hsapiens_gene_ensembl", useMart("ensembl"))#使用lsitFilters()函数查看可选择的类型,选定要获取的注释类型,以及已知注释的类型#这里的变量mart必须得选定数据集赋值后才可以运行listFilters(mart)# name#1 chromosome_name#2 start#3 end#4 band_start#5 band_end#6 marker_start
上面铺垫结束,我们进行同源基因转换其实也就是这个流程的double版本
代码实战
#第一步:选择要使用的BioMart 数据库和数据集human <- useMart('ensembl',dataset = "hsapiens_gene_ensembl")mouse <- useMart('ensembl',dataset = "mmusculus_gene_ensembl")#第二步:使用getLDS函数(可以简单理解为同时对选定的多个数据集进行检索)m2h.g <- getLDS(attributes = c("mgi_symbol"),filters = "mgi_symbol", values = "Tmx2",mart = mouse, attributesL = c("hgnc_symbol","chromosome_name","start_position"), martL = human,uniqueRows = T)
晨曦解读
这里说一下晨曦对于getLDS函数的理解
首先我们拥有一个小鼠A基因,然后我们想要得到其同源映射的人类A基因
第一步:我们需要在小鼠的数据库中去定位这个基因,attributes参数为我们定位后得到的基因类型,因为这里我们只是进行一下定位,并不是想改变其形式,所以依旧是小鼠基因所以我们这里选择mgi_symbol
第二步:filters参数为我们已知的基因类型,也就是小鼠A基因,所以这里也填写mgi_symbol
第三步:定位好以后就是跨数据库进行比对并且获得我们想要的信息,这里attrebutes参数依旧是我们想要的数据类型
这里再解释一下各个参数,当然最准确的还是直接去看帮助文档~
attributes:属性参数;代表着我们所要检索的数据集的属性参数,比如这里我们用的是mgi_symbol,代表的就是小鼠的基因的symbol名字。这里我们可以使用listAttributes函数检索可以使用的属性参数
head(listAttributes(mouse))namedescription page1ensembl_gene_id Gene stable ID feature_page2ensembl_gene_id_version Gene stable ID version feature_page3ensembl_transcript_id Transcript stable ID feature_page4ensembl_transcript_id_version Transcript stable ID version feature_page5ensembl_peptide_id Protein stable ID feature_page6ensembl_peptide_id_version Protein stable ID version feature_page
filter:过滤器,应在查询中使用的过滤器。这些过滤器将应用于主数据集。可以使用函数listFilters检索可能的过滤器列表
value:输入我们构造的要映射的向量
比如这里可以是一串小鼠相关的基因,以向量的形式组建,这里我们拿一个小鼠基因“Tmx2”举例子
mart :指的是输入数据的mart对象,由于输入数据是小鼠的基因,自然选择的mart对象为小鼠。
attributesL:代表的是我们需要同源转化的另外一个数据库,这里我们自然是由小鼠转为人,选择的就是需要连接到的人的Mart对象,在属性参数里面我们填写了三个参数,分别是gene_symbol ,染色体位置,基因起始位点
useMartL:代表我们需要链接的Mart对象,这里自然就是人的
最后运行得到的结果如下:
晨曦解读
有映射不到或者映射多个是很正常的,取其中结果即可(背景知识有提示)
这里看到确实是大小写发生了变化(Ps:但是不代表所有都是哦,更多的细节小伙伴们可以多多探索哦~)
纯代码
library(biomaRt)human = useMart("ensembl", dataset = "hsapiens_gene_ensembl")mouse = useMart("ensembl", dataset = "mmusculus_gene_ensembl")genes = c("目标基因")genes = getLDS(attributes = c("mgi_symbol"), filters = "mgi_symbol",values = genes ,mart = mouse,attributesL = c("hgnc_symbol","chromosome_name", "start_position"),martL = human,uniqueRows=T)genes
进阶
当然我们每次写这些代码可能会有点麻烦,把代码封装一下,是不是更好呢?
convertMouseGene <- function(x){ library("biomaRt") human <- useMart("ensembl", dataset = "hsapiens_gene_ensembl") mouse <- useMart("ensembl", dataset = "mmusculus_gene_ensembl") genes <- getLDS(attributes = c("mgi_symbol"), filters = "mgi_symbol", values = x , mart = mouse, attributesL = c("hgnc_symbol"), martL = human, uniqueRows=T) return(genes) }convertMouseGene("Tmx2")# MGI.symbol HGNC.symbol#1 Tmx2 TMX2
至此,这期的晨曦碎碎念就结束啦~
Ps:评论区留言感兴趣的内容,如果晨曦能力足够或者感兴趣的话,说不定下一次碎碎念就是你感兴趣的内容哦~
晨曦单细胞笔记系列传送门
晨曦从零开始学画图系列传送门
END

撰文丨晨   曦
排版丨四金兄
主编丨小雪球
欢迎大家关注解螺旋生信频道-挑圈联靠公号~
继续阅读
阅读原文