2017-01-05 1 views
3

유전자에 대한 긴 데이터 프레임과 다양한 형태의 ID가 있습니다 (예 : OMIM, Ensembl, Genatlas). 각 유전자와 관련된 모든 SNP 목록을 얻고 싶습니다. (이것은 this question의 반대입니다.)유전자 ID별로 SNP 목록을 얻는 가장 좋은 방법은 무엇입니까?

지금까지 가장 좋은 해결책은 biomaRt package (bioconductor)입니다. here을 수행 할 필요가있는 조회의 예가 있습니다. 이것은 다음과 같이 시작하는 데이터 프레임 출력

library(biomaRt) 

#load the human variation data 
variation = useEnsembl(biomart="snp", dataset="hsapiens_snp") 

#look up a single gene and get SNP data 
getBM(attributes = c(
    "ensembl_gene_stable_id", 
    'refsnp_id', 
    'chr_name', 
    'chrom_start', 
    'chrom_end', 
    'minor_allele', 
    'minor_allele_freq'), 
    filters = 'ensembl_gene', 
    values ="ENSG00000166813", 
    mart = variation 
) 

:

ensembl_gene_stable_id refsnp_id chr_name chrom_start chrom_end minor_allele minor_allele_freq 
1  ENSG00000166813 rs8179065  15 89652777 89652777   T   0.242412 
2  ENSG00000166813 rs8179066  15 89652736 89652736   C   0.139776 
3  ENSG00000166813 rs12899599  15 89629243 89629243   A   0.121006 
4  ENSG00000166813 rs12899845  15 89621954 89621954   C   0.421126 
5  ENSG00000166813 rs12900185  15 89631884 89631884   A   0.449681 
6  ENSG00000166813 rs12900805  15 89631593 89631593   T   0.439297 

(4612 행)

코드가 작동을하지만, 실행 시간 내 목적을 위해 장착, 여기 내 코드입니다 매우 길다. 위의 경우 약 45 초가 걸립니다. 아마 이것은 대립 유전자와 관련이 있을지도 모른다고 생각했습니다. 그러나 단지 SNPs rs ids의 최소한을 찾는 것은 25 초 정도 걸립니다. 나는 수천 개의 유전자를 갖고 있으므로 하루 종일 (시간 초과 나 다른 오류가없는 것으로 가정) 하루가 걸릴 것입니다. 이건 옳지 않아. 내 인터넷 연결 속도가 느리지 않습니다 (20-30 mbit).

나는 쿼리 당 더 많은 유전자를 찾으려고 노력했다. 이것은 도움이되었습니다. 한 번에 10 개의 유전자를 찾는 것은 단일 유전자를 찾는 것보다 약 10 배 정도 느립니다.

gene id의 벡터와 연관된 SNP 벡터를 얻는 가장 좋은 방법은 무엇입니까? 난 그냥 두 개의 테이블의 SNP와 자신의 위치와 유전자와 자신의 위치와 하나 하나를 다운로드 할 수 있다면

, 그럼 난 쉽게 dplyr (또는 어쩌면 data.table)를 사용하여이 문제를 해결할 수 있습니다. 나는 그러한 테이블을 찾을 수 없었습니다.

+2

와 유전자에 의해 그룹화 긴 런타임이, Biomart 데이터베이스 restrictio 그래서 간단 n과 빠른 방법이있을 것 같지 않습니다. 즉, 이것은 * 매우 느리고 일반적으로 더 빠르게 실행되어야합니다. 내 컴퓨터에서는 5 초 이내에 실행됩니다. 그러나 Biomart 서버는 변덕스럽게 유명합니다. –

+0

이상적으로는 어딘가에 CSV 형식의 테이블 두 개를 다운로드하고 필자 만의 필터링을 수행합니다. 그러나 나는 그러한 테이블을 찾을 수 없다. 분명히 [이 5 년 된 질문] (https://www.biostars.org/p/12323/)에 따르면 어떤 사람이 있었을 것입니다. – Deleet

+0

dbSNP 대량 데이터를 다운로드 할 수 있습니다. 예를 들면 다음과 같습니다. ftp://ftp.ncbi.nih.gov/snp/organis/human_9606_b146_GRCh38p2/ –

답변

4

R을 사용하고 있으므로 다음은 rentrez 패키지를 사용하는 아이디어입니다. NCBI의 Entrez 데이터베이스 시스템과 특히 eutils 함수 인 elink을 사용합니다. 이 문제를 해결하기위한 코드를 작성하고 매개 변수를 조정해야하지만 좋은 시작일 수 있습니다.

library(rentrez) 
# for converting gene name -> gene id 
gene_search <- entrez_search(db="gene", term="(PTEN[Gene Name]) AND Homo sapiens[Organism]", retmax=1) 
geneId <- gene_search$ids 
# elink function 
snp_links <- entrez_link(dbfrom='gene', id=geneId, db='snp') 

# access results with $links 
length(snp_links$links$gene_snp) 
5779 

head(snp_links$links$gene_snp) 
'864622690' '864622594' '864622518' '864622451' '864622387' '864622341' 

나는 수동의 SNP의 수는 당신이 관심의 유전자 기대하는 것에 대해 것을 다시 한 번 확인 제안 - 당신이 ... 등, 성적 증명서에 의해 추가 및 제한 드릴 다운

을해야 할 수도 있습니다 여러 유전자 ID에 대한

:

multi_snp_links <- entrez_link(dbfrom='gene', id=c("5728", "374654"), db='snp', by_id=TRUE) 
lapply(multi_snp_links, function(x) head(x$links$gene_snp)) 
1. '864622690' '864622594' '864622518' '864622451' '864622387' '864622341' 
2. '797045093' '797044466' '797044465' '797044464' '797044463' '797016353' 

결과는 쿼리 때문에 by_id=TRUE

관련 문제