pi, Fst, dxy, fd的计算

pi, Fst, dxy, fd的计算

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

pi, 衡量遗传多样性

Fst, 衡量群体分化程度

dxy, 对核苷酸多样性绝对差异的量度

fd, 对基因流/基因渗入的量度

这里使用 Simon Martin写的脚本,下载here,于Python2的环境下运行。

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

参数解读:

-w 20000指定的窗口大小为20 kb

-s 20000可滑动20 kb

-m 10000请求这些窗口至少覆盖10 kb的位点

-f 指定基因型为phased(A|T)而不是unphased(A/T)

-p 指定群体名

--popsFile 指定一个文件,该文件一行表示一个个体。

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/

相关推荐

手机彩票软件哪个好?彩票软件下载彩票软件排行
bt365账户为什么封

手机彩票软件哪个好?彩票软件下载彩票软件排行

📅 07-21 👁️ 2546
不用烤箱的蛋挞
365betapp

不用烤箱的蛋挞

📅 09-21 👁️ 3202
没有找到站点
365betapp

没有找到站点

📅 07-30 👁️ 2828
PSV破解后如何看视频听音乐
365betapp

PSV破解后如何看视频听音乐

📅 07-25 👁️ 2711
魅族自带软件卸载 快速卸载魅族手机自带软件的方法
bt365账户为什么封

魅族自带软件卸载 快速卸载魅族手机自带软件的方法

📅 08-22 👁️ 5916
ow世界杯中国参赛队伍及比赛时间安排
bt365账户为什么封

ow世界杯中国参赛队伍及比赛时间安排

📅 07-13 👁️ 852
将 CarPlay 车载与 iPhone 搭配使用
365betapp

将 CarPlay 车载与 iPhone 搭配使用

📅 07-31 👁️ 7517