SNP位点通过RS_ID独立编码,因此可以利用 rsID 在不同基因组版本之间自由检索SNP的对应坐标。如果在某一版本上检测到SNP,可以通过 rsID 转换为其他基因组版本上的坐标。以下是几种常用的转换方法:
1. 使用Ensembl VEP工具
Ensembl 的 Variant Effect Predictor (VEP) 工具允许你通过 rsID 查询 SNP,并可以选择不同的参考基因组进行注释,包括将 hg19 (GRCh37) 坐标转换为 GRCh38 坐标。VEP 可以在线使用,也有命令行版本。
步骤:
- 访问 Ensembl VEP
- 提供 rsID 列表,选择输入的基因组版本为 hg19(GRCh37),输出基因组版本为 GRCh38。
2. 使用dbSNP的rsID查询工具
dbSNP 提供了 rsID 的详细信息,包括 SNP 在不同基因组版本上的坐标。你可以通过以下方法查找 rsID 在 GRCh38 上的位置:
- 访问 NCBI dbSNP
- 输入 rsID(如 rs123456),查询并选择相应的基因组版本来查看 GRCh38 坐标。
3. LiftOver工具
UCSC 提供的 LiftOver 工具可以将基因组坐标从一个版本转换到另一个版本,比如从 hg19 转换到 GRCh38。虽然它不能直接通过 rsID 操作,但如果你有 hg19 坐标,可以使用 LiftOver 进行转换。
步骤:
- 提供 hg19 坐标文件。
- 选择转换目标为 GRCh38。
- 下载转换后的坐标文件。
4. Bioconductor R包:liftOver
如果你习惯使用 R 语言,Bioconductor 的 liftOver
函数也能帮助你从 hg19 到 GRCh38 进行坐标转换。
library(rtracklayer)
# 读取hg19坐标
hg19_granges <- GRanges(seqnames = "chr1", ranges = IRanges(start = 123456, end = 123456))
# 获取转换链
chain <- import.chain("http://hgdownload.cse.ucsc.edu/goldenPath/hg19/liftOver/hg19ToHg38.over.chain.gz")
# 进行转换
hg38_granges <- liftOver(hg19_granges, chain)
通过这些工具或方法,你可以轻松获取 rsID 在 GRCh38 上的坐标。
5. 数据库软件 timesaveR
优缺点:在线数据库检索,更新及时,效率较低
remotes::install_github("alesssia/timesaveR")
pacman::p_load(timesaveR)
biomart <- biomart.fetch.SNP.grch37.mart() ## 从GRCH37-Hg19基因组上检索SNP的位点
biomart.SNP.position(c("rs9890579",'rs14057', ''rs14281''), biomart, with. Alleles=TRUE,biomart)
实测10000个SNP位点的检索耗时约 3 mins
6. 本地数据库 SNPlocs.Hsapiens.dbSNP144.GRCh37
SNPlocs.Hsapiens.dbSNP144.GRCh37 提供了人类基因组版本GRCh37的单核苷酸多态性(Single Nucleotide Polymorphism,SNP)的位置信息。该软件包基于dbSNP144数据库,提供了SNP的染色体位置、起始和终止位置、参考等基本信息。
SNPlocs.Hsapiens.dbSNP144.GRCh37的在线安装方式可能会出现下载异常的问题,解决方案是推荐通过 wget https://bioconductor.org/packages/3.17/data/annotation/src/contrib/SNPlocs.Hsapiens.dbSNP144.GRCh37_0.99.20.tar.gz
命令在网络环境较好的情况下自行下载安装包手动安装上【install.packages('<_path_>/SNPlocs.Hsapiens.dbSNP144.GRCh37_0.99.20.tar.gz', repos=NULL, type='source')
】。该资源目前已经上传到我的网盘:SNPlocs.Hsapiens.dbSNP144.GRCh37
优缺点:本地数据库检索,版本稳定,效率高
BiocManager::install("SNPlocs.Hsapiens.dbSNP144.GRCh37")
pacman::p_load(SNPlocs.Hsapiens.dbSNP144.GRCh37)
dbSNP <- SNPlocs.Hsapiens.dbSNP144.GRCh37
snpsById(dbSNP ,c("rs9890579",'rs14057', ''rs14281''),ifnotfound = 'drop')
实测10000个SNP位点的检索耗时约 7 seconds
Reference
biomart.SNP.position: Fetches the chromosomal coordinates of the specified SNP IDs in alesssia/timesaveR: Widely used function to save time on everyday work (rdrr.io)
SNPlocs-class function - Rdocumentation