非约束排序4 对应分析(CA)

第五章 非约束排序4 对应分析(CA)

1. 对应分析概述

对应分析(correspondence analysis,CA)是分析物种有-无或多度数据最受欢迎的工具之一。原始数据首先被转化成一个描述样方对Pearson 统计量的贡献率的矩阵,将获得的矩阵通过奇异值分解技术进行特征根(奇异值平方)和特征向量的提取。因此,CA的排序结果展示的是样方之间的距离(),而不是欧氏距离。距离不受双零问题影响,是非对称的距离系数。因此,CA非常适用原始的物种多度数据分析(无须预转化)。

注意:

进行CA分析的数据应该是频度或类频度非负数据,而且量纲完全一样,例如物种个体计数数据、生物量或有-无数据。

由于技术上的原因(计算矩阵过程会对频度数据进行隐含中心化),CA产生的排序轴数总是比样方数(n)或物种数(p)较小者少1。和PCA一样,正交的CA排序轴所承载的变差(variation)也是按顺序逐步降低,但与PCA不同的是,这里总变差不是用总方差来表示,而是通过一个叫总惯量(total inertia,矩阵所有值的平方和)的指标来表示单个特征根总是小于1。用每轴特征根除以总惯量表示每轴贡献率

在CA排序图中,对象(样方)和物种通常都是用点来表示。和PCA一样,排序图也有两种标尺类型。这里以样方为行、物种为列的物种矩阵数据为例,解读这两种类型排序图:

1型标尺CA双序图:行(样方)是列(物种)的形心。如果我们感兴趣的是对象(样方)之间的关系,应该选择1型标尺CA双序图。此时在多维空间内,样方之间距离是距离。

解读:

①在降维空间(排序图)内样方之间距离近似于它们的距离,因此,在排序图上,样方点越近,代表这些样方内的物种相对多度越相似的。

②一个样方的点靠近一个物种的点,表示该物种对于该样方的贡献比较大。如果是基于物种有-无数据,表示该物种在该样方的标识很可能是1。

2型标尺CA双序图: 列(物种)是行(样方)的形心。如果我们感兴趣的是物种之间的关系,应该选择2型标尺CA双序图。此时在多维空间内,物种之间距离是距离。

解读:

①在降维空间(排序图)内物种之间距离近似于它们的X²距离,因此,在排序图上,物种点之间距离越近,代表它们的相对多度沿着样方分布越相似

一个物种点靠近一个样方点,表示该物种在该样方内存在的可能性很大,或是在该样方内的多度比在其他更远的样方内大。

之前提到的断棍模型同样可以用于CA排序轴数的取含。接下来将以原始的鱼类多度数据为例进行CA分析。

2. 使用vegan包里的cca( )函数进行CA分析

2.1 加载数据及数据预处理

setwd("E:/Rstudio_working/lai jian shan/DATA/Data")
# 加载包,函数和数据
library(ade4)
library(vegan)
library(gclus)
library(ape)
library(missMDA)
library(FactoMineR)

#加载本章后面部分所需要的函数
source("cleanplot.pca.R")
source("PCA.newr.R")
source("CA.newr.R")

# 导入Doubs 数据
load("Doubs.RData")
# 删除无物种数据的样方8
spe <- spe[-8, ]
env <- env[-8, ]
spa <- spa[-8, ]
SPE物种数据集

2.2 运行分析和绘制双序图

首先运行CA分析,然后绘制附带断棍模型的碎石图:

# 计算CA
(spe.ca <- cca(spe))
summary(spe.ca)     # 默认 scaling 2
summary(spe.ca, scaling = 1)
图2.1-1
图2.1-2
图2.1-3
图2.1-4

第一轴有一个很大的特征根。在CA里面,如果特征根超过0.6,代表数据结构梯度明显。第一轴特征根占总惯量多少比例呢?需要注意的是,两类标尺下,特征根一样。标尺的选择,只影响用于制图的特征向量,不影响特征根。

#使用vegan包里screep1ot.cca()函数绘制附带断棍模型的碎石图
dev.new(title = "CA特征值的碎石图", noRStudioGD = TRUE)
screeplot(spe.ca, bstick = TRUE, npcs = length(spe.ca$CA$eig))
图2.1-5

无论是数量分析结果,还是碎石图都显示第一轴占绝对优势

现在绘制Doubs鱼类物种数据CA双序图,并比较两种标尺排序图的不同之处。

# CA 排序图
dev.new(title = "CA 排序图",
        width = 14,
        height = 7,
        noRStudioGD = TRUE
)
par(mfrow = c(1, 2))
# 1型标尺:样方点是物种点的形心
plot(spe.ca, 
     scaling = 1, 
     main = "CA fish abundances - biplot scaling 1"
)
# 2型标尺:物种点是样方点的形心
plot(spe.ca, main = "CA fish abundances - biplot scaling 2")

#可以将聚类分析的结果叠加到CA排序图
图2.1-6

两个图中第一轴从左到右的梯度基本上代表样方从下游(样方19-30)到上游排列。这个梯度比较明显,也可以解释为什么第一轴的特征根特别大。很多物种的点靠近样方19-30,表明这些物种在下游分布更多,而在上游分布比较少,甚至没有分布。第二轴的梯度从上到下是样方从上游到中游的分布。上游与中游这两组样方的梯度比较短,可能与它们的特征种比较一致有关。2型标尺双序图展示物种组如何在样方间分布。例如,鳟鱼(Thth)、钻鱼(Cogo)和鲤鱼(Teso)在中游的样方(11-18)分布比较多,而褐簿(Satr)、欧亚鲦鱼(Phph)和泥鳅(Bab1)在中上游分布比较多(接近样方1~18)。

