一、转载https://blog.csdn.net/yangl7/article/details/109323644
vcftools --vcf AxiomGT1.calls.vcf --window-pi 1000 --window-pi-step 1000 --out GT1_pi
生成两个文件
GT1_pi.windowed.pi
GT1_pi.log
使用GT1_pi.windowed.p文件通过R进行绘图
library(ggplot2)
data<-read.table("GT1_pi.windowed.pi",header=T)
pdf("pi_result.pdf",width=15,height=3)
p <- ggplot(sc3,aes(x=BIN_END/1000000,y=PI,color='N_VARIANTS')) + geom_line(size=0.5) + xlab("Chromosome1 (Mb)")+ ylab("Pi")
p + theme_bw()
dev.off()
数据的‘N_VARIANTS’应该是有两个因子(1,2),所以实际应该对应两条折线,我也使用过color=‘factor(N_VARIANTS)’,还是只画出了一条线,如果有大神能指点一二我将不胜感激。
二、转载https://zhuanlan.zhihu.com/p/52064863
利用VCFtools计算几个群体遗传学里的参数,然后利用R将结果呈现出来。
Tajima's D计算,
这个是选择相关的一个参数,大于0代表群体观测杂合度高于预期杂合度,稀有等位基因频率降低(群体收缩或者平衡选择),小于0说明群体观测杂合位点少于预期值,稀有等位基因频率增加(群体扩张或者低频选择)。
也就是说,只有0是正常的,其他都是选择发生。
vcftools --vcf 20F.vcf --TajimaD 500000 --out TajimaD
2. π,核苷酸多样性,越大说明核苷酸多样性越高,越低说明两个座位DNA序列差异越小。
vcftools --vcf 20F.vcf --window-pi 500000 --out pi
3. Fst, 分化系数,从0到1说明亲缘关系越来越远。接近于0说明两个个体亲缘关系近,接近1说明亲缘关系远。10number.txt和20number.txt是想要分组的个体文件,每行一个个体,跟vcf中的个体名称一致。
vcftools
--vcf 30results/30results_SNP.vcf --weir-fst-pop 20data/10number.txt
--weir-fst-pop 20data/20number.txt --out 20data/P_VS_Y --fst-window-size
500000
4. Hardy-Weinberg平衡检测,这个主要是检测基因型频率是否等于基因频率乘积。比如A:0.3,a:0.7那么Aa的频率是否为0.42
vcftools --vcf 20data/20F.vcf --hardy --out 20data/HW
library(ggplot2)
mydata<-read.table("TajimaD500K.Tajima.D",header = T) #其他文件只需要换一下名字就好
mydata1<-na.omit(mydata)
ggplot(mydata1, aes(x=BIN_START/1000000,y=TajimaD,group=factor(CHROM),colour=CHROM))+geom_line()+facet_wrap(mydata1$CHROM)+xlab("Physical distance(Mb)")+ylab("Tajima's D")+theme(legend.position = "none")
a<-mydata1[sample(nrow(mydata1), 1000), ] #随机选取其中的1000行数据,这个Hardy-Weinberg平衡文件需要的,因为结果太多,无法利用ggplot绘出全部结果
三、转载https://www.jianshu.com/p/b73a8d6233be
Fst的计算原理与实战
概念回顾
Fst:群体间遗传分化指数,是种群分化和遗传距离的一种衡量方法,分化指数越大,差异越大。适用于亚群体间多样性的比较。
用于衡量种群分化程度,取值从0到1,为0则认为两个种群间是随机交配的,基因型完全相似;为1则表示是完全隔离的,完全不相似。它往往从基因的多样性来估计,比如SNP或者microsatellites(串联重复序列一种,长度小于等于10bp)。是一种以哈温平衡为前提的种群遗传学统计方法。
两个种群之间遗传差异的基本测量是统计量FST。在遗传学中,F一词通常代表“近亲繁殖”,它倾向于减少群体中的遗传变异。遗传变异可以用杂合度来衡量,所以F一般表示群体中杂合性的减少。 FST是与它们所属的总群体相比,亚群体中杂合性的减少量。
具体可以下面的公式表示:
Fst= (Ht-Hs)/ Ht
Hs:亚群体中的平均杂合度
Ht:复合群体中的平均杂合度
理论上计算Fst的步骤
理论上要估算FST,需要以下步骤:
找出每个亚群的等位基因频率。
查找复合群体的平均等位基因频率
计算每个亚群的杂合度(2pq)
计算这些亚群杂合度的平均值,这是HS。
根据总体等位基因频率计算杂合度,这是HT。
最后,计算FST =(HT-HS)/ HT
具体例子
基因SLC24A5是黑色素表达途径的关键部分,其导致皮肤和毛发色素沉着。与欧洲较轻的皮肤色素密切相关的SNP是rs1426654。 SNP有两个等位基因A和G,其中G与轻度皮肤相关,在犹他州的欧裔美国人中,频率为100%。美洲印第安人与美国印第安人混血儿的SNP在频率上有所不同。墨西哥的样本有38%A和62%G;在波多黎各,频率分别为59%A和41%G,查尔斯顿的非裔美国人样本中有19%A和81%G.这个例子中的FST是什么?
手工计算的步骤如下:
在得到每个群体中等位基因的频率后:
首先第一步是计算每个亚群的杂合度H,这一步简单H=2pq (p和q是对应群体中等位基因的频率)
第二步计算这些亚群杂合度的平均值HS,取三个不同种群中的H值,除去平均数3,得到结果
第三步,计算群体等位基因频率,和上述方法类似,取每个等位基因在对应种群中的频率叠加除去平均数。
第四步,计算所有群体中的杂合度HT,使用2pq,p和q是群体中的等位基因频率,在第三步骤已经算好了。
最后,根据计算公式算出Fst。
在实际中,当然不可能用手工对每个位点进行这样的计算,怎样在电脑中分析FST等值,会在下次内容中介绍。
实战
当然了,实际中我们并不需要像上述例子那样逐个计算。等位基因频率的信息都藏在snp calling后的vcf中,再使用恰当的工具就可以快速计算出Fst。下面给大家介绍一种比较popular的计算Fst的方法(还有其他方法不限于一种),使用vcftools:
##对每一个SNP变异位点进行计算
vcftools--vcf test.vcf--weir-fst-pop1_population.txt--weir-fst-pop2_population.txt--outp_1_2—single
##按照区域来计算vcftools--vcf test.vcf--weir-fst-pop1_population.txt--weir-fst-pop2_population.txt--outp_1_2_bin--fst-window-size500000--fst-window-step50000
# test.vcf是SNP calling 过滤后生成的vcf 文件;
# p_1_2_3 生成结果的prefix
# 1_population.txt是一个文件包含同一个群体中所有个体,一般每行一个个体。个体名字要和vcf的名字对应。
# 2_population.txt 包含了群体二中所有个体。
#计算的窗口是500kb,而步长是50kb (根据你的需其可以作出调整)。我们也可以只计算每个点的Fst,去掉参数(--fst-window-size 500000 --fst-window-step 50000)即可。
分别对不同结果进行图形绘制
##图1
library(ggplot2)
data<-read.table("test1.out.windowed.weir.fst",header=T)
sc3=subset(data,CHROM=="Gm01")
p<-ggplot(sc3,aes(x=BIN_END/1000000,y=WEIGHTED_FST))+geom_point(size=0.5,colour="blue")+xlab("Physical distance (Mb)")+ylab("Fst")+ylim(-1,1)
p+theme_bw()
##图2
library(ggplot2)
data<-read.table("test.out.weir.fst",header=T)
sc3=subset(data,CHROM=="Gm01")p<-ggplot(sc3,aes(x=POS,y=WEIR_AND_COCKERHAM_FST))+geom_point(size=0.5,colour="blue")+xlab("Physical distance (Mb)")+ylab("Fst")+ylim(-1,1)
p+theme_bw()
可以看到两幅图还是基本对应的,然后对一些接近1,与大部分点偏离比较高的点可以将其与功能注释相结合,还有一些选择压力分析的工具相结合,寻找出其对应的基因,观察该基因是否是被选择。Pi也是选择分析中一个很要的参数,这一部分内容有时间这一点以后再补回来。
四、转载于https://mp.weixin.qq.com/s?__biz=MzU1NDkzOTk2MQ==&mid=2247485064&idx=1&sn=6a9d4d29d5be747a38c1d4e8a6e6113b&chksm=fbdaa5deccad2cc8602ebc2f587547828a12dc4c6df1f360ff14e6c0628b785cc725ef7e5181&scene=21#wechat_redirect
群体分化指数-Fst
1、进行质控,剔除高缺失率(--geno 0.05)和极低等位基因频率( --maf 0.01 )的SNP
#!/bin/bash
plink=/software/biosoft/software/plink/plink
$plink --vcf 60dog.vcf --geno 0.05 --maf 0.01 --dog --recode vcf-iid --out 60dog_QC
2、这里以TM和YJ为例,计算FST,因为逐个位点计算FST时,可能会出现FST值很高的假阳性信号(中性选择导致),所以这里考虑到搭载效应同时计算了滑窗FST,二者可以对照着看。TM_4500.txt为TM样本ID文件,一行一个ID,YJ_800.txt同左。
这里可以来看下结果文件
单位点:
窗口:
3、可视化
这里使用R包qqman完成曼哈顿图可视化,以窗口结果为例。先处理数据文件格式:
sed "1d" TM_4500vsYJ_800_20k_5k.windowed.weir.fst|awk '{if($5<0)print $1"\t"$2"\t0";else print $1"\t"$2"\t"$5}' > TM_4500vsYJ_800_20k_5k_plot.txt
以下是可视化脚本代码
### 加载要使用的R包
library(qqman)
library(Cairo)
Fstfile<-read.table("TM_4500vsYJ_800_20k_5k_plot.txt", header=F, stringsAsFactors=F)
SNP<-paste(Fstfile[,1],Fstfile[,2],sep = ":")
Fstfile=cbind(SNP,Fstfile)
colnames(Fstfile)<-c("SNP","CHR","POS","Fst")
outfile<-"TM_4500vsYJ_800_20k_5k"
filePNG<-paste(outfile,"manhattan.png",sep=".")
CairoPNG(file=filePNG,width=1500,height=500)
colorset<-c("#FF0000","#FFD700","#2E8B57","#7FFFAA","#6495ED","#0000FF","#FF00FF")
### 调用qqman,画出全部染色体
manhattan(Fstfile),chr="CHR",bp="POS",p="Fst",snp="SNP", col=colorset,logp=F,suggestiveline = F, genomewideline = F,ylab="Fst",ylim=c(0,1),font.lab=4,cex.lab=1.2,main="TMvsYJ",cex=0.8)
### 只绘制单条染色体
if (FALSE){
manhattan(subset(Fstfile,CHR=="10"),chr="CHR",bp="POS",p="Fst",snp="SNP", col=colorset,logp=F,suggestiveline = F, genomewideline = F,ylab="Fst",ylim=c(0,1),font.lab=4,cex.lab=1.2,"TMvsYJ_chr10",cex=0.8)
}
dev.off()
print("==================manhattan plot====================")
可视化结果展示
全部染色体
10号染色体
如果发现更好的教程,后续更新的哦!欢迎一起讨论!