群体遗传学习小组群体遗传学群体遗传

pi, Fst, dxy, fd的计算

2021-04-19  本文已影响0人  DumplingLucky

有许多不同的统计量可以衡量差异选择的区域或基因渗入障碍的区域。这里介绍常用的四个统计量的计算:

1. 计算每个物种的pi以及每对物种的Fst和dxy

#转换vcf文件为Simons格式geno.gz
parseVCF.py -i subset.vcf.gz | bgzip > subset.geno.gz

popgenWindows.py -g subset.geno.gz -o subset.Fst.Dxy.pi.csv.gz \
   -f phased -w 20000 -m 10000 -s 20000 \
   -p PundPyt -p NyerPyt -p NyerMak -p PundMak -p kivu 64253 \
   --popsFile pop.info

参数解读:

2. 计算fd:

我们测试从群体Pundamilia nyererei(NyerMak)到群体P.sp.的渗入。以基伍湖丽鱼科鱼(NyerPyt)为外群。

ABBABABAwindows.py -w 20000 -m 10 -s 20000 -g subset.geno.gz \
   -o subset.fd.PundP.NyerP.NyerM.Kivu.csv.gz \
   -f phased --minData 0.5 --writeFailedWindow \
   -P1 PundPyt -P2 NyerPyt -P3 NyerMak -O kivu \
   --popsFile pop.info

参数:-T可以指定多线程运行。

3. 画图

rm(list = ls())
#读取通过滑动窗口计算得到的 FST, pi 和 dxy
windowStats<-read.csv("./genome_scan/Pundamilia_kivu_div_stats.csv",header=T)
#大体看一眼数据
names(windowStats)
length(windowStats$scaffold)
#添加染色体的长度信息
chrom<-read.table("./genome_scan/chrEnds.txt",header=T)
chrom$add<-c(0,cumsum(chrom$end)[1:21])

windowStats$mid<-windowStats$mid+chrom[match(windowStats$scaffold,chrom$chr),3]

#读取fd输出文件
fd<-read.delim(file = "./genome_scan/Pundamilia_ABBABABA.csv",sep=",",header=T,na.strings = "NaN")

#去除没有位点的窗口
fd<-fd[!is.na(fd$mid),]

#添加位置信息
fd$mid<-fd$mid+chrom[match(fd$scaffold,chrom$chr),3]

#画基因组分布图
par(mfrow=c(2,1),oma=c(3,0,0,0),mar=c(1,5,1,1))

#Fst: Makobe Island
plot(windowStats$mid,windowStats$Fst_NyerMak_PundMak,cex=0.5,pch=19,xaxt="n",
     ylab="Fst Makobe",ylim=c(0,1),col=windowStats$scaffold)
abline(h=mean(windowStats$Fst_NyerMak_PundMak,na.rm=T),col="grey")

#Fst: Python Island
plot(windowStats$mid,windowStats$Fst_PundPyt_NyerPyt,cex=0.5,pch=19,xaxt="n",
     ylab="Fst Python",ylim=c(0,1),col=windowStats$scaffold)
abline(h=mean(windowStats$Fst_PundPyt_NyerPyt,na.rm=T),col="grey")

axis(1,at=chrom$add+chrom$end/2,tick = F,labels = 1:22)

#Dxy: Makobe Island
plot(windowStats$mid,windowStats$dxy_NyerMak_PundMak,cex=0.5,pch=19,xaxt="n",
     ylab="dxy Makobe",ylim=c(0,0.03),col=windowStats$scaffold)
abline(h=mean(windowStats$dxy_NyerMak_PundMak,na.rm=T),col="grey")

#Dxy: Python Island
plot(windowStats$mid,windowStats$dxy_PundPyt_NyerPyt,cex=0.5,pch=19,xaxt="n",ylab="dxy Python",ylim=c(0,0.03),col=windowStats$scaffold)
abline(h=mean(windowStats$dxy_PundPyt_NyerPyt,na.rm=T),col="grey")
#fd
plot(fd$mid,fd$fdM,cex=0.5,pch=19,xaxt="n",
     ylab="fdM",ylim=c(0,1),col=windowStats$scaffold)
abline(h=mean(fd$fdM,na.rm=T),col="grey")

axis(1,at=chrom$add+chrom$end/2,tick = F,labels = 1:22)

###############################--------探索性统计---------############################
#dxy和fst相关性
par(mfrow=c(1,1),mar=c(5,5,1,1),oma=c(1,1,1,1))

plot(windowStats$dxy_NyerMak_PundMak,windowStats$Fst_NyerMak_PundMak,
     xlab="dxy",ylab="Fst",pch=19,cex=0.3)
#忽略异常值
plot(windowStats$dxy_NyerMak_PundMak,windowStats$Fst_NyerMak_PundMak,
     xlab="dxy",ylab="Fst",pch=19,cex=0.3,xlim=c(0,0.01))

#dxy是否与pi相关
plot(rowMeans(cbind(windowStats$pi_PundMak,windowStats$pi_NyerMak),na.rm=T),
     windowStats$dxy_NyerMak_PundMak,cex=0.3,
     xlab="pi",ylab="dxy")
abline(a=0,b=1,col="grey")

参考:https://speciationgenomics.github.io/sliding_windows/

上一篇下一篇

猜你喜欢

热点阅读