因为全基因组复制(Whole genome duplications, WGD)是生物进化的重要因素之一, 所以WGD分析也是基因组分析经常用到的一种分析方法。举个例子,我们之所以能在多条染色体之间发现一些古老基因连锁现象,是因为被子植物在过去2亿年时间里就出现了多次的全基因组复制和基因丢失事件(见下图,Tang et al., 2008)

古老WGD检测有两种方法,一种是共线性分析,另一种则是根据Ks分布图。其中Ks定义为平均每个同义位点上的同义置换数,与其对应的还有一个Ka,指的是平均每个非同义位点上的非同义置换数。

如果没有WGD或是大片段重复,那么基因组中的旁系同源基因的同义置换符合指数分布(exponential distribution), 反之,Ks分布图中就会出现一个由于WGD导致的正态分布峰(normal distributed peak). 而古老WGD的年龄则可通过分析这些峰中的同源置换数目来预测(Tiley et al., 2018)。

以发表在Science上的_Papaver somniferum_ L. 基因组文章中的图Fig 1C为例,文章分别分析了_P. somniferum_ 和其他几个物种的Ks分布。从Ks分布图可以看到_P. somniferum_经历了一次比较近的WGD事件(Guo et al., 2018)。

文章中关于WGD的分析流程参考附录8.1 Whole genome duplication in opium poppy genome, 我总结了关键的几点

  • 使用megablast进行自比对,寻找基因组中共线性的区块
  • 使用BLASTP基于RBH( reciprocal best hits )进行蛋白之间的相互比对
  • 使用KaKs_Calculator基于YN模型计算RBH基因对中的Ks(synonymous substitution rate)
  • 为了区分Ks中peak是WGD事件还是小规模重复,作者使用MCScanX进行共线性分析,发现93.9%的RBH基因都是基因组内共线性

目前WGD的分析流程也有人发了文章,我通过关键字"wgd pipeline"搜索找到了如下几个:

  • GenoDup: https://github.com/MaoYafei/GenoDup-Pipeline
  • WGDdetector: https://github.com/yongzhiyang2012/WGDdetector
  • wgd: https://github.com/arzwa/wgd

这一篇介绍的是wgd的用法。

软件安装

wgd目前无法用bioconda直接安装,所以安装起来稍显麻烦,这是因为它的依赖软件有点多。wgd依赖于以下软件

  • BLAST
  • MCL
  • MUSCLE/MAFFT/PRANK
  • PAML
  • PhyML/FastTree
  • i-ADHoRe

但是好消息是它依赖的软件大部分都可以用bioconda进行安装

conda create -n wgd python=3.5 blast mcl muscle mafft prank paml  fasttree cmake libpng mpi=1.0=mpich
conda activate wgd

这里选择了mpi=1.0=mpich, 原因是i-adhore依赖于mpich. 如果安装了openmpi就会出现error while loading shared libraries: libmpi_cxx.so.40: cannot open shared object file: No such file or directory

之后的安装就简单多了

git clone https://github.com/arzwa/wgd.git
cd wgd
pip install .
# 或者一行命令
pip install git+https://github.com/arzwa/wgd.git

对于i-ADHoRe,需要先在http://bioinformatics.psb.ugent.be/webtools/i-adhore/licensing/同意许可,才能下载i-ADHoRe-3.0

由于我的miniconda3安装在~/opt/下,所以安装路径为~/opt/miniconda3/envs/wgd/

tar -zxvf i-adhore-3.0.01.tar.gz
cd i-adhore-3.0.01
mkdir -p build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=~/opt/miniconda3/envs/wgd/
make -j 4
make insatall

软件介绍

WGD一共有9个子模块

  • kde: 对Ks分布进行KDE拟合
  • ksd : Ks分布构建
  • mcl:All-vs-ALl的BLASP比对 + MCL分类分析.
  • mix: Ks分布的混合建模.
  • pre: 对CDS文件进行预处理
  • syn: 调用I-ADHoRe 3.0利用GFF文件进行共线性分析
  • viz: 绘制柱状图和密度图
  • wf1: 全基因组旁系同源基因组(paranome)的Ks标准分析流程,调用mcl, ksd和syn
  • wf2: one-vs-one 同源基因(ortholog)的Ks标准分析流程,调用wcl和ksd

流程示意图如下:

使用方法

以甘蔗的基因组 Saccharum spontaneum L 为例,基因组为8倍体,共32条染色体(2n = 4x8 = 32)

