1.进化树的概念
系统发育或系统发育树,是物种间、基因间、群体间乃至个体间谱系关系的一种表现形式。
Node:分支的连接点或者分枝的尖端都称为节点。内部节点连接分枝,外部节点代表分类单元。
Clade:一个祖先节点及其所有后代节点的组合称为一个分枝。
Branch Length:分枝长度,大多数情况下是分歧度,代表突变的累积。
根据是否指定了根节点,系统发育树可以分为有根树和无根树
无根树没有指定祖先节点,只能看出各个节点的拓扑结构和相对距离
有根数指定了根节点,反映了树上物种或基因的时间顺序,一般采用外群定根法,建树时引入亲缘关系较远的物种作为外群来定根
无根树
有根树
2.常用的建树方法
基于距离:
邻接法NJ(邻接连接将距离矩阵作为输入,指定每对分类群之间的距离。该算法以完全未解析的树开始,其拓扑对应于星型网络的拓扑,并迭代地将相邻点合并成新的点(相邻是指两个分类单位在某一无根分叉树中仅通过一个节点相连),直到树完全解析并且所有分支长度都已知。)
基于特征/性状:
最大简约法MP(计算所有可能的拓扑结构;计算出所需替代数最小的那个拓扑结构,作为最优树。)
最大似然法ML(选取一个特定的替代模型来分析给定的一组序列数据,使得获得的每一个拓扑结构的似然率都为最大值,然后再挑出其中似然率最大的拓扑结构作为最优树)
贝叶斯推算(用于枝长和后验概率联合计算)
3.软件和数据准备
软件:plink、phylip、tassel(用于格式转换)
数据:all.vcf、�all.LDfilter.vcf
4.构建进化树
进化树反映群体间个体的谱系关系,由于群体SNP位点一般较多,大多数项目中采用邻接法构树,也有部分项目使用最大似然法。
4.1SNP数据过滤
这一步过滤是为了保留高质量和多态性比较高的位点做后续的分析
#过滤missing和次等位基因频率
plink --vcf all.vcf \
--geno 0.1 \#设置缺失率阈值
--maf 0.01 \#设置maf阈值
--out all.missing_maf \#输出文件前缀
--recode vcf-iid \#输出文件格式
--allow-extra-chr \#允许其他格式序列名称
--set-missing-var-ids @:# \#设置snp id名称
--keep-allele-order
#生成需要保留的位点文件
plink --vcf all.missing_maf.vcf \
--indep-pairwise 50 10 0.2 \ #LD过滤阈值
--out tmp.ld \
--allow-extra-chr \
--set-missing-var-ids @:#
#过滤 LD
plink --vcf all.missing_maf.vcf
--make-bed \
--extract tmp.ld.prune.in \
--out all.LDfilter \
--recode vcf-iid \
--keep-allele-order \
--allow-extra-chr \
--set-missing-var-ids @:#
最终文件:all.LDfilter.vcf
4.2使用 phylip软件 NJ 法构树
#将vcf转为phylip格式文件
run_pipeline.pl -Xms1G -Xmx5G \
-importGuess ./all.LDfilter.vcf \
-ExportPlugin \
-saveAs sequences.phy \
-format Phylip_Inter
#生成dnadist需要的配置文件
echo -e "sequences.phy\nY" > dnadist.cfg
#运行dnadist生成距离矩阵文件
dnadist < dnadist.cfg >dnadist.log
#生成neighbor程序需要的配置文件
mv outfile infile.dist
echo -e "infile.dist\nY" > neighbor.cfg
#构建nj树
neighbor < neighbor.cfg >nj.log
#整理结果格式
less infile.dist | tr '\n' '|'| sed 's/| / /g' | tr '|' '\n' >infile.dist.table
less outtree | tr '\n' ' '|sed 's/ //g' > outtree.nwk
结果文件:outtree.nwk
构建好的进化树以文本格式存储,可以使用各种进化树美化软件进行美化,如figtree、mega、ITOL、Evolview等等。
网友评论