zoukankan      html  css  js  c++  java
  • 系统发育树邻接法(NJ)和非加权组平均法(UPGMA)之比较

    1.原理的区别

    主要区别在于,非加权组平均法(UPGMA)是基于平均链接方法的聚集层次聚类方法,而邻接法(NJ)是基于最小演化准则的迭代聚类法。

    UPGMA的假定条件是:在进化过程中,每一世系发生趋异的次数相同,即核苷酸或氨基酸的替换速率是均等且恒定的。

    UPGMA生成有根树,而NJ生成无根树。由于UPGMA方法假定演化速率相等,因此分支末端相等,NJ方法允许不相等的演化速率,因此分支长度与变化量成正比。

    UPGMA示意图:
    image.png

    NJ示意图:
    image.png

    UPGMA是一种简单,快速但不可靠的方法,而NJ方法是一种相对较快的方法,与UPGMA方法相比,效果更好。 当然也要看具体目的。

    二者区别总结:

    image.png

    2.实操比较

    我用Plink处理得到样本的亲缘关系矩阵(IBD)文件,示例如下:

    library(ape) #用于NJ法
    df <- read.delim("prefix.ibdM0", sep = "	",header=TRUE, row.names=1)
    df[1:5,1:5]
    df <- data.matrix(df)
    str(df)
    

    image.png

    UPGMA

    如果直接用亲缘关系矩阵,hclust函数(stats包)识别不了。

    #hclust对象需要转化为距离
    tr3 <- as.phylo(stats::hclust(df,method="average")) #UPGMA
    str(tr3)
    plot(tr3, cex=1)
    

    image.png

    使用dist计算距离:

    tr4 <- as.phylo(hclust(dist(df),method="average"))
    str(tr4)
    plot(tr4, cex=1)
    

    image.png

    NJ法

    而在NJ法中,有没有dist都可以。但有没有转化距离二者还是有一些差别的,建议还是转化后使用。

    tr1 <- bionj(df)  #或nj(df)
    str(tr1)
    plot(tr1, cex=1)
    
    tr2 <- bionj(dist(df))
    str(tr2)
    plot(tr2, cex=1)
    

    没用dist:
    image.png
    用dist:
    image.png

    保存树文件

    树文件在R中是一个列表,包括节点和边等信息:
    image.png

    保存树文件:

    write.tree(tr1,"test.nwk")
    

    NJ和UPGMA生成的树都可这样保存,保存后就可导入其他软件美化了。

    更深理解

    如果想要更进一步的了解,建议看看这个教程:
    Module 24: An Intro to Phylogenetic Tree Construction in R
    包含了极大似然法ML等。

    Ref: https://pediaa.com/difference-between-upgma-and-neighbor-joining-tree/

  • 相关阅读:
    2016第19周三
    2016第19周二
    Android JNI 获取应用程序签名
    HDU 3830 Checkers
    hadoop记录topk
    Codeforces 4A-Watermelon(意甲冠军)
    经验38--新闻内容处理
    Java8高中并发
    ACM-简单的主题Ignatius and the Princess II——hdu1027
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/jessepeng/p/14487696.html
Copyright © 2011-2022 走看看