开始正文之前先了解一下为什么构建群体遗传结构是重要的,并且可以通过哪些方式构建此结构:

对于方法1,我们需要使用Plink构建PCA图

(1) 首先使用plink将vcf格式文件转换成.bed , .bim , .fam文件, 操作如下:

plink --allow-extra-chr -vcf XXX.vcf --make-bed --out filtered_XXX && echo "vcf2bed is done"

(2) 使用plink进行主成分分析,操作如下:

plink -bfile filtered_XXX --allow-extra-chr --pca 10 --out PCA_filtered_snps

产生了两个eigenval eigenvec文件,之后开始绘制PCA散点图,可以使用python脚本进行绘制,代码如下:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

'''绘制PCA散点图'''

import matplotlib.pyplot as plt

import collections

import re

hash = collections.OrderedDict()

eval_file = open("PCA_filtered_snps.eigenval","r")

evec_file = open("PCA_filtered_snps.eigenvec","r")

### 从.eval文件中读取top2主成分

eval_1 = eval_file.readline()

eval_2 = eval_file.readline()

### 从.evec文件中读取在pc上的值,之所以使用re,是因为我的样本名是种+数字编号,例如“PTE01”,但我需要根据种进行聚类,所以使用r'[0-9]+|[A-Za-z]+'进行提取,这一次大家可以自行修改

for i in evec_file:

if re.match(r'#',i.strip()):

continue

tmp = i.strip().split()[1:]

if tmp[-1] in hash.keys():

hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]]['1st'].append(eval(tmp[1]))

hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]]['2nd'].append(eval(tmp[2]))

else:

hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]] = hash.get(re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0],collections.OrderedDict())

hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]]['1st'] = hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]].get('1st',[])

hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]]['2nd'] = hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]].get('2nd',[])

hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]]['1st'].append(eval(tmp[1]))

hash[re.findall(r'[0-9]+|[A-Za-z]+',tmp[0])[0]]['2nd'].append(eval(tmp[2]))

### 绘制散点图

fig = plt.figure(figsize=(12,10))

ax = fig.add_subplot(1, 1, 1) ### 2D figure

#ax = fig.add_subplot(111,projection='3d') ### 3D figure

mark = ['o','v']*10 ### 设置散点性状

col = ['blue','lime','y','red','cyan','fuchsia','orange']*2 ### 设置散点颜色

for m,n in enumerate(hash.keys()): ### 逐点画出

ax.scatter(hash[n]['1st'],hash[n]['2nd'],c=col[m],s=75,marker=mark[m],label=n,alpha=0.7)

ax.legend(loc='best',scatterpoints=1,fontsize='12',framealpha=0)

ax.set_xlabel('PC 1 ({}%)'.format(float('%.2f' % eval(eval_1))),fontsize=13,fontweight='bold')

ax.set_ylabel('PC 2 ({}%)'.format(float('%.2f' % eval(eval_2))),fontsize=13,fontweight='bold')

#### 保存图片

save_FileName = 'PCA_filtered_snps_pc1_pc2.png'

plt.savefig(save_FileName,dpi=400,bbox_inches='tight')

结果如下:

可见pil一类,ppr和peu一类,pte,ptre比较接近,剩下的聚成了一类。

对于方法2,我们使用Admixture构建进化关系

首先交叉验证选择最优的K值:

for K in 10 11 12 13 14 15; do admixture --cv filtered_XXX.bed $K | tee admixture_log${K}.out; done

结果如下:

CV error (K=10): 0.20719

CV error (K=11): 0.17233

CV error (K=12): 0.18846

CV error (K=13): 0.22279

CV error (K=14): 0.26081

CV error (K=15): 0.26839

因此选择K=11 is a sensible modeling choice。选择filtered_snps.11.Q作图,结果如下:

通过Ancestry的结果,可以分成三类:

第一类:ppr

第二类:pang, plas, pnig, plua

第三类:pde, pfre

第四类:ptr

第五类:ptre, pte

第六类:pba

第七类:peu

第八类:pil

作图代码:

1.tbl = read.table("filtered_XXX.11.Q")

2.barplot(t(as.matrix(tbl)),col=rainbow(11),xlab="Individual #",ylab="Ancestry",border=NA)

对于方法3,我们使用phylip和MEGA构建进化关系

首先需要将VCF格式转换成phylip所需的格式

python vcf2phylip.py -i XXX.vcf -o XXX.phy

之后使用MEGA将phy转换成meg格式

之后使用MEGA X建树,参数如下:

(No. of Bootstrap Replications开太多了会严重影响运行速度,开到100-500就可以)

在群体遗传里面,使用邻接法建树最好

等待建树:

结果如下:

根据此结果,结合上述两种方法得到的结果,我们最终可以分成四类:

第一类:pil

第二类:peu, ppr

第三类:pte, ptre

第四类:plas, pnig, pdel, pfre, pang, plau, pba, ptr

