热门标签 | 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文件部署到个人网站

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


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • Linux线程的同步和互斥
    目录1、线程的互斥2、可重入VS线程安全3、线程的同步1、线程的互斥 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
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社区 版权所有