热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

聚类分析5—物种集合数量生态学:R语言的应用第四章

数量生态学:R语言的应用第四章聚类分析5—物种集合在这之前我们学习了聚类分析的基本概念、几种计算层次聚类的方法、进一步解读和比较层次聚类结果以及非层次聚类,也学习了基
数量生态学:R语言的应用 第四章 聚类分析5—物种集合

在这之前我们学习了聚类分析的基本概念、几种计算层次聚类的方法、进一步解读和比较层次聚类结果以及非层次聚类,也学习了基于环境数据来进行聚类分析。本次呢,我们主要学习如何识别数据集内物种关联的方法。

本次的内容,主要分为四个部分:

  1. 组内数据简单统计
  2. Kendall共性系数(W)
  3. 基于有-无数据的物种集合
  4. 物种共生网络

1. 加载所需的数据和包以及数据预处理

1.1 加载所需的包和数据

setwd("E:/Rstudio_working/lai jian shan/DATA/Data")
#加载包和数据
library(ade4)
library(adespatial)
library(vegan)
library(gclus)
library(cluster)
library(pvclust)
library(RColorBrewer)
library(labdsv)
library(rioja)
library(indicspecies)
library(mvpart)
library(MVPARTwrap)
library(dendextend)
library(vegclust)
library(colorspace)
library(agricolae)
library(picante)

#加载函数
source("drawmap.R")
source("drawmap3.R")
source("hcoplot.R")
source("test.a.R")
source("coldiss.R")
source("bartlett.perm.R")
source("boxplerk.R")
source("boxplert.R")

#从聚类结果获得二元差异矩阵的函数
grpdist 

1.2数据预处理

#先计算样方之间的弦距离矩阵
spe.norm 

说明:这里数据处理方法,都是在聚类分析这一章学过的,不明白的同学,可以在回头去看看

这里用到的数据是非层次距离中得到的spech.ward.gk

2. 组内数据简单统计

之前我们也讲过某些定义广义的物种集合的方式:对聚类分析获得的样方组进行简单统计(比如平均多度),寻找每组样方内数量多、频度高或具有代表性的物种。比如下面:

#最优化Ward聚类分4组内每种物种平均多度
groups  mean(group1))
group1
group1.domin
#... 对其他组进行相同分析
group2.domin  mean(group2))
group2
group3.domin  mean(group3))
group3
group4.domin  mean(group4))
group4
group1.domin
group2.domin
group3.domin
group4.domin
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
显示多度大于平均值的物种

3. Kendall共性系数(W)

Kendall共性系数与置换检验结合可以确认多度数据表格内物种集合(此方法不适用于物种有-无的数据):“首先进行所有物种独立性的总体检验,如果零假设被拒绝,则需要对物种进行分组,在每组内使用置换检验去分析每个物种对总体统计量贡献的显著性”。在这个过程中,物种之间关联的计算无需预先参考任何已知或从其他数据(例如环境因子)获得的分组情况,这个方法的目标是找到最全面的物种集合,即利用最少组数并尽可能让显著正相关物种分在同一个组

Kendall.W程序包可以做上面的计算,当判断的数量[=物种数]很少时,Kendall共性检验最合适,因为此时用传统的卡方检验过于保守,此外置换检验有准确的Ⅰ类错误值;因此置换检验的效果可能更好。Kendall.global( )函数也包含参数的F-检验,F-检验也可以避免卡方检验过于保守的问题,而并具有准确的Ⅰ类错误值。

使用K-均值法将这些物种分成几组,然后运行全局检验(Kendall.global( ))识别是否所有物种组显著关联。如果显著关联,将对每个物种进行后验概率检验(Kendall.post( )),验证同一组的物种是否具有共性?

# Kendall共性系数(W)
#物种数据转化和矩阵转置
spe.hel 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
包含所有物种的Kendall共性分析首次检验

共性不一致的零假设被拒绝。所以我们需要先进性分组,再进行组内Kendall分析

# 物质K-均值划分
spe.t.kmeans.casc 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
鱼类数据在2组到8组条件下每种鱼归属的K-均值划分图

Calinski-Harabasz 准则指出分2组是最佳方案,如果分更多的组,可能有些组只有一个物种,分两组的时候,第1个组有6个物种,第2个组有21个物种,在这里分3组或者4组也是合适的,因为至少每组有不少于三个物种。

