gcta计算FST、python绘图

文章介绍了在遗传学研究中如何使用Fst统计量评估不同群体间的遗传分化,并展示了通过PCA处理数据后,对Fst进行筛选和使用PLINK和GCTA工具进行质控和遗传分化计算的方法。同时,文中提供了柱状图和散点图两种可视化Fst分布的方式。
摘要由CSDN通过智能技术生成

实际研究中,Fst为0~0.05:群体间遗传分化很小,可以不考虑;
Fst为0.05~0.15,群体间存在中等程度的遗传分化;
Fst为0.15~0.25,群体间遗传分化较大;
Fst为0.25以上,群体间有很大的遗传分化。

大召唤术

# encoding:UTF-8
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from matplotlib import rcParams
import math
import time
plt.rcParams['font.family']=['cmex10']

使用pca去除品系混合的个体,提取这些个体再做fst

pca_result_fst_法=pca_result_2[pca_result_2[3]>0.0352]
pca_result_fst_丹=pca_result_2[pca_result_2[2]>0.01]
pca_result_fst_加=pca_result_2[(pca_result_2[3]<0.0078)&(pca_result_2[2]<-0.0069)]
pca_result_fst=pd.concat([pca_result_fst_法,pca_result_fst_丹,pca_result_fst_加])
pca_result_fst[['0_x',1,"breed"]].to_csv(r'E:\新希望六和\系谱校正\长白亲缘关系\LL_2304id_3pinxi.txt',index=None,header=None,sep='\t')

使用plink质控,使用gcta计算fst

cd .\长白亲缘关系
plink --bfile all_LL_2423id --keep LL_2304id.txt --make-bed --out LL_2304id
gcta64 --bfile LL_2304id --fst  --autosome-num 36 --sub-popu LL_2304id_3pinxi.txt --out LL_2304id_3pinxi

柱状FST,较慢

def fst_bar(filein):
    data0 = pd.read_csv(open(filein),sep='\s+',header=0)
    # 剔除fst为空、染色体位置未知、性染色体上的位点
    data1=data0[data0['Fst']!='-nan(ind)']
    data2=data1[((data1['Chr']!=0)&(data1['Chr']!=23)&(data1['Chr']!=24))]
    datasort=data2.groupby('Chr',sort = True).apply(lambda x:x.sort_values('bp',ascending=True)).reset_index(drop=True)
    datasort['Fst']=datasort['Fst'].astype(float)
    datasort['Chr']=datasort['Chr'].astype(str)
    #     设置x轴染色体名称
    datasort=datasort.reset_index(drop=True)
    datasort["i"]=datasort.index
    chrom_df = datasort.groupby("Chr")["i"].median()
    # 设置每条染色体颜色
    colordict={'1':'#F08080','2':'#F4A460','3':'#FFD700','4':'#8FBC8F','5':'#228B22','6':'#3CB371','7':'#40E0D0','8':'#008B8B','9':'#AFEEEE',
           '10':'#5F9EA0','11':'#87CEEB','12':'#4682B4','13':'#B0C4DE','14':'#6A5ACD','15':'#9370DB','16':'#E7BBDC','17':'#FFCEDA','18':'#F6A8A5'}
    def func(x):
        return colordict[x['Chr']]
    colorlist = datasort.apply(func,axis=1)
#     横轴显示染色体编号
    chr_list=[1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2, 3, 4, 5, 6, 7, 8, 9]
    print(filein)
    print("Fst均值:",datasort['Fst'].mean())
    a=time.time()
    plt.figure(figsize=(20,5),dpi=80)
    plt.ylim(0,1)
#     箱线图
    plt.bar(np.arange(len(datasort)),datasort['Fst'],1,color=colorlist)
    plt.xticks(chrom_df,labels=chr_list) 
    plt.show()
    b=time.time()
    print(b-a)
    return datasort
filein=r".\长白亲缘关系\LL_2304id_3pinxi.fst"
fst_bar(filein)

image.png

散点图,较快

def fst_scatter(filein):
    data0 = pd.read_csv(open(filein),sep='\s+',header=0)
    # 剔除fst为空、染色体位置未知、性染色体上的位点
    data1=data0[data0['Fst']!='-nan(ind)']
    data2=data1[((data1['Chr']!=0)&(data1['Chr']!=23)&(data1['Chr']!=24))]
    datasort=data2.groupby('Chr',sort = True).apply(lambda x:x.sort_values('bp',ascending=True)).reset_index(drop=True)
    datasort['Fst']=datasort['Fst'].astype(float)
    datasort['Chr']=datasort['Chr'].astype(str)
    #     设置x轴染色体名称
    datasort=datasort.reset_index(drop=True)
    datasort["i"]=datasort.index
    chrom_df = datasort.groupby("Chr")["i"].median()
    # 设置每条染色体颜色
    colordict={'1':'#F08080','2':'#F4A460','3':'#FFD700','4':'#8FBC8F','5':'#228B22','6':'#3CB371','7':'#40E0D0','8':'#008B8B','9':'#AFEEEE',
           '10':'#5F9EA0','11':'#87CEEB','12':'#4682B4','13':'#B0C4DE','14':'#6A5ACD','15':'#9370DB','16':'#E7BBDC','17':'#FFCEDA','18':'#F6A8A5'}
    def func(x):
        return colordict[x['Chr']]
    colorlist = datasort.apply(func,axis=1)
#     横轴显示染色体编号
    chr_list=[1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2, 3, 4, 5, 6, 7, 8, 9]
    print(filein)
    print("Fst均值:",datasort['Fst'].mean())          
    a=time.time()
    plt.figure(figsize=(20,5),dpi=80)
    plt.ylim(0,1)
#     箱线图
    plt.scatter(np.arange(len(datasort)),datasort['Fst'],1,color=colorlist)
    plt.xticks(chrom_df,labels=chr_list) 
    plt.show()
    b=time.time()
    print(b-a)
    return datasort
filein=r".\长白亲缘关系\LL_2304id_3pinxi.fst"
datasort=fst_scatter(filein)

image.png

获取前5%的位点

# 取前5%的位点
datasort['Fst'].quantile(0.95)
fst_quantile5=datasort[datasort['Fst']>0.397559]
fst_quantile5

image.png

# fst前5%的位点的散点图
fst_quantile5=fst_quantile5.reset_index(drop=True)
colordict={'1':'#F08080','2':'#F4A460','3':'#FFD700','4':'#8FBC8F','5':'#228B22','6':'#3CB371','7':'#40E0D0','8':'#008B8B','9':'#AFEEEE',
       '10':'#5F9EA0','11':'#87CEEB','12':'#4682B4','13':'#B0C4DE','14':'#6A5ACD','15':'#9370DB','16':'#E7BBDC','17':'#FFCEDA','18':'#F6A8A5'}
def func(x):
    return colordict[x['Chr']]
colorlist = fst_quantile5.apply(func,axis=1)
#     横轴显示染色体编号
chr_list=[1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 2, 3, 4, 5, 6, 7, 8, 9]
fst_quantile5["i"]=fst_quantile5.index
chrom_df = fst_quantile5.groupby("Chr")["i"].median()
plt.figure(figsize=(20,5),dpi=80)
plt.ylim(0.35,1)
plt.scatter(np.arange(len(fst_quantile5)),fst_quantile5['Fst'],1,color=colorlist)
plt.xticks(chrom_df,labels=chr_list) 
plt.show()

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值