pythonnet plink_群体遗传结构构建软件--Plink, admixture, phylip, MEGA总结相关推荐

  1. 重测序群体遗传进化分析之进化树构建

    tree 重测序大家都不陌生,它是检测样本基因组变异(SNP,indel,SV,CNV)的主要手段之一,有了这些变异信息,后续可以做很多分析工作,例如: 遗传群体可以进行遗传图谱构建.BSA分析等:大 ...

  2. 人类大脑皮层折叠的遗传结构

    摘要 人类大脑皮层的折叠是一个高度基因调控的过程,它使得我们的颅顶能够容下一个拥有一个更大的表面积的大脑并优化功能组织.脑沟深度是一种可靠但尚未得到充分研究的局部大脑折叠的测量方法,在以往研究中被认为 ...

  3. 派森诺群体遗传进化专题之进化树

    导读 岁岁年年花相似,细细推敲,实则年年岁岁花不同.人类进化历程中,万事万物都在悄然的变化着,这积沙成塔的量到质的跳跃,正是无数科研人员孜孜以求的方向–群体进化. 群体进化研究是指通过获得某物种自然群 ...

  4. 基于高通量表型的QTL定位揭示了甘蓝型油菜耐盐胁迫的遗传结构

    基于高通量表型的QTL定位揭示了甘蓝型油菜耐盐胁迫的遗传结构 #公众号:作物表型记录本 原文链接:点击此处,阅读原文 摘要: 对3种不同盐胁迫条件下的自然群体和9种不同胁迫条件下的品种间代换系群体的2 ...

  5. Open-E DSS V7 应用系列之六 构建软件iSCSI

    续Open-E DSS V7 应用系列之五 构建软件NAS 一.iSCSI简介 iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SC ...

  6. 统计遗传学:第三章,群体遗传

    3. 群体遗传 大家好,我是飞哥. 前几天推荐了这本书,可以领取pdf和配套数据代码.这里,我将各个章节介绍一下,总结也是学习的过程. 引文部分是原书的谷歌翻译,正文部分是我的理解. 第一部分基础,分 ...

  7. 群体遗传,进化分析利器Popgene分享给大家

    Popgene分析方法: SSR为显性分子标记,故将实验分析数据作为单倍型数据进行统计,在某一位点上依据条带的有或无分别记为1或0,输入Excel表中形成二元数据矩阵.在此数据基础上进行如下统计分析: ...

  8. revit 2021 r2(3D建筑信息模型构建软件)pjb 附安装教程

    revit 2021pjb​​​​​​​全称autodesk revit 2021 r2,是由欧特克公司最新研发的一款3D建筑信息模型构建软件,为用户提供了衍生式设计.参数化构件.工作共享.互操作性和 ...

  9. 群体遗传 | haplotype block | HaploBlocker使用

    HaploBlocker是分析单条染色体haplotype blocks,这也很容易理解,haplotype block是同一条染色体的某些区域.因此,分析时,需要按染色体或者Scaffold切分VC ...

最新文章

  1. Android Dialog 弹框之外的区域 默认透明背景色修改
  2. 一元操作符和使用Number()方法的区别
  3. Oracle的存储过程和存储函数
  4. SparkSQL中UDAF案例分析
  5. Python html 代码转成图片、PDF
  6. NLP 《分词方法》
  7. ORA-01157 无法标识锁定数据文件的解决方法
  8. 剑指offer面试题[8]-旋转数组的最小数字
  9. 医院职工离职申请证明模板,共计10篇
  10. xampp 可道云_利用xampp+可道云KodExplorer本地搭建私有云
  11. AxureRP8.1(注册码)破解汉化教程
  12. 手机html5跑分,吊炸天的Chrome55内核来袭 360手机浏览器成“跑分王”
  13. PCIe扫盲——基于WinDriver快速开发PCIe驱动简明教程
  14. 北京儿研所自制药一览表,宝妈们必读!转
  15. 51单片机——外部中断
  16. 中国农业生物多样性危机-农业大健康·蒋高明:谋定生态安全
  17. 2023年西安交通大学管理学院MPAcc提前批面试网报通知
  18. [matlab]matlab cftool点了没反应
  19. Java 程序获取本机 ip 地址
  20. 君子剑,怎样炼成?——再再谈岳不群

热门文章

  1. VIM的一种配色方案(Solarized Colorscheme for Vim)
  2. html省市插件,省市县插件PCASClass.js
  3. CAD入门基本操作命令
  4. 【电机控制不得不学习的干货:】 飞思卡尔MCU正交编/解码器模块
  5. ImportError: libiconv.so.2: cannot open shared object file: No such file or directory
  6. 俄罗斯IT亿万富翁Yuri Milner设立基础物理学奖 奖金远超诺贝尔奖
  7. 用networkx、igraph实现社区发现——LPA(标签传播算法)
  8. PYTHON爬虫——必应图片关键词爬取
  9. java可以制作动画么,Java:如何避免仅制作形状的动画(没有图像...
  10. 【DIY】简单又便宜的方法自制温湿度计,arduino温湿度计