# 分两组的情况刚好是在object$partition里面的第一列
(clusters2 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
image-20210510220719968

我们现在将分两组来研究物种的划分。让我们执行每组全局Kendall W检验,通过调用Kendall.global函数来完成。

# 全局Kendall W检验
(spe.kendall.global2 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
image-20210510220824532

我们可以看到到已经矫正的置换检验P值。如果所有的P值等于或者小于0.05,可以认为所有组全局显著,即总体上说,每一组内所包含的物种具有共性;但是这不意味着所有的物种都具有共性,但至少是一部分物种具有共性。如果某些组矫正的P值不显著,意味着这些组包括非一致的种,必须再分为更小的组,换句话说,这里应该划分为比两组更多的组。

现在运行后验检验,以确定每组内共性显著的物种:

# 后验检验
(spe.kendall.post2 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
后验检验

查看各个物种的平均Spearman相关系数。如果组内每个物种与本组内其他物种之间有正平均相关系数值则该组包含一致物种如果一个物种与其所有其他成员的相关性的平均值为负这表明该物种应该被排除在本组外。尝试对组进行更精细的划分,看看该物种是否找到了与本组其他物种间具有正平均相关性的组。这个物种也可能形成单体,即具有单一物种的群体。

对于分两组的情况,我们在较大的一组中有一个物种(Spce)与本组内其他成员的平均相关性为负,这表明我们应该寻找一个更精细的物种分组。让我们进行分三组后检验。

(spe.kendall.post3 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
后验检验

现在我们可以看到,三组中的所有物种与同小组的其他成员都是正的Spearman相关。Sqce发现自己处于一个由9个物种组成的,具有平均正相关的新群体中,尽管它对该组的一致性贡献并不显著。三组中的其他物种都对他们组一致性具有显著的贡献,所以我们可以停止继续分组,现在分为物种数为12 、9和6种的分组足以充分描述Doubs河流的物种关联。

生态理论通常预测生态关系中具有嵌套结构。在每个群落内,物种亚组或多或少或松散或紧密地关联在一起。可以通过考察Kendall W检验获得的物种关联大组中更小物种亚组情况探索这种嵌套现象。

这里定义的物种组,可以用不同的方式解读其生态意义,例如绘制河流的多度分布并计算每个样方的基本统计信息,也可帮助评估这些物种组的生态作用。另一种途径是对显著观念的物种进行RDA分析(以环境因子为解释变量,以后会学习

4. 基于有-无数据的物种集合

有一种方法专门针对物种有-无数据的聚类分析,它包括了计算R-模式的Jaccard系数S(作为物种间共发生的测度)的α组分,并通过Raup和Crick系数置换检验评估阿尔法的概率。此时P值可以当做距离:共发生度越高的两个物种,其P值越小。可是使用作者编写的test.a( )函数计算这个系数。

可以利用test.a( )函数分析转化有-无数据的的鱼类数据。

利用之后(第7章的内容)矫正方法可以设定置换检验中足够的置换次数,以获得多重检验的显著水平。Doubs1数据共有27个物种,因此需要运行,27×26÷2=351次检验,为了保持0.05水平的显著性,Bonferroni矫正需要P值达到0.05÷351=0.0001425。只有当置换次数达到9999次,最小的P值才能达到1÷(9999+1)=0.0001。置换次数达到99999可以达到更精细的P值,但是请注意这么大的置换次数,可能会让电脑多运行几分钟。

# 将物种转化为有-无数据
spe.pa 

输出的结果res$p.a.dsit包含一个p值的矩阵。下一步计算向量化的p值矩阵的Holm矫正数(在之后第7章学习)

# 计算Holm矫正的p值矩阵
(res.p.vec 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
计算Holm矫正的p值矩阵
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
image-20210511104211391

在矫正后的p值中,可以发现0.05或比0.05小但很接近的值

#在矫正后的p值中,可以发现0.05或比0.05小但很接近的值
(adj.sigth 

P值0.04878的未矫正P值应该是0.00017。Holm矫正后的P值矩阵内大约有83个值小于0.05(可能每次运行这个数值有轻微的变化)。因此0.00017或更小的概率才能成为显著。接下来将相异矩阵内的所有大于0.00017的值都用1替换。

res.pa.dist  sigth] 

那么有多少为矫正的p值小于或等于0.00017(sigth)

# 显著p值热图
dev.new(
  title = "0-1 species associations, heat map",
  width = 12,
  height = 6,
  noRStudioGD = TRUE
)
coldiss(res.pa.dist,
        nc = 16,
        byrank = TRUE,
        diag = TRUE)

聚类分析5—物种集合-数量生态学:R语言的应用 第四章
显著p值热图

5. 物种共生网络

共生网络分析在群落生态学研究中比较流行,特别是研究物种之间或群落之间生态相互作用等方面。原理就是分析生态群落内或多营养级的物种组合内物种之间的关联程度。

基于共生网络的拓扑图,我们可以定义物种的群组称为模块,网络结构有两个重要属性,即“模块化”(共生物种被组织成模块的程度,即密集连接、不重叠的物种子集)“嵌套性”(网络嵌套程度,即小组合的物种组成是较大组合的嵌套子集)。一个物种角色被定位为与自身模块中其他物种相比较(“标准化的模块内程度”,即与同一模块中的其他节点的连接数,然后被由连接数的均值和标准差标准化)以及与它与其他模块中的物种连接的程度(模块间“连通性”)。

基本上,网络是由邻接矩阵构成,该矩阵可以是二进制的(物种显著共生或不共生)或数字(物种之间的加权连接)。物种间各种正、中性或负的关联测度的均可以用来计算邻接矩阵,包括Spearman相关、Jaccard相似系数或前一节获得的P值。这些指标可以根据物种有-无数据或者多度数据来计算。通常应用阀值来限制一些数值比较小但非零点连接,以减少连接的规模。网络图以这样的模式绘制,即通过网各种算法将共生频次比较高的物种聚集在一起。

我们可以使用igraph包进行网络处理和picante包计算共生距离

让我们从计算鱼类属数据几个邻接矩阵开始,你可以选择其中一个对称矩阵来构建无向共生网络,这里基于Jaccard相似性进行计算。

# 加载包
library(igraph)
library(rgexf)

# 从上一节获得的显著的共生二元矩阵计算邻接矩阵
adjm1 =0.25)
adjm2[adjm3 = 0.25] 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
绘制邻接值柱状图
# 构建图像元
go 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
image-20210511141837793
# 网络结构检测:发现连接图中的密集连接子集(模块或群落)
wc 
聚类分析5—物种集合-数量生态学:R语言的应用 第四章
基于Jaccard相似性的鱼类共生网络图

图中显示三个模块(以物种气泡颜色来区别)。黑线指示正的模块内关联,红线指示正的模块间关联

# 输出 gephi 图
gexfo 

本次物种集合就是这四个部分的内容:

  1. 组内数据简单统计
  2. Kendall共性系数(W)
  3. 基于有-无数据的物种集合
  4. 物种共生网络

今天的内容就到这里结束了,下一次将继续第四章聚类分析中指示物种的内容,请期待。

这些案例的源代码我都已经上传到getee,可以在我的公众号回复:数量生态学获得仓库链接

如有不足或错误之处,请批评指正。
有什么不明白的也欢迎留言讨论。

欢迎关注同名wx公众号

往期内容:

《数量生态学:R语言的应用》第三章-R模式

《数量生态学:R语言的应用》第二版第三章-关联测度与矩阵——Q模式

《数量生态学:R语言的应用》第二版笔记2

《数量生态学——R语言的应用》第二版阅读笔记–绪论和第二章(一部分)

R语言 pheatmap 包绘制热图(基础部分)

R语言pheatmap包绘制热图进阶教程

使用PicGo和gitee搭建图床

组间分析—T检验、R语言绘图

Rmarkdown的xaringan包来制作PPT

htlm文件部署到个人网站

感谢你的阅读!!!你的点赞关注转发是对我最大的鼓励。


推荐阅读
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • EST:西湖大学鞠峰组污水厂病原菌与土著反硝化细菌是多重抗生素耐药基因的活跃表达者...
    点击蓝字关注我们编译:祝新宇校稿:鞠峰、袁凌论文ID原名:PathogenicandIndigenousDenitrifyingBacte ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • 优化后的标题:Apache Cassandra数据写入操作详解
    本文详细解析了 Apache Cassandra 中的数据写入操作,重点介绍了 INSERT 命令的使用方法。该命令主要用于将数据插入到指定表的列中,其基本语法为 `INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...)`。通过具体的示例和应用场景,文章深入探讨了如何高效地执行数据写入操作,以提升系统的性能和可靠性。 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
author-avatar
傻孩纸黄国帅哟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有