【问题标题】:Map SNP IDs to genome coordinates将 SNP ID 映射到基因组坐标
【发布时间】:2013-12-13 15:13:49
【问题描述】:

我有几个 SNP ID(即 rs16828074、rs17232800 等...),我想从 UCSC genome website 获取它们在 Hg19 基因组中的坐标。

我更喜欢使用R 来实现这个目标。该怎么做?

【问题讨论】:

  • 您能提供更多信息吗?您在使用 FASTA 文件吗?您不能简单地运行多序列比对吗?
  • 我不使用 FASTA 文件,但我可以。我相信有很多方法可以做到这一点,但我问的是最简单的方法。谢谢。
  • 有任何 Python3 选项吗?我找到了 cruzdb,但这似乎只适用于 Python2。

标签: r bioinformatics bioconductor genetics genome


【解决方案1】:

这是使用 Bioconductor 包biomaRt 的解决方案。它是先前发布的代码的略微更正和重新格式化的版本。

library(biomaRt) # biomaRt_2.30.0

snp_mart = useMart("ENSEMBL_MART_SNP", dataset="hsapiens_snp")

snp_ids = c("rs16828074", "rs17232800")
snp_attributes = c("refsnp_id", "chr_name", "chrom_start")

snp_locations = getBM(attributes=snp_attributes, filters="snp_filter", 
                      values=snp_ids, mart=snp_mart)

snp_locations
#    refsnp_id chr_name chrom_start
# 1 rs16828074        2   232318754
# 2 rs17232800       18    66292259

鼓励用户阅读全面的biomaRtvignette 并尝试以下biomaRt 功能:

listFilters(snp_mart)
listAttributes(snp_mart)
attributePages(snp_mart)
listDatasets(snp_mart)
listMarts()

【讨论】:

  • 请问filters="snp_filter"是什么意思?谢谢。
  • 从小插图的第 7 页开始:“过滤器定义了对查询的限制。例如,您希望将输出限制为位于人类 X 染色体上的所有基因,则可以使用过滤器“染色体名称”具有值'X'”。如果没有过滤器,您将获得所选数据库中的所有 snps。试试命令listFilters(snp_mart) 看看可以使用哪些过滤器。
  • 我注意到如果你有大量的 SNP,这需要很长时间,例如200,000 ish(例如使用 Affymetrix 6.0 SNP 阵列并希望所有 SNPS 的位置)。我想知道是否有人知道更快的方法。
  • @JimBo,我还注意到 biomaRt 数据库的响应非常慢,即使输出只有 2000 行。可能值得在生物导体邮件列表 (bioconductor.org/help/mailing-list/mailform) 上发布。
【解决方案2】:

通过 Perl,您会发现构建代码来查询 SNP 非常容易。

有一个 Web 浏览器 GUI 工具 (HERE) 用于根据您希望使用 Biomart 库查询的数据库和数据集构建 perl 脚本。

说明

  1. 转到http://www.ensembl.org/biomart/martview/ad23fb5685e6aecb59ab12ce73c89731(获取支持的后生动物)或http://biomart.vectorbase.org/biomart/martview/6e274bc00b3c68a131a6947d02039ade(获取最新的疟疾载体,例如A. gambiae
  2. 选择数据库和数据集:

  3. 单击“perl”按钮生成用于 Biomart API 查询的 perl 代码,并将代码复制粘贴到您的 perl 编辑器中 - 使用您选择的 SNP rsNumbers 运行它。

    李>
# An example script demonstrating the use of BioMart API.
use strict;
use BioMart::Initializer;
use BioMart::Query;
use BioMart::QueryRunner;

my $confFile = "PATH TO YOUR REGISTRY FILE UNDER biomart-perl/conf/."
my $action='cached';
my $initializer = BioMart::Initializer->new('registryFile'=>$confFile,'action'=>$action);
my $registry = $initializer->getRegistry;

my $query = BioMart::Query->new('registry'=>$registry,'virtualSchemaName'=>'default');
    $query->setDataset("hsapiens_snp");
    $query->addAttribute("refsnp_id");
    $query->addAttribute("refsnp_source");
    $query->addAttribute("chr_name");
    $query->addAttribute("chrom_start");
    $query->formatter("TSV");

my $query_runner = BioMart::QueryRunner->new();

############################## GET RESULTS ##########################
$query_runner->execute($query);
$query_runner->printHeader();
$query_runner->printResults();
$query_runner->printFooter();
#####################################################################

【讨论】:

    【解决方案3】:

    使用 bioconductor 的 biomaRt R 包。

    这提供了一种向BioMart 发送查询的简单方法,BioMart 获取有关给定 rsNumber(即rsid)的 SNP 的信息。

    例如要导入 rs16828074(您在帖子中列出的 rsNumber)的 SNP 数据,请使用:

    代码:

    library(biomaRt)
    
    snp.id <- 'rs16828074'   # an SNP rsNumber like you listed in the post
    
    snp.db <- useMart("snp", dataset="hsapiens_snp")  # select your SNP database
    
    # The SNP data file imported from the HUMAN database:
    nt.biomart <- getBM(c("refsnp_id","allele","chr_name","chrom_start",                   
                          "chrom_strand","associated_gene",
                          "ensembl_gene_stable_id"),
                          filters="refsnp",
                          values=snp.id,
                          mart=snp.db)
    

    让我知道你是如何处理这个问题的(通过 cmets),因为我在这里的回答中假设了一些基本的编码和包导入能力。

    致谢:

    转到Jorge Amigo(他在 Biostars 中的post

    【讨论】:

    • 运行您的代码时出现以下错误。 getBM 错误(c("refsnp_id", "allele", "chr_name", "chrom_start", "chrom_strand", : Invalid filters(s): refsnp Please use the function 'listFilters' to get valid filter names
    • 看@bdemarest的帖子,他好像比我先到了^^,我会根据perl编程语言发布另一个答案,这是我认为最推荐的SNP查询语言
    • 你的意思是感谢“Jorge Amigo”而不是“Zach Stednick”。您的帖子与“bdemarest”接受的答案有何不同?
    • @zx8754 你是对的,在这两个方面,我很抱歉。我已经编辑了正确的致谢。为什么我对“bdemarest”有相同的答案?最初我没有意识到语法是在 R 中,现在我才意识到这一点。请将我的帖子标记为重复
    • 谢谢,让它留下来,我喜欢 biostars 的链接 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多