下载CDS和GFF注释文件 tutorial

mkdir -p wgd_tutorial && cd wgd_tutorial
wget http://www.life.illinois.edu/ming/downloads/Spontaneum_genome/Sspon.v20190103.cds.fasta.gz
wget http://www.life.illinois.edu/ming/downloads/Spontaneum_genome/Sspon.v20190103.gff3.gz
gunzip *.gz

先用conda activate wgd启动我们的分析环境,然后就开始分析了

第一步: 使用wgd mcl鉴定基因组内的同源基因

wgd mcl -n 20 --cds --mcl -s Sspon.v20190103.cds.fasta -o Sspon_cds.out
# -n: 线程
# --cds: 输入为cds
# --mcl: mcl聚类

这一步运行过程中,wgd会先检查cds序列是否有效,也就是是否以ATG(起始密码子)开头,且以TAA/TAG/TGA(终止密码子)结尾,然后将cds转成氨基酸序列,之后用Blastp进行相互比对,然后根据blastp结果用mcl聚类的方式寻找旁系同源基因。

输出结果在Sspon_cds.out,有两个结果输出

  • blast.tsv: BLASTP的outfmt6输出结果
  • blast.tsv.mcl: MCL聚类结果,每一行可以认为是一个基因家族(gene family)

第二步: 使用wgd ksd构建Ks分布

wgd ksd --n_threads 80 Sspon_cds.out/Sspon.v20190103.cds.fasta.blast.tsv.mcl Sspon.v20190103.cds.fasta

这一步也是先过滤cds中的无效数据,然后用mafft(默认)/muscle/prank对每个基因家族进行多重序列联配,用codeml计算dN/dS, 用alc/fasttree(默认)/phyml建树

输出结果在wgd_ksd目录下

  • ks.tsv: 每个基因家族中基因对的各项统计,其中包括Ka和Ks
  • ks.svg: Ks分布,见下图

第三步: 如果基因组质量不错,那么可以使用wgd syn进行共线性分析。它能帮我们找到基因组内的共线性区块,以及相应的锚定点

wgd syn --feature gene --gene_attribute ID -ks wgd_ksd/Sspon.v20190103.cds.fasta.ks.tsv Sspon.v20190103.gff3 Sspon_cds.out/Sspon.v20190103.cds.fasta.blast.tsv.mcl
#--feature: 从第三列选择特征
#--gene_attribute: 从第九列提取编号

输出图片以.svg结尾,如下所示,图中颜色红蓝代表Ks得分。

Ks的下游分析通常还包括对Ks分布的统计建模,这可以使用wgd kde进行核密度拟合(Kernel density estimate, KDE)或用wgd mix建立高斯混合模型(Gaussian mixture models)

# KDE
wgd kde wgd_ksd/Sspon.v20190103.cds.fasta.ks.tsv
# Gaussian
wgd mix wgd_ksd/Sspon.v20190103.cds.fasta.ks.tsv

wgd kde输出kde.svg, 而wdg mix则生成一个 wgd_mix文件夹。

混合模型常用于基于Ks分布研究WGD。基于一些基本的分子进化假设,我们预期Ks分布中由WGD导致的peak应该符合高斯分布,能够用log-normal分布近似。但是考虑到混合模型容易过拟合,特别是Ks分布,因此作者不建议使用混合模型作为多次WGD假设的正式统计测试。

参考文献

Tang, H., Bowers, J.E., Wang, X., Ming, R., Alam, M., and Paterson, A.H. (2008). Synteny and Collinearity in Plant Genomes. Science 320, 486–488.

Tiley, G.P., Barker, M.S., and Burleigh, J.G. (2018). Assessing the Performance of Ks Plots for Detecting Ancient Whole Genome Duplications. Genome Biol Evol 10, 2882–2898.

Guo, L., Winzer, T., Yang, X., Li, Y., Ning, Z., He, Z., Teodor, R., Lu, Y., Bowser, T.A., Graham, I.A., et al. (2018). The opium poppy genome and morphinan production. Science 362, 343–347.

Zwaenepoel, A., and Van de Peer, Y. (2019). wgd—simple command line tools for the analysis of ancient whole-genome duplications. Bioinformatics 35, 2153–2155.

