Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聚类树的合并展示

聚类树的合并展示

作者头像
SYSU星空
发布于 2022-05-05 06:15:10
发布于 2022-05-05 06:15:10
54900
代码可运行
举报
运行总次数:0
代码可运行

往期回顾

层次聚类(hierarchical clustering)就是通过对数据集按照某种方法进行层次分解,直到满足某种条件为止,常用的方法有UPGMA、ward.D2等。聚类树是层次聚类最常用的可视化方法,我们可通过比较聚类来确定最佳分类,详见往期文章层次聚类与聚类树比较聚类

群落结构

通过层次聚类我们可以对微生物群落进行聚类并以聚类树的形式进行展示,但是要分析其生态学意义,我们需要结合更多的数据来对聚类簇进行解读。首先我们可以比较不同聚类簇中样品的群落结构的差异,分析不同微生物类群的变化规律,方法如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#读取物种和群落信息
data=read.table(file="otu_table.txt", header=TRUE, check.names=FALSE)
rownames(data)=data[, 1]
otu=as.matrix(data[,- 1])
community=read.table(file="phylum.txt",header=TRUE, check.names=FALSE)
rownames(community)=community[, 1]
com=as.matrix(community[, -1])
#计算物种相对丰度
library(vegan)
otu=decostand(otu, MARGIN=2, "total")*100
#物种丰度分组求均值
n=length(colnames(otu))
m=length(rownames(otu))
mean=rep(0, m*n/3)
otumean=matrix(mean, nrow=m, ncol=n/3)
rownames(otumean)=rownames(otu)
colnames(otumean)=LETTERS[1:22]
for (i in 1:m) {
  for (j in 1:(n/3)) {
    otumean[i, j]=mean(otu[i,(3*j-2):(3*j)])
  }
}
otumean=t(otumean)
#群落丰度数据求均值
p=ncol(com)
q=nrow(com)
commean=matrix(rep(0, p*q/3), nrow=q, ncol=p/3)
rownames(commean)=rownames(com)
colnames(commean)=LETTERS[1:22]
for (i in 1:q) {
  for (j in 1:(p/3)) {
    commean[i, j]=mean(com[i,(3*j-2):(3*j)])
  }
}
#计算距离矩阵
otu_dist=vegdist(otumean, method="bray", diag=TRUE, upper=TRUE, p=2)
#进行聚类分析
hclust=hclust(otu_dist, method="average")
#确定最佳聚类簇数目(这里省略,我们选聚类簇数目为3)
#聚类结果绘图
layout(matrix(c(1,2,3), 1, 3, byrow=TRUE), widths=c(1, 2, 1))
orhclust=reorder(hclust, otu_dist)
library(dendextend)
library(RColorBrewer)
tree=as.dendrogram(orhclust) %>% set("labels_cex", 2)
clusMember=cutree(tree, 3)
labelColors=brewer.pal(n=3, name="Set1")
colLab=function(n) {
  if (is.leaf(n)) {
    a=attributes(n)
    labCol=labelColors[clusMember[which(names(clusMember)==a$label)]]
    attr(n, "nodePar")=c(a$nodePar, lab.col=labCol)
  }
  n
}
#为聚类树设置颜色宽度等
tree=tree %>% set("labels_cex", 2) %>% set("branches_lwd", 2) %>% 
  set("branches_k_color", k=3) 
clusDendro=dendrapply(tree, colLab)
par(mar=c(5,2,3,2))
plot(clusDendro, type="rectangle", horiz=TRUE, xlab="Height")
#群落结构柱状图
#调整样品顺序与聚类树一致
commean=commean[,orhclust$order]
par(mar=c(5,1,3,1))
mycol=c(52,619,453,71,134,448,548,655,574,36,544,89,120,131,596,147,576,58,429,386,122,87,404,466,124,463,552,147,45,30,54,84,256,100,652,31,610,477,150,50,588,621,99,81,503,562,76,96,495)
mycol=colors()[mycol]
x=barplot(commean*100, xlab="Abundance (%)", ylab=NULL, col=mycol, border=NA, cex.axis=0.8, cex.names=0.8, xlim=c(0,100), yaxt="n", horiz=TRUE)
#添加样品名,用来检查样品名是否对应,最终作图可去除
#axis(2,pos=c(1.5,0), labels=colnames(commean), at=x, las=2, tick=FALSE, cex.axis=0.8 )
#添加图例
par(mar=c(1,0,1,1))
plot.new()
legend(x=0, y=0.98, legend=rownames(commean), ncol=1, fill=mycol, cex=1.5, border=NA, box.lwd=NA)

