PopGenome包計(jì)算Tajima's D, Fst, Fu Li's F

  1. 讀取文件
library(ape)
library(PopGenome)
# dir_of_gzvcffile=
chr='chr18'
GENOME.class <- readData('FASTA_chr18',format = 'fasta',
                         SNP.DATA=T) ### 這種方式讀取fasta格式的SNPs
pos_data<-read.csv('chr17_W_data.fasta.pos')$Position
GENOME.class <-set.ref.positions(GENOME.class,list(pos_data))
          ##### 并設(shè)置每一個(gè)位點(diǎn)對(duì)應(yīng)的reference position

GENOME.class <- readData('VCF_chr18',format = 'VCF')
             #### 或者這種方式讀取VCF


### 文件都要放在一個(gè)文件夾里,這里的FASTA_chr18是一個(gè)文件夾,里面有一個(gè)fasta文件
  1. 定義sliding window,計(jì)算
GENOME.class@n.sites
GENOME.class@region.names
get.sum.data(GENOME.class)
### 簡(jiǎn)單看一些統(tǒng)計(jì)

GENOME.class <- set.populations(GENOME.class,list(
             c(1:9),
            c(10:17)
           ))
### 根據(jù)文件中的順序定義種群,1-9為一個(gè),10-17為一個(gè)

GENOME.class@region.data@populations
### 看下種群信息


GENOME.class.slide  <- sliding.window.transform(GENOME.class,width=1000,jump=1,type=2,whole.data=TRUE)
#### 使用window 長(zhǎng)度1000,每次step為1,
#### type2的意思是定義的長(zhǎng)度包含非多態(tài)性位點(diǎn),1000就是1000個(gè)核苷酸長(zhǎng)度,甭管里面幾個(gè)SNPs;
#### type=1的意思是定義的長(zhǎng)度只考慮多態(tài)性位點(diǎn),1000就是1000個(gè)SNPs。


GENOME.class.slide@region.names
GENOME.class.slide   <- neutrality.stats(GENOME.class.slide)
GENOME.class.slide  <- F_ST.stats(GENOME.class.slide)
GENOME.class.slide  <- diversity.stats(GENOME.class.slide)
GENOME.class.slide  <- detail.stats(GENOME.class.slide)
GENOME.class.slide@n.sites
### 計(jì)算Fst,中性檢驗(yàn)統(tǒng)計(jì)量

pop1_out_df<-as.data.frame(get.neutrality(GENOME.class.slide)[[1]])
pop2_out_df<-as.data.frame(get.neutrality(GENOME.class.slide)[[2]])
### 我這里兩個(gè)population,分別把種群內(nèi)的中性檢驗(yàn)結(jié)果輸入對(duì)應(yīng)數(shù)據(jù)框

row<-rownames(pop1_out_df)
pop1_out_df$start<-NA
pop1_out_df$end<-NA
pop1_out_df$mid_pos<-NA
pop2_out_df$start<-NA
pop2_out_df$end<-NA
pop2_out_df$mid_pos<-NA
#### 重新標(biāo)定一下window的位置


rowcount=0
for (i in row){
    rowcount=rowcount+1
    start=as.numeric(strsplit(i,split = " - ")[[1]][1])
    end=as.numeric(strsplit(strsplit(i,split = " - ")[[1]][2],split=' :')[[1]][1])
    print(end)
    mid=(start+end)/2
    pop1_out_df$start[rowcount]<-start
    pop1_out_df$end[rowcount]<-end
    pop1_out_df$mid_pos[rowcount]<-mid
    pop2_out_df$start[rowcount]<-start
    pop2_out_df$end[rowcount]<-end
    pop2_out_df$mid_pos[rowcount]<-mid
}
#### 重新標(biāo)定一下window的位置


fst<-data.frame(chr=chr,start=pop1_out_df$start,end=pop1_out_df$end,mid_pos=pop1_out_df$mid_pos,fst=as.data.frame(get.F_ST(GENOME.class.slide))[[2]])
pop1_out_df$chr=chr
pop2_out_df$chr=chr
#### fst單獨(dú)拿出來(lái)構(gòu)建數(shù)據(jù)框,因?yàn)镕st只有種群間的

write.csv(pop1_out_df,paste0(chr,'.1.stats.csv'),row.names=F,quote=F)
write.csv(pop2_out_df,paste0(chr,'.2.stats.csv'),row.names=F,quote=F)
#### 寫入數(shù)據(jù)
  1. 畫圖
pdf(paste0(chr,'.selection.stats.pdf'))
library(ggplot2)
p<-ggplot()+geom_point(data=pop1_out_df,aes(x=mid_pos,y=Tajima.D,color="pop_1"))+
    geom_point(data=pop2_out_df,aes(x=mid_pos,y=Tajima.D,color="pop_2"))
print(p)
p<-ggplot()+geom_point(data=pop1_out_df,aes(x=mid_pos,y=Fu.Li.F,color="pop_1"))+
    geom_point(data=pop2_out_df,aes(x=mid_pos,y=Fu.Li.F,color="pop_2"))
print(p)
p<-ggplot()+geom_point(data=pop1_out_df,aes(x=mid_pos,y=Fu.Li.D,color="pop_1"))+
    geom_point(data=pop2_out_df,aes(x=mid_pos,y=Fu.Li.D,color="pop_2"))
print(p)
p<-ggplot()+geom_point(data=fst,aes(x=mid_pos,y=fst))
print(p)
dev.off()
#### 畫圖

image.png
image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容