Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >大肠杆菌全基因组重测序变异检测小实例(侧重变异过滤)

大肠杆菌全基因组重测序变异检测小实例(侧重变异过滤)

作者头像
用户7010445
发布于 2020-03-03 07:07:44
发布于 2020-03-03 07:07:44
2K0
举报

本文偏重对vcf文件的探索以及设置过滤标准

原文地址

Filtering and handling VCFs

fastq测序获取数据

未找到原文所用数据,本文使用GATK4.0和全基因组数据分析实践(上)文章中的大肠杆菌基因组作为参考序列,使用wgsim软件模拟生成双端150bp测序数据

代码语言:javascript
AI代码解释
复制
wgsim -N 80000 -1 150 -2 150 ../Reference_genome/ecoli.fa sim_1_reads_R1.fastq sim_1_reads_R2.fastq

wgsim -N 80000 -1 150 -2 150 ../Reference_genome/ecoli.fa sim_2_reads_R1.fastq sim_2_reads_R2.fastq

wgsim -N 80000 -1 150 -2 150 ../Reference_genome/ecoli.fa sim_3_reads_R1.fastq sim_3_reads_R2.fastq

-N指定生成reads的条数 -1 -2生成reads的长度 接下来是参考序列 接下来是fastq文件的名字

使用samtools变异检测获取vcf文件

这一部分参考文章

  • GATK4.0和全基因组数据分析实践(上)
  • Variant calling tutorial

基本流程: bwa比对 samtools变异检测 完整代码

代码语言:javascript
AI代码解释
复制
###构建索引
bwa index Reference_genome/ecoli.fa
bwa mem -t 4 -R '@RG\tID:foo\tSM:sample1' Reference_genome/ecoli.fa sim_reads/sim_1_reads_R1.fastq sim_reads/sim_1_reads_R2.fastq -o output_results/sim_1_aligned.sam
bwa mem -t 4 -R '@RG\tID:foo\tSM:sample2' Reference_genome/ecoli.fa sim_reads/sim_2_reads_R1.fastq sim_reads/sim_2_reads_R2.fastq -o output_results/sim_2_aligned.sam
bwa mem -t 4 -R '@RG\tID:foo\tSM:sample3' Reference_genome/ecoli.fa sim_reads/sim_3_reads_R1.fastq sim_reads/sim_3_reads_R2.fastq -o output_results/sim_3_aligned.sam

这里遇到的问题:

  • -R参数后面接的内容都是什么意思?
  • 学着在shell下写循环
代码语言:javascript
AI代码解释
复制
cd output_results
#SAM装换为BAM
samtools view -S -b -o sim_1_aligned.bam sim_1_aligned.sam 
samtools view -S -b -o sim_2_aligned.bam sim_2_aligned.sam 
samtools view -S -b -o sim_3_aligned.bam sim_3_aligned.sam 
#排序
samtools sort sim_1_aligned.bam -o sim_1_aligned.sorted.bam
samtools sort sim_2_aligned.bam -o sim_2_aligned.sorted.bam
samtools sort sim_3_aligned.bam -o sim_3_aligned.sorted.bam
#索引
samtools index sim_1_aligned.sorted.bam 
samtools index sim_2_aligned.sorted.bam 
samtools index sim_3_aligned.sorted.bam
#变异检测
time samtools mpileup -g -t DP,AD -f ../Reference_genome/ecoli.fa sim_1_aligned.sorted.bam sim_2_aligned.sorted.bam sim_3_aligned.sorted.bam > sim_variants_3sample.bcf

###其一
time bcftools call -v -c sim_variants_3sample.bcf > sim_variants_3sample.vcf
###其二
time bcftools call -f GQ,GP -vmO z sim_variants_3sample.bcf -o sim_variants_3sample_1.vcf.gz

这样就得到了最终的vcf格式的文件。

这里遇到的问题:samtools加上bcftools检测变异的各个参数的含义还不太明白!

接下来重复原文内容

查看vcf文件中检测到多少没有经过过滤的变异
代码语言:javascript
AI代码解释
复制
bcftools view -H sim_variants_3sample.vcf | wc -l
6918

