1.原理的区别

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

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

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

UPGMA示意图:

NJ示意图:

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

二者区别总结:

2.实操比较

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

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

UPGMA

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

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

使用dist计算距离:

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

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:



用dist:

保存树文件

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

保存树文件:

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/

最新文章

  1. Android DEX 基础
  2. 搭建nginx+tomcat+Java的负载均衡环境
  3. Git学习(一)——Git介绍与安装
  4. iOS 自定义对象转NSDictionary
  5. python打怪之路【第一篇】:99乘法表
  6. 快乐的JS正则表达式(三)
  7. Android使用layer-list实现三面边框
  8. 导入导出封装的工具类 (一) 利用POI封装
  9. C#事件、委托简单示例
  10. chrome提供的功能
  11. CSS的position(位置)
  12. NSIS:获取硬盘中容量最大的分区盘符
  13. JS时间处理由CST格式转成GMT格式时间
  14. ●BZOJ 1797 [Ahoi2009]Mincut 最小割
  15. [转]jQuery 选择器和dom操作
  16. haoop fs 命令
  17. Strut2在Action-Result的配置文件内转到jsp页面时用URL传递参数
  18. php分享三十:php版本选择
  19. simulate mdns message
  20. c++官方文档

热门文章

  1. SpringCloud微服务实战——搭建企业级开发框架(六):使用knife4j集成Swagger2接口文档
  2. 【二食堂】Beta - 设计和计划
  3. [no code][scrum meeting] Beta 7
  4. BUAA 2020 软件工程 结对项目作业
  5. logstash处理多行日志-处理java堆栈日志
  6. Noip模拟55 2021.9.17(打表大胜利)
  7. stm32f103系列引脚定义-功能图
  8. POJ 2584 T-Shirt Gumbo(二分图最大匹配)
  9. 事件消息生产消费中间件-OSS.DataFlow
  10. c++学习笔记(九)