1型标尺和2型标尺的双序图有什么不同?

1型标尺图中样方的点是物种多度的形心,所以1型标尺图更适合解释样方之间的关系和样方的梯度排列。相反,2型标尺图物种的点是样方的形心,所以2型标尺图更适合解释物种之间的关系和梯度分布。在这两种图内,解读那些接近坐标原点的物种需要很谨慎。这种现象可以有两种解释,有可能这些物种倾向于在坐标轴所代表的生态梯度中值范围内分布;也有可能这些物种在整个生态梯度的分布比较均匀。

2.3 将新的补充样方或物种投影到CA排序图

可以使用stats包里的predict()函数将新的补充样方或物种投影到CA双标图中。对于vegan包中的函数cca()计算的CA,这个函数以正确的方式计算新样方的位置(加权平均数)。包含新变量的数据框必须与原始的数据框具有完全相同的行名(如果补充新物种)或列名(如果补充新样方)。

以下示例:①移除了三个样方的CA,然后将这三个样方被动投影;②移除三个物种后被动投影。

# 1型标尺CA下补充样方的投影
sit.small <- spe[-c(7, 13, 22), ]  # 去掉3个样方
sitsmall.ca <- cca(sit.small)
dev.new(
  title = "去掉3个样方的CA排序图- 标尺1",
  noRStudioGD = TRUE
)
plot(sitsmall.ca, display = "sites", scaling = 1)

# 投影3个缺失的样方
newsit3 <- spe[c(7, 13, 22), ]
ca.newsit <- predict(
  sitsmall.ca, 
  newsit3, 
  type = "wa", 
  scaling = 1)
text(
  ca.newsit[, 1],
  ca.newsit[, 2],
  labels = rownames(ca.newsit),
  cex = 0.8,
  col = "blue"
)
图2.3-1
图2.3-2 去掉3个样方的CA排序图- 标尺1
图2.3-3 添加3个样方的CA排序图- 标尺1
# 2型标尺CA下补充物种的投影
spe.small <- spe[, -c(1, 3, 10)]  # 剔除3个物种
spesmall.ca <- cca(spe.small)
dev.new(
  title = "去掉3个物种的CA排序图- 标尺1",
  noRStudioGD = TRUE
)
plot(spesmall.ca, display = "species", scaling = 2)
# 投影3个补充的物种
newspe3 <- spe[, c(1, 3, 10)]
ca.newspe <- predict(
  spesmall.ca, 
  newspe3, 
  type = "sp", 
  scaling = 2)
text(
  ca.newspe[, 1],
  ca.newspe[, 2],
  labels = rownames(ca.newspe),
  cex = 0.8,
  col = "blue"
)
图2.3-4
图2.3-5
图2.3-5

2.4 环境变量的被动曲线拟和

在PCA的学习中,使用函数 envfit()将环境变量投影到(转化的)鱼类数据的PCA双序图。但是,线性拟合和箭头投影仅考虑物种-环境的线性关系。那如何在非线性基础上研究选定的环境变量与排序结果的关联关系,这时就可以在排序图上拟合这些环境变量的趋势面。

使用函数envfit()作为第一步运算,但这次要使用公式模式,并将后加的环境变量限定为2个。该曲线拟合本身是由vegan包里实现广义可加模型平滑二维样条法(GAM)的 ordisurf()函数完成。下面,使用水体流量(dis)和铵浓度(amm)两个变量,如图5.2所示,这两个因子都很重要,并且没有过度相关,比较合适。

接下来我们将添加两个选定环境变量拟合曲面到排序图中:

#CA双序图的曲线拟和
dev.new(
  title = "CA 双序图带环境变量",
  noRStudioGD = TRUE
)
plot(spe.ca, main = "CA 鱼类多度数据-2型标尺", 
     sub = "拟和曲线:水体流量(红色),铵浓度(绿色)")
spe.ca.env <- envfit(spe.ca ~ dis + amm, env)  #第一步运算
plot(spe.ca.env)  # 双箭头
ordisurf(spe.ca, env$dis, add = TRUE)
ordisurf(spe.ca, env$amm, add = TRUE, col = "green")
图2.4-1

可以看到dis(红线)拟合曲面是强烈的非线性,而amm(绿线)表面由平行线组成,表示是线性拟合。

2.5 基于CA排序轴重排数据表格

可以用CA第一轴排序结果重新排列数据表格。可以使用vegan 包里的vegemite()函数输出排序结果,对数据表格进行重新排列。也可以通过tabasco()函数将表变成热图:

# 根据CA结果的物种数据的重排
vegemite(spe, spe.ca)
# 根据CA结果的物种数据的重排后的热图
dev.new(
  title = "CA- 物种数据的重排后的热图", 
  noRStudioGD = TRUE
)
tabasco(spe, spe.ca)
图2.5-1
图2.5-2 CA- 物种数据的重排后的热图

请注意,此表中物种排列顺序和样方排列顺序依赖于排序轴的方向(其实是任意的)。可以发现,单纯基于第一轴的结果重新排列数据表格,并没有选到最性的效果。因为第二轴所反映的上游(样方1~10)到中游(样方11-18)梯度,以及这些样方的特征种,在这个表格里并没有聚集,而是分散的。

好了,这次主要讲了对应分析的概念、如何使用vegan包的cca( ) 函数来进行CA分析,以及如何添加新的点到补充样方等,有什么问题欢迎留言讨论,下一次将继续CA对应分析的其他内容。

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

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

你可能感兴趣的:(非约束排序4 对应分析(CA))