有时候,大家做实验以小鼠为模型,但希望查看与之对应的人同源基因。像这种情况,我们可以不需要进行序列比对来查找,因为比较麻烦。使用公共数据可能更高效。
1.基于NCBI HomoloGene数据库查找物种间对应的同源基因
NCBI HomoloGene数据库收集了部分已经完成基因组测序物种的同源基因数据。
数据库现包含21个物种,共44233组同源基因;
HomoloGene的数据是开放的:FTP
homologene.data存放着同源基因的对应关系
HID(HomoloGene group id) | Taxonomy ID | Gene ID | Gene Symbol | Protein gi | Protein accession |
---|---|---|---|---|---|
3 | 9606 | 34 | ACADM | 160961497 | NP_001104286.1 |
3 | 9598 | 469356 | ACADM | 109008502 | XP_001101274.1 |
3 | 10090 | 11364 | Acadm | 6680618 | NP_031408.1 |
每个物种都有一个对应的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
单个基因直接检索,如Acadm:
批量注释某个物种的基因对应另一个物种的同源基因,可以使用R包homologene,它调用的是c中build68的数据;
homologene(genes, inTax, outTax)
genes:需要查找同源基因的基因列表
inTax:输入基因所属物种
outTax:查找的同源基因属于那个物种
例子:
genelist<-c("Acadm","Eno2","Acadvl")
homologene(genelist, inTax = 10090, outTax = 9606)
10090 9606 10090_ID 9606_ID
1 Eno2 ENO2 13807 2026
2 Mog MOG 17441 4340
查看homologene使用的数据版本
homologeneVersion
[1] 68
-
基于InParanoid 8数据库查找物种间对应的同源基因
InParanoid 8提供的下载数据是Protein ID;构建g InParanoid 8 用到的InParanoid 4.1可以获取的,InParanoid 4.1 standalone download这儿我们利用InParanoid 8提供的同源基因信息进行一个快速检索。
根据自己研究的物种,从Downloads中下载数据;8.0_current;需要值得注意的是,人类与老鼠的同源基因文件InParanoid.H.sapiens-M.musculus.tgz 存放于H.sapiens/ ;在M.musculus/ 不会存在InParanoid.M.musculus-H.sapiens.tgz;其它类似,所以要根据物种名首字母排序去排名靠前的物种文件夹下去找同源基因集文件。
InParanoid.H.sapiens-M.musculus.tgz 下载后解压:
这儿使用文件,格式如下:sqltable.H.sapiens-M.musculus
数据格式和前面的NCBI HomoloGene中的homologene.data差不多;使用R处理数据时,模仿了homologene包代码;
homologene.R的代码
homologene = function(genes, inTax, outTax){
genes <- unique(genes) #remove duplicates
out = homologene::homologeneData %>%
dplyr::filter(Taxonomy %in% inTax & (Gene.Symbol %in% genes | Gene.ID %in% genes)) %>%
dplyr::select(HID,Gene.Symbol,Gene.ID)
names(out)[2] = inTax
names(out)[3] = paste0(inTax,'_ID')
out2 = homologene::homologeneData %>% dplyr::filter(Taxonomy %in% outTax & HID %in% out$HID) %>%
dplyr::select(HID,Gene.Symbol,Gene.ID)
names(out2)[2] = outTax
names(out2)[3] = paste0(outTax,'_ID')
output = merge(out,out2) %>% dplyr::select(2,4,3,5)
# preserve order with temporary column
output$sortBy <- factor(output[,1], levels = genes)
output <- dplyr::arrange(output, sortBy)
output$sortBy <- NULL
return(output)
}
仿写的函数InParanoid_homo():
Hs.Mm<-read.table("sqltable.H.sapiens-M.musculus",sep = "\t",fill = T)
genes<-c("Q8WZ42","A2ASS6")
trans<-InParanoid_homo(genes,Hs.Mm)
InParanoid_homo = function(genes,database){
colnames(database)<-c("Group","score","spieces","num","gene","Bootstrap")
genes <- unique(genes)
Spieces_name1<-database[1,]$spieces
Spieces_name2<-database[2,]$spieces
Spieces_1<-database %>% dplyr::filter(spieces %in% Spieces_name1)
Spieces_2<-database %>% dplyr::filter(spieces %in% Spieces_name2)
if(ANSWER <- readline(paste("Transfer",Spieces_name1,"to",Spieces_name2,"?","True/False: "))){
genes_query<-Spieces_1 %>% dplyr::filter(gene %in% genes);head(genes_query)
output = merge(genes_query,Spieces_2,by="Group")[,]
}else if(ANSWER <- readline(paste("Transfer",Spieces_name2,"to",Spieces_name1,"?","True/False: "))){
genes_query<-Spieces_2 %>% dplyr::filter(gene %in% genes);head(genes_query)
output = merge(genes_query,Spieces_1,by="Group")[,]
}else{
cat("Nothing for you.")
}
return(output)
}
参考:
InParanoid 8: orthology analysis between 273 proteomes, mostly eukaryotic
homologene reference manual