>ML建树原理
1.选择模型:首先需要根据不同的分子序列特点和研究目的,选择合适的进化模型。常用的模型包括JC模型、K80模型、HKY模型、GTR模型等。
2.构建初始树:为了进行ML优化,需要构建一颗初始的进化树。初始树的构建可以使用多种方法,例如随机构建、邻接法、UPGMA法等。
3.计算似然值:计算初始树的似然值,即给定当前进化树拓扑结构和分支长度下,观测到输入序列的概率。该概率可以根据所选的进化模型和序列数据计算得出。
4.优化树拓扑:通过修改进化树的拓扑结构,得到新的进化树,并计算其似然值。如果新的进化树的似然值比原始树更高,则接受该新树,否则舍弃。
5.优化分支长度:在确定树的拓扑结构后,进一步通过优化分支长度,使得观测到的序列数据出现的概率最大。这个过程通常使用牛顿法、梯度下降法等数值优化方法实现。
6.重复优化:不断重复步骤4和步骤5,直到ML似然值收敛或达到预设的停止条件。
7.输出结果:最终输出优化后的进化树和相应的似然值,用于进一步的分析和解释。
似然值是如何计算的:
总之需要依赖substitution model
>RAxML是怎么利用ML建树的
1.根据参数p的选择生成很多个随机初始树
2.计算每个初始树的似然值
3.根据ML算法优化每棵树的结构找到最大似然值
4.取结果中最大最大似然值最大的树作为输出
>选择版本
*按CPU运行速度(x86架构的新旧):标准版,SSE3,AVX和AVX2
*按并行实现方式:单线程,MPI,Threads,MPI+Threads
上面两个组合起来有超级多的makefile!需要根据序列长度和数量合理选择
Q1:单线程还是多线程?
一般来说,单线程适合中小型数据,多线程适合长比对。然而,manual指出,对于相对较小的数据(1,900 taxa, 1,200bp, DNA data),8核还是要快点。
Q2:MPI还是Thread?
MPI用于跨计算机通信和协调分布式内存系统中的多个进程,而Pthreads则用于在单个计算机上创建并发执行的多个线程,而且MPI版的功能不完整
Q3:线程设置多少?
并不是线程越多,程序越快,因为等待输入解析和彼此通信的时间也会变多(Amdahl法则)。
根据经验,使用一个核心/线程每500个DNA位点模式,如果有更少的,那么最好使用 sequential 版本。约有1000个位点的单基因DNA比对,可以用2个或最多4个线程进行分析。
Amdahl法则:描述一个系统部分性能提升对整个系统性能的影响,公式:
最大加速比(倍数)=1/ ((1-p)+ (p/N))
p是并行计算部分所占比例,N是并行处理结点个数(处理器个数)
>使用
eg:
raxmlHPC-PTHREADS-AVX2 -f a -m GTRGAMMA -p 12345 -x 12345 -# 100 -s sequences.fasta -n result
-s <filename>:输入文件名
-m <model>:输入使用的substitution模型
对于nt:
1.GRT(raxml只支持这一种取代模型)
2.GAMMA/CAT分布模型
3.I考虑不变位点
4.ASC考虑升降偏倚
不支持自动选择最佳取代模型,需要手动指定
对于aa:
输入PROTGAMMAAUTO自动选择最适合的模型
-b<int>:bootstrap分析的随机种子,只对单线程的版本有用(更慢,精度更高)
-x <int>:快速bootstrap的随机种子数,一般构建ML树使用这个选项(更快,精度较低)
-# <bootstrap>:设置bootstrap次数
-p <int>:设置初始化随机数的随机种子
-f <[adsb]>: 指定分析类型,一般选a表示进行ML构建分析
-n:指定输出文件后缀
>输出文件
RAxML_bestTree:最优的最大似然树
RAxML_bipartitions:最优的最大似然树,内部节点标注了bootstrap值
RAxML_bipartitionsBranchLabels,内部节点标注了bootstrap值,与RAxML_bipartitions标注方式不同
RAxML_bootstrap:根据bootstrap构建的自举树
RAxML_info:包含了raxml运行时的一些信息,如参数设置,模型选择,似然率计算等
.reduced:剔除的冗余序列