用gnomDB数据库对个人vcf变异文件进行过滤
直播我的基因组前面的上游分析到此为止了,这里是一个分界线,经过孜孜不倦的探索挖掘我已经拿到了我个人基因组跟hg19参考基因组的全部差异位点,而且可以肯定方法学上面没有毛病。现在到了解释这些差异位点的时候,或者说是注释它们。
754755 indel.vcf3784343 snp.vcf
三百多万的snp和近100万的indel仍然是天文数字,前面我多次强调人类的hg19参考基因组并不意味着都是好的,我的DNA跟参考基因组不一样反而是好事,而且更多的位点,仅仅是多态性而已,那么我们就应该在数据分析的过程中把位点区分开来。
首先,来一个最简单的,过滤掉人群突变位点,做这个分析是基于一个显而易见的假设,如果人群中有不少人都是在某个位点跟参考基因组不一样,那么这个位点,至少不是致命的,一般来说也不会是有害的。而公共人群数据库比较出名的有,1000基因组数据库,NHLBI外显子测序数据库,EXAC数据库,gnomAD数据库等。目前 gnomAD数据库是最大最全,而且最新的一个,我们就直接用它吧。
gnomAD数据库背景介绍
GenomeAggregation Database(简称gnomAD)是由各国研究者联合发展起来的基因组突变频率数据库。其目的是汇集和协调来自众多大规模测序计划的全外显子组和全基因组测序数据,为广泛的科学研究团体汇总数据。
该数据库提供的数据集包括123,136个个体的全外显子组测序数据和15,496个个体的全基因组测序数据,这些数据来源于各种疾病研究项目及大型人群测序项目。
该数据库所有的数据都可免费下载。
下载最方便的就是 google的gsutil
啦,但是墙内的朋友有点麻烦,而且数据量也的确是太大了。
gsutil -m cp -r gs://gnomad-public/release/2.0.2/vds/exomes/gnomad.exomes.r2.0.2.sites.vds gnomad_data # 16 GB gsutil -m cp -r gs://gnomad-public/release/2.0.2/vds/exomes/gnomad.exomes.r2.0.2.sites.split.vds gnomad_datagsutil -m cp -r gs://gnomad-public/release/2.0.2/vds/genomes/gnomad.genomes.r2.0.2.sites.vds gnomad_data # 108 GB
如果我们本身只需要该数据库的人群频率信息,其实没必要下载全部的vcf文件, 这里调用 annovar
软件整理好的数据库吧:
nohup /public/biosoft/ANNOVAR/annovar/annotate_variation.pl -downdb -webfrom annovar gnomad_genome --buildver hg19 /public/biosoft/ANNOVAR/annovar/humandb/ >down.log 2>&1 &## 16G Mar 12 2017 /public/biosoft/ANNOVAR/annovar/humandb/hg19_gnomad_genome.txt
仍然是有 16 G,唉,人类遗传研究不容易啊, 简单查看文件内容如下:
#Chr Start End Ref Alt gnomAD_genome_ALL gnomAD_genome_AFR gnomAD_genome_AMR gnomAD_genome_ASJ gnomAD_genome_EAS gnomAD_genome_FIN gnomAD_genome_NFE gnomAD_genome_OTH1 13538 13538 G A 3.378e-05 0 0 0 0 0 7.225e-05 01 13540 13540 T C 0 0 0 0 0 0 0 01 10327 10327 T C 0.256 0.2609 0.5 0.25 0.5 0.2759 0.1981 0.2143
虽然不是vcf格式了,但是该有的信息都还在,很容易去gnomAD数据库查询情况,比如:http://gnomad.broadinstitute.org/variant/12-121437382-A-G 相信正常人都可以看出这样的url是有规律的,自己感兴趣的变异位点,可以链接到网站里面查看下详细的信息。
http://gnomad.broadinstitute.org/variant/12-121435427-G-Ahttp://gnomad.broadinstitute.org/variant/12-121437382-A-Ghttp://gnomad.broadinstitute.org/variant/1-13569-C-T
比较重要的信息,就是变异的基因组坐标以及其在不同人群发生的频率咯:
#ChrStartEndRefAltgnomAD_genome_ALLgnomAD_genome_AFRgnomAD_genome_AMRgnomAD_genome_ASJgnomAD_genome_EASgnomAD_genome_FINgnomAD_genome_NFEgnomAD_genome_OTH
人群的全称是:ALL, AFR (African), AMR (Admixed American), EAS (East Asian), FIN (Finnish), NFE (Non-finnish European), OTH (other), SAS (South Asian).
这里值得一提的是,ANNOVAR这个软件提供的 hg19_gnomad_genome.txt
文件,有3亿行,意味着人类几乎10%的位点都被囊括了,而大家看到上面截取的文件内容里面有很多位点,在任何人群里面的发生频率都是0,理论上这样的位点是不需要列出的。在gnomAD数据库里面有12,288,392个位点都是人群频率大于5%,有 281,634,375
是小于5%的。 也就是说人群频率大于5%的位点是少数派,人类这个整体,差异没有我们想象的那么大。
根据人群频率来进行过滤
/public/biosoft/ANNOVAR/annovar/convert2annovar.pl -format vcf4old snp.vcf >snp_input/public/biosoft/ANNOVAR/annovar/convert2annovar.pl -format vcf4old indel.vcf >indel_input/public/biosoft/ANNOVAR/annovar/annotate_variation.pl -filter -dbtype gnomad_genome -buildver hg19 -out snp_filter snp_input /public/biosoft/ANNOVAR/annovar/humandb/ -score_threshold 0.05/public/biosoft/ANNOVAR/annovar/annotate_variation.pl -filter -dbtype gnomad_genome -buildver hg19 -out indel_filter indel_input /public/biosoft/ANNOVAR/annovar/humandb/ -score_threshold 0.05
这种需要进行格式转换的软件我其实不太喜欢用,把标准的vcf文件给转换了,到时候其它下游分析,可能还得转回来,太麻烦了。还是简单给大家看看日志吧,这个也很重要:
NOTICE: Read 3784343 lines and wrote 3784225 different variants at 3784225 genomic positions (3784225 SNPs and 0 indels)NOTICE: Among 3784225 different variants at 3784225 positions, 2200297 are heterozygotes, 1583928 are homozygotesNOTICE: Among 3784225 SNPs, 2535708 are transitions, 1246859 are transversions (ratio=2.03), 1658 have more than 2 allelesNOTICE: Read 754755 lines and wrote 723138 different variants at 754637 genomic positions (0 SNPs and 754637 indels)NOTICE: Among 754637 different variants at 754637 positions, 410912 are heterozygotes, 312226 are homozygotesNOTICE: Among 0 SNPs, 0 are transitions, 0 are transversions (ratio=NA)
对3784343个的SNP位点来说,3353921个因为人群频率大于了0.05会被过滤掉,还剩下430304值得我好好研究一下。
但是,430304个变异位点还是有点多啊!!!!
- 如何告诉手机我是“我”呢?
- 没有任何类型 Windows 的外层实例可访问---Java内部类与外类型
- Hadoop(十二)MapReduce概述
- 安卓第一夜 第一个应用
- spring cloud 学习(1) - 基本的SOA示例
- SVN冲突
- 什么叫微信小程序分销系统?如何通过分销系统来实现你的创业梦
- Hadoop(十一)Hadoop IO之序列化与比较功能实现详解
- 安卓第五夜 维纳斯的诞生
- Eclipse中Project的Deployment Assembly(部署程序集)消失了
- spring-boot 速成(9) druid+mybatis 多数据源及读写分离的处理
- Python标准库14 数据库 (sqlite3)
- spring cloud 学习(4) - hystrix 服务熔断处理
- Hadoop(十)Hadoop IO之数据完整性
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android viewpager自动轮播和小圆点联动效果
- 用Redis构建缓存集群的最佳实践有哪些?
- Android实现IP地址输入框的方法示例代码
- Node.js 搭建 HTTPS 服务器
- Android布局之表格布局TableLayout详解
- 简单实现Android倒计时效果
- Android实现单页面浮层可拖动view的一种方法
- 排查 Node.js 服务内存泄漏,没想到竟是它?
- Android判断网络状态的代码
- Android开发实现布局中为控件添加选择器的方法
- Android控制文本输入框最多输入10个字符长度
- Elasticsearch 内部数据结构深度解读
- 关于 Elasticsearch 段合并,这一篇说透了!
- 解了这十道C语言题,你敢说你精通C语言?
- 微服务中使用Maven BOM来管理你的服务版本