最终作图结果如下所示:

环境数据

前面的聚类均为对样品微生物群落数据进行分析,是一种非约束的聚类分析,我们可以根据聚类结果被动引入环境因子数据来进行比较,方法如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#读取物种和环境因子信息
data=read.table(file="otu_table.txt", header=TRUE, check.names=FALSE)
rownames(data)=data[, 1]
otu=as.matrix(data[,- 1])
environment=read.table(file="environment.txt",header=TRUE,check.names=FALSE)
rownames(environment)=environment[, 1]
env=data.frame(environment[, -1])
#计算物种相对丰度
library(vegan)
otu=decostand(otu, MARGIN=2, "total")*100
#物种丰度分组求均值
n=length(colnames(otu))
m=length(rownames(otu))
mean=rep(0, m*n/3)
otumean=matrix(mean, nrow=m, ncol=n/3)
rownames(otumean)=rownames(otu)
colnames(otumean)=LETTERS[1:22]
for (i in 1:m) {
  for (j in 1:(n/3)) {
    otumean[i, j]=mean(otu[i,(3*j-2):(3*j)])
  }
}
otumean=t(otumean)
#调整物种与环境因子样品ID顺序一致
otumean=otumean[rownames(env),]
#计算距离矩阵
otu_dist=vegdist(otumean, method="bray", diag=TRUE, upper=TRUE, p=2)
#进行聚类分析
hclust=hclust(otu_dist, method="average")
#确定最佳聚类簇数目(这里省略,我们选聚类簇数目为3)
#聚类结果绘图
layout(matrix(c(1,2,3,1,4,5), 2, 3, byrow=TRUE), widths=c(1, 1, 1))
orhclust=reorder(hclust, otu_dist)
library(dendextend)
library(RColorBrewer)
tree=as.dendrogram(orhclust) %>% set("labels_cex", 2)
clusMember=cutree(tree, 3)
labelColors=brewer.pal(n=3, name="Set1")
colLab=function(n) {
  if (is.leaf(n)) {
    a=attributes(n)
    labCol=labelColors[clusMember[which(names(clusMember)==a$label)]]
    attr(n, "nodePar")=c(a$nodePar, lab.col=labCol)
  }
  n
}
#为聚类树设置颜色宽度等
tree=tree %>% set("labels_cex", 2) %>% set("branches_lwd", 2) %>% 
  set("branches_k_color", k=3) 
clusDendro=dendrapply(tree, colLab)
par(mar=c(4,2,4,2))
plot(clusDendro, main ="UPGMA Tree", type="rectangle", horiz=TRUE)
#环境因子箱型图(环境因子筛选参照CCA)
attach(env)
par(mar=c(6,5,8,2))
boxplot(Salinity~clusMember, pch="+", col=labelColors, range=0.8,  boxwex=0.5, ylab="Salinity")
boxplot(TN~clusMember, pch="+", col=labelColors, range=0.8,  boxwex=0.5, ylab="TN")
boxplot(TP~clusMember, pch="+", col=labelColors, range=0.8,  boxwex=0.5, ylab="TP")
boxplot(Temp~clusMember, pch="+", col=labelColors, range=0.8,  boxwex=0.5, ylab="Temperature")

作图结果如下所示:

示例数据下载链接:

https://pan.baidu.com/s/1HhLvdRY7rRrCIcGnCSLAYA