通常获得的vcf文件都比较大,可以通过随机取样的方法获得小的vcf文件用于后续的分析

过滤vcf文件通常考虑四点:

  • Depth 深度(最小深度和最大深度)
  • Quality 质量值(>30)
  • Minor allele frequency 最小等位基因频率(MAF)
  • Missing data 缺失数据(如何过滤缺失数据需要具体情况具体分析,但是位点缺失率大于25%应该被舍弃)
计算等位基因频率
代码语言:javascript
AI代码解释
复制
cd ../
mkdir vcf_handling
cd vcf_handling
vcftools --vcf ../output_results/sim_variants_3sample.vcf --freq2 --out sim_variant_AF
计算每个个体的平均深度
代码语言:javascript
AI代码解释
复制
vcftools --vcf ../output_results/sim_variants_3sample.vcf  --depth --out sim_variant_depth
计算每个变异位点的平均深度
代码语言:javascript
AI代码解释
复制
vcftools --vcf ../output_results/sim_variants_3sample.vcf --site-mean-depth --out sim_variant_sitedepth
计算位点平均质量值
代码语言:javascript
AI代码解释
复制
vcftools --vcf ../output_results/sim_variants_3sample.vcf --site-quality --out sim_variant_sitequality
计算每个个体数据缺失率
代码语言:javascript
AI代码解释
复制
vcftools --vcf ../output_results/sim_variants_3sample.vcf --missing-indv --out sim_variant_missingindv

将以上获得的五个文件导出到本地电脑,利用R语言进行可视化展示

五个文件分别是

代码语言:javascript
AI代码解释
复制
sim_variant_missingindv.imiss
sim_variant_sitequality.lqual
sim_variant_sitedepth.ldepth.mean
sim_variant_depth.idepth
sim_variant_AF.frq
查看位点质量值分布
代码语言:javascript
AI代码解释
复制
setwd("../../vcf_handling/")
library(tidyverse)
var_qual<-read_delim("sim_variant_sitequality.lqual",
                     delim="\t",
                     col_names=c("chr","pos","qual"),
                     skip=1)
library(ggplot2)
a<-ggplot(var_qual,aes(qual))+
  geom_density(fill="dodgerblue1")+
  theme_light()
a1<-a+xlim(0,100)
library(ggpubr)
ggarrange(a,a1,ncol=1,nrow=2)

image.png 从上图可以看出我们的位点质量值是偏低的,因为数据量比较小,位点质量值30代表检测出来的变异有千分之一的可能是错误的,推荐过滤变异的时候设置位点质量值大于30。

变异位点的平均深度
代码语言:javascript
AI代码解释
复制
summary(var_depth$mean_depth)
var_depth<-read_delim("sim_variant_sitedepth.ldepth.mean",
                      delim="\t",col_names=c("chr","pos","mean_depth","var_depth"),
                      skip=1)
a<-ggplot(var_depth,aes(mean_depth))+
  geom_density(fill="dodgerblue1",color="black",alpha=0.3)+
  theme_light()
a

image.png 覆盖度的最小值设置(We could set our minimum coverage at the 5 and 95% quantiles这句话暂时还没看懂是什么意思!) 覆盖度最大值的设置:推荐设置为平均深度的两倍(Usually a good rule of thumb is something the mean depth * 2, so in this case we could set our maximum depth at 40x)

平均缺失率
代码语言:javascript
AI代码解释
复制
INDV    N_DATA  N_GENOTYPES_FILTERED    N_MISS  F_MISS
sample1 6918    0       0       0
sample2 6918    0       0       0
sample3 6918    0       0       0

本次分析中的缺失率都为0,暂时还没想到是什么原因

最小等位基因频率
代码语言:javascript
AI代码解释
复制
var_freq<-read_delim("sim_variant_AF.frq",delim="\t",
                     col_names=c("chr","pos","nalleles","nchr","a1","a2"),skip=1)
var_freq
var_freq$maf<-var_freq%>%
  select(a1,a2)%>%
  apply(1,function(z) min(z))