python 密度聚类 使用_使用wgd进行全基因组复制分析相关推荐

  1. 使用wgd进行全基因组复制分析

    因为全基因组复制(Whole genome duplications, WGD)是生物进化的重要因素之一, 所以WGD分析也是基因组分析经常用到的一种分析方法.举个例子,我们之所以能在多条染色体之间发 ...

  2. python 密度聚类 使用_使用python+sklearn实现硬币图像上的结构化Ward层次聚类演示...

    注意:单击此处https://urlify.cn/EFRn6b下载完整的示例代码,或通过Binder在浏览器中运行此示例使用Ward层次聚类计算二维图像的分割,由于聚类在空间上受到了限制,所以每个分割 ...

  3. python谱聚类算法_谱聚类(spectral clustering)原理总结

    谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...

  4. python网管系统_IT外包网管服务,Python密度聚类算法-DBSCAN实践

    蓝盟 IT小贴士,来喽! 可以看出,a点附近的点密度大,红色的圆按照一定的规则在这里滚动,最终收纳a点附近的5点,标记为红色是同一个簇. 其他没有收纳的东西,按照相同的规则进行集群化. 从图像上来看, ...

  5. python谱聚类算法_谱聚类Spectral clustering(SC)

    在之前的文章里,介绍了比较传统的K-Means聚类.Affinity Propagation(AP)聚类.比K-Means更快的Mini Batch K-Means聚类以及混合高斯模型Gaussian ...

  6. python画聚类图_用Python进行系统聚类分析

    在进行机器学习时,我们往往要对数据进行聚类分析,聚类,说白了就是把相似的样品点/数据点进行归类,相似度高的样品点会放在一起,这样一个样本就会被分成几类.而聚类分析也有很多种方法,比如分解法.加入法.有 ...

  7. python数据分类聚类案例_用Python进行系统聚类分析

    在进行机器学习时,我们往往要对数据进行聚类分析,聚类,说白了就是把相似的样品点/数据点进行归类,相似度高的样品点会放在一起,这样一个样本就会被分成几类.而聚类分析也有很多种方法,比如分解法.加入法.有 ...

  8. python谱聚类算法_谱聚类 - python挖掘 - 博客园

    谱聚类(Spectral Clustering,SC)是一种基于图论的聚类方法,将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量远.能够识别任意形状的样本空间且收敛于全 ...

  9. python数据标准化代码_可能是最全的数据标准化教程(附python代码)

    什么是数据标准化(归一化) 数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标 ...

最新文章

  1. 深度学习训练中噪声减小吗_【机器学习 155】DoubleEnsemble
  2. C/C++位域结构深入解析
  3. JDK10的新特性:var泛型和多个接口实现
  4. 容器学习 之 自定义容器网络(十三)
  5. SNS类游戏cache server设计浅析
  6. 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域
  7. 图(graph)神经网络学习(四)--代码解析(Model_2)
  8. 一种排序NYOJ 8
  9. 一个包含所有c++的头文件的头文件
  10. 深信服 adesk linux 客户端,Sangfor-aDesk巡检工具(深信服桌面云智能交付巡检助手)V2.1 正式版...
  11. vue单页面SEO优化
  12. Pytorch搭建EfficientNet网络和Openmax
  13. linux脚本编程for,谢烟客---------Linux之bash脚本编程---if补充和for循环
  14. Python爬虫实战:爬取YY上漂亮小姐姐视频
  15. C语言#include的用法
  16. LABS1000-01空盒气压计检定系统
  17. React生命周期 - 前端
  18. Golang学习书籍
  19. 国民技术N32G45试用:利用片上DAC做一个信号发生器
  20. CiteSpace入门建议及在知网医学论文的使用现状-1

热门文章

  1. TorchScript神经网络集成技术
  2. 快速android app开发,快速學會開發 Android App
  3. python 创建.txt的文件 并写内容到里面
  4. Android DataBinding 入门了解 到实现一个buttton的点击事件
  5. failed to load external entity file:/C:/Users/fmm/.AndroidStudio3.4/config/options/updates.xml
  6. day07-字符编码、文件操作
  7. CentOS7 通过代理上网
  8. 一个顽猴沿着一座小山的n级台阶向上跳,猴子上山一步可跳1级或3级,试求上山的n级台阶有多少种不同的爬法。...
  9. 四种Java线程池用法解析
  10. Go 学习笔记(26)— Go 习惯用法(多值赋值,短变量声明和赋值,简写模式、多值返回函数、comma,ok 表达式、传值规则)