提取码:6rbl

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微生态与微进化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
层次聚类与聚类树
在生态学研究当中,有些环境中的对象是连续(或者离散)的,而有些对象是不连续的,聚类的目的是识别在环境中不连续的对象子集,从而探索隐藏在数据背后的属性特征。聚类分析主要处理那些对象有足够的相似性被归于一组,并且确定组与组之间的差异或分离程度。聚类可以分为特征聚类(Vector Clustering)和图聚类(Graph Clustering)。特征聚类是指根据对象的特征向量矩阵来计算距离或者相关性来实现聚类,例如各种层次聚类和非层次聚类。而图聚类则针对的是复杂网络数据,有随机游走、贪心策略、标签传播等算法等。
SYSU星空
2022/05/05
1.6K0
层次聚类与聚类树
定义群落测度:α多样性分析
微生物群落的测度(measure)是指对群落矩阵数据的一种度量比较。测度可以用一系列指数(index)或系数(coefficient)来表示。对于单个对象(样品)的测度计算,可以采用α多样性指数来表示,而对于不同对象之间的比较,则可以采用β多样性指数或者距离。对于变量(物种或环境因子)之间的比较,则采用相关性来比较。群落测度的分析结果,可用于后续的排序分析、网络分析、聚类分析、判别分析等。
SYSU星空
2022/05/05
8.5K0
定义群落测度:α多样性分析
分析样本差异:β多样性距离
β多样性是指在一个梯度上从一个生境到另一个生境所发生的多样性变化的速率和范围,它是研究群落之间的种多度关系。不同群落或某环境梯度上不同点之间的共有种越少,β多样性越大。精确地测定β多样性具有重要的意义。这是因为:①可以用来指示物种被生境隔离的程度;②可以用来度量生物多样性沿生境变化范围;③β多样性与α多样性一起构成了总体多样性或一定地段的生物异质性。
SYSU星空
2022/05/05
4.3K0
分析样本差异:β多样性距离
非层次聚类:k-medoids
往期文章层次聚类与聚类树、比较聚类与聚类簇划分介绍了层次聚类的使用,今天为大家介绍非层次聚类的使用。非层次聚类(non- hierarchical clustering)是对一组对象进行简单分组的方法,其分类依据是尽量使得组内对象之间比组间对象之间的相似度更高,在分析之前需要预设小组的数目。非层次聚类需要首先有个预设的结构,比如假设有k个类群,那么将所有对象任意分为k组,然后在这个基础上不断进行替换迭代,来达到最优化的分组结果。
SYSU星空
2022/05/05
7490
非层次聚类:k-medoids
肿瘤免疫细胞浸润与临床相关性分析
Profiles of immune infiltration in colorectal cancer and theirclinical significant: A gene expression- based study
DoubleHelix
2020/04/07
6.9K0
组间差异分析:Anosim
Anosim分析(Analysis of similarities)是一种基于置换检验和秩和检验的非参数检验方法,用来检验组间的差异是否显著大于组内差异,从而判断分组是否有意义。Anosim分析使用距离进行分析,默认为method="bray",可以选择其他距离(和vegdist()函数相同),也可以直接使用距离矩阵进行分析。在R中我们可以使用vegan包中的anosim()函数进行分析,这里我们微生物群落数据为例进行分析:
SYSU星空
2022/05/05
2.3K0
组间差异分析:Anosim
R- 组合图(折线+条形图)绘制
就是下面这张图,在途中用条形图展示了不同季节样本浮游动物的组成情况,同时使用带误差棒的折线图来表示浮游动物生物量的变化,相当于在一幅图中同时展示了群落的相对丰度和绝对丰度。
DataCharm
2021/02/22
3.4K0
R- 组合图(折线+条形图)绘制
R语言之系统聚类(层次)分析之图谱形式完整版
读取数据常见错误: 在读取数据过程中可能遇到以下问题,参照上一篇博客: 可能遇到报错: 1、Error in if (is.na(n) || n > 65536L) stop(“size cannot be NA nor exceed 65536”) : missing value where TRUE/FALSE needed 没有处理数据转化距离。 2、Error in hclust(dist(test)) : NA/NaN/Inf in foreign function call (arg
学到老
2018/03/16
5.1K0
R语言之系统聚类(层次)分析之图谱形式完整版
lncRNA实战项目-第六步-WGCNA相关性分析
WGCNA将lncRNA分成18个模块(3635个lncRNA),空间模块中lncRNA表达呈现明显的组织区域特异性,如:CB (M1, 794个lncRNAs),DG/CA1 (M2, 443个lncRNAs), CA1 (M4, 369个lncRNAs),neocortex (M7, 123个lncRNAs)和OC (M10,57个lncRNAs)。时间模块中lncRNA表达与年龄有关,而与组织区域不明显;性别模块中lncRNA表达与性别和年龄都相关。每个模块就必须做pathway/go等数据库的注释分
生信技能树
2018/03/05
5.2K0
lncRNA实战项目-第六步-WGCNA相关性分析
一文看懂WGCNA 分析(2019更新版)
不过,我这点战绩根本就算不上什么,其实这个WGCNA包已经是十多年前发表的了,仍然是广受好评及引用量一直在增加,破万也是指日可待。
生信技能树
2019/09/30
30.7K2
一文看懂WGCNA 分析(2019更新版)
这个WGCNA作业终于有学徒完成了!
共画了3张热图,最后一张热图展示如下图,与原文对比'Ligamentocyte'和'Chondrocyte'相比较其他组是高表达的。
生信技能树
2019/11/10
2.3K0
RDA-PLS:多数据集关联分析
在现代微生物组学分析中,高通量的测试方法使得研究者可以一次性获取大量的数据信息,这时候所获得的数据里可能存在大量“冗余”;此外,在实际操作中,研究人员为避免遗漏重要的系统特征,往往倾向于较周到的选取测试指标,这些变量之间也很可能存在多重共线性。因此,在大数据量的多个数据集之间进行分析时,常常难以有效的进行数据挖掘。
SYSU星空
2022/05/05
9851
RDA-PLS:多数据集关联分析
WGCNA + ssGSEA的组合分析
生物信息数据分析教程视频——16-单样本基因集富集分析(ssGSEA)用于肿瘤相关免疫细胞浸润水平评估
DoubleHelix
2023/09/06
7290
WGCNA + ssGSEA的组合分析
RNA-seq入门实战(十一):WGCNA加权基因共表达网络分析——关联基因模块与表型
连续两次求贤令:曾经我给你带来了十万用户,但现在祝你倒闭,以及 生信技能树知识整理实习生招募,让我走大运结识了几位优秀小伙伴!大家开始根据我的ngs组学视频进行一系列公共数据集分析实战,其中几个小伙伴让我非常惊喜,不需要怎么沟通和指导,就默默的完成了一个实战!
生信技能树
2022/07/26
14.3K3
RNA-seq入门实战(十一):WGCNA加权基因共表达网络分析——关联基因模块与表型
跟着Nature Plants学数据分析:R语言WGCNA分析完整示例
https://www.nature.com/articles/s41477-021-00897-y#data-availability
用户7010445
2023/01/06
9890
跟着Nature Plants学数据分析:R语言WGCNA分析完整示例
WGCNA加权基因共表达网络多步法分析学习
之前笔者介绍过一步法的分析的流程: WGCNA加权基因共表达网络一步法分析学习 https://mp.weixin.qq.com/s/2Q37RcJ1pBy_WO1Es8upIg
凑齐六个字吧
2024/10/10
1500
WGCNA加权基因共表达网络多步法分析学习
R语言聚类分析可视化(2)
之前的推文使用默认的plot函数进行聚类树的可视化,详情请点击:R语言聚类分析(1),今天继续扩展聚类树的可视化。
医学和生信笔记
2023/02/14
6290
R语言聚类分析可视化(2)
WGCNA加权基因共表达网络一步法分析学习
WGCNA是一种用于分析基因表达数据的系统生物学方法。主要用于识别在基因表达数据中呈现共表达模式的基因模块,并将这些模块与样本特征(如临床特征、表型数据)相关联,进而识别关键驱动基因或生物标志物。
凑齐六个字吧
2024/08/31
2370
WGCNA加权基因共表达网络一步法分析学习
WGCNA实战—急性心肌梗死的 NETosis 模式与免疫特点的综合分析(一)
「方法」:利用加权相关网络分析(WGCNA)从 GEO 数据库的 GSE60993、GSE48060 和 GSE61144 数据集中筛选出与 AMI相关性最高的基因模块。
生信菜鸟团
2024/03/18
3820
WGCNA实战—急性心肌梗死的 NETosis 模式与免疫特点的综合分析(一)
WGCNA实战:识别免疫相关lncRNA
前面的推文给大家介绍了3种识别免疫相关lncRNA的方法:免疫相关lncRNA的识别
医学和生信笔记
2023/08/30
6740
WGCNA实战:识别免疫相关lncRNA
相关推荐
层次聚类与聚类树
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档