a<-ggplot(var_freq,aes(maf))+
  geom_density(fill="dodgerblue1",alpha=0.3)+
  theme_light()
a

image.png 这部分的解释自己还没有太看懂,留待后续分解

根据位点质量值和测序深度过滤我们的vcf文件

代码语言:javascript
AI代码解释
复制
vcftools --vcf ../output_results/sim_variants_3sample.vcf --minQ 30 --min-meanDP 4 --max-meanDP 10 --minDP 4 --maxDP 10 --recode --stdout | gzip -c > sim_variants_filtered.vcf

参数含义: --vcf or --gzvcf输入未过滤的vcf文件 --minQ位点质量值 --min-meanDP位点最小平均深度 --max-meanDP位点最大平均深度 minDP the minimum depth allowed for a genotype maxDPthe maximum depth allowed for a genotype

剩下多少个变异
代码语言:javascript
AI代码解释
复制
bcftools view -H sim_variants_filtered.vcf.gz | wc -l
2212

过滤掉了将近三分之二

这样一次完整的变异检测流程就完成了,当然这其中还有好多细节部分的知识点需要学习!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前缀和与差分数组(附练习题)
题目: 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l, r。 对于每个询问,输出原序列中从第l个数到第r个数的和。
全栈程序员站长
2022/08/30
5250
前缀和与差分数组(附练习题)
算法基础(四)| 前缀和算法及模板详解
1≤l≤r≤n, 1≤n,m≤100000 −1000≤数列中元素的值≤1000
timerring
2022/09/27
6050
算法基础(四)| 前缀和算法及模板详解
差分算法及模板详解
然后构造数组b,b[1],b[2]…b[n]为差分数组。其中通过差分数组的前缀和来表示a数组,即a[n] = b[1] + b[2]+…+b[n]。
timerring
2023/05/24
1.1K0
差分算法及模板详解
算法基础(五)| 差分算法及模板详解
然后构造数组b,b[1],b[2]…b[n]为差分数组。其中通过差分数组的前缀和来表示a数组,即a[n] = b[1] + b[2]+…+b[n]。
timerring
2022/10/28
1.5K0
算法基础(五)| 差分算法及模板详解
前缀和算法练习集
前六个测试点满足 1≤n≤10。 所有测试点满足 1≤n≤10^5,0−10000≤a_i≤1000。
timerring
2023/03/27
4670
前缀和算法练习集
【算法/学习】前缀和&&差分
差分数组的好处是可以简化运算,例如想要给一个区间 [l,r] 上的数组加一个常数c,原始的方法是依次加上c,这样的时间复杂度是O(n)的。但是如果采用差分数组的话,可以大大降低时间复杂度到O(1)。
IsLand1314
2024/10/15
3430
【算法/学习】前缀和&&差分
1. 基础算法初识
逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。
浪漫主义狗
2022/07/11
5180
1. 基础算法初识
【简单】差分矩阵
输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c ,其中 (x1,y1),(x2,y2) 是一个子矩阵的左上角和右下角坐标。每个操作都要将选中的子矩阵中的每个元素加 c 。请你将进行完所有操作后的矩阵输出。
字节星球Henry
2021/08/09
1.3K0
【算法专题】前缀和
题目:给定一个长度为n的数组 a1​, a2​, …an. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出 al + al + 1 + … + ar
YoungMLet
2024/03/01
2740
【算法专题】前缀和
基础算法篇——前缀和与差分
基础算法篇——前缀和与差分 本次我们介绍基础算法中的前缀和与差分,我们会从下面几个角度来介绍前缀和与差分: 前缀和介绍 一维前缀和 二维前缀和 差分介绍 一维差分 二维差分 前缀和介绍 首先我们来简单介绍一下前缀和: 我们首先定义一个长度为n的数组,然后我们希望求这个数组的部分长度的总和 如果正常采用我们的for循环来遍历一遍的话: 复杂度为O(n) 这时如果我们提前将这些数据保存起来,在多次查询时就会方便很多: 我们将数组的第i个值定义为ai 我们将数组的前n个值的和定义为Sn 其实就是类似于我们数学上的
秋落雨微凉
2022/11/16
3880
算法基础学习笔记——④前缀和\差分\双指针\位运算
前缀和:s[i]=a[1]+a[2]+…+a[i] s[0]=0(方便处理边界问题)
命运之光
2024/03/20
2200
算法基础学习笔记——④前缀和\差分\双指针\位运算
一篇带你速通差分算法(C/C++)
差分算法是一种在计算机科学中常用的算法,特别是在处理序列数据时,它可以帮助我们快速计算出序列中相邻元素的差值。时间复杂度可以达到O(1),在C++中实现差分算法不仅可以提高程序的效率,还可以简化代码的复杂度。本文将详细介绍差分算法的原理、C++实现方法以及算法例题。
摆烂小白敲代码
2024/09/23
7700
一篇带你速通差分算法(C/C++)
前缀和、二维前缀和与差分的小总结
如果我给你一串长度为n的数列a1,a2,a3......an,再给出m个询问,每次询问给出L,R两个数,要求给出区间[L,R]里的数的和,你会怎么做,若是没有了解过前缀和的人看到这道题的想法可能是对于m次询问,我每次都遍历一遍它给的区间,计算出答案,这样子的方法固然没错,但是其时间复杂度达到了O(n*n),如果数据量稍微大一点就有可能超时,而我们如果使用前缀和的方法来做的话就能够将时间复杂度降到O(n+m),大大节省了运算时间。至于怎么用,请看下面一小段代码
ACM算法日常
2019/07/05
2.7K0
前缀和,差分
前缀和:什么是前缀和,顾名思义前面数字的和嘛,对于一组数据,a1,a2,a3,a4,……an 1到4的前缀和就是a1+a2+a3+a4. 3到7的前缀和就是a3+a4+a5+a6+a7. 前缀和解释完毕。如果用s集合表示前缀和,下标i表示1到i的前缀和,那么s[i]=s[i-1]+a[i]. 二维前缀和: s[i][j]表示第i行,第j列的前缀和,第i行和第j列包含的左上角的加起来的和就是前缀和,如图:红色的部分就是前缀和了。
code-child
2023/05/30
3890
前缀和,差分
一篇带你速通前缀和算法(C/C++)
前缀和是一种常见的算法计算技巧,通常用于处理数组或序列的连续子区间求和问题。它可以帮助我们在 O(1) 的时间内计算出指定子区间的和,而不需要每次都遍历整个子区间。前缀和一般用于预处理当中,具有高效率的特点。
摆烂小白敲代码
2024/09/23
4360
一篇带你速通前缀和算法(C/C++)
深度解析算法之前缀和
这个题的话就是下面的样子,我们第一行输入 3 2的意思即是这个数组是3个元素大小的数组,2是接下来我们是需要输入两行数据下标的 然后第二行我们输入的n个整数表示的就是我们数组中的元素 然后后面的2行就是我们想计算数组中从哪里到哪里的和 这里的话我们是第一个数到第二个数的和,那么我们这里的就是3了
Undoom
2025/04/21
1600
深度解析算法之前缀和
【C++例题/训练】:前缀和&&差分
前面我们已经通过 【算法/学习】前缀和&&差分-CSDN博客 学习了前缀和&&差分的效相关知识,现在我们开始进行相关题目的练习吧
IsLand1314
2024/10/15
2170
【C++例题/训练】:前缀和&&差分
一维 二维求前缀和、差分
用户10604450
2024/03/15
1590
前缀和与差分 Krains 2020-07-28 16:05:15
s[i]=a[0]+a[1]+a[2]+...+a[i−1]s[i] = a[0]+a[1]+a[2]+...+a[i-1]s[i]=a[0]+a[1]+a[2]+...+a[i−1]
Krains
2020/08/05
3350
我爱学算法之—— 前缀和(上)
通过上图,我们可以发现:我们要求的[l , r]区间的和s就等于区间[1 , r]的和 减去区间[1 , l]的和。
星辰与你
2025/06/08
1380
我爱学算法之—— 前缀和(上)
相关推荐
前缀和与差分数组(附练习题)
更多 >
LV.0
UCloud后台开发工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场