CCA和RDA分析—那些你知道和不知道的

“知其然,必知其所以然”
"R实战"专题·第14篇
  编辑 | free傻孩子
  4456字 |12分钟阅读
本期推送内容
本节我们将为大家介绍两种非对称约束排序分析方法,分别是典范对应分析(CCA)冗余分析(RDA)。两者的计算原理我们就不再过多的赘述,网络上已经有很多相关介绍了。本节我们的重点主要是这两个排序分析能做什么?要注意什么?以及如何在R中绘图。(本节内容均为干货,建议收藏  转发)

1、如何选择RDA还是CCA

无论是RDA分析还是CCA分析,都需要两个数据框(data.frame)[已经对行名和列名进行了定义,行名为样方,列名为物种变量或者环境变量],分别是环境因子数据和物种数据。

我们面临的第一问题是如何选择这两种排序分析,曾经有人建议使用vegan包里面的decorana函数来判断是选择RDA还是CCA。具体的,通过运行该函数,如果前4个轴的所有轴长度均小于3则选择RDA分析,如果4个轴中存在一个轴的长度大于4则选择CCA分析。

代码如下:

library(tidyverse)
library(vegan)
#load data
data("varespec")#species
data("varechem")#env
#选择RDA和CCA的依据
decorana(veg = varespec)

#Call:
#  decorana(veg = varespec)

#Detrended correspondence analysis with 26 segments.
#Rescaling of axes with 4 iterations.

#                DCA1 DCA2 DCA3 DCA4
#Eigenvalues 0.5235 0.3253 0.20010 0.19176
#Decorana values 0.5249 0.1572 0.09669 0.06075
#Axis lengths 2.8161 2.2054 1.54650 1.64864

很明显,我们看到所有的轴的长度均小于3,因此通过该方法预测,我们应该选择RDA分析。当然,如果你并不相信以上运算的结果,比较稳健的方法是同时计算RDA和CCA比较这两个分析中环境因子对物种分布的解释量大小,选择解释量大的那种方法即可。

2、RDA和CCA

test.rda<-rda(varespec,varechem)#RDA分析
test.rda#79.97%
test.cca<-cca(varespec,varechem)#RDA分析
test.cca#69.20%

通过同时做RDA和CCA我们发现,在RDA中环境因子对物种分布的解释量更高。

对结果的解读

constrained(约束)指自变量(环境)矩阵能对因变量矩阵(物种)的整体解释量,如RDA分析中的79.97%和CCA分析中的69.20%。

unconstrained(非约束)指还剩下的没有被解释的部分,如RDA分析中的20.03%和CCA分析中的30.80%。

如何获得每一个轴的解释量

1)使用每个轴对应的特征值(eigenvalues)除以对应的Total inertia

如:在RDA 分析中RDA1对物种分布的解释量 = 820.1/1825.6594 * 100% = 44.92%

在CCA分析中,CCA1对物种分布的解释量 = 0.4389/2.0832 *100% = 21.07%

2) 使用summary函数,代码和结果如下:

summary(test.rda)

注意:RDA和CCA中,每一轴对结果的解释量为“Eigenvalues, their contribution to the variance”(引擎值以及它们对方差的贡献)下的结果,而不是“Accumulated constrained eigenvalues”(累积约束引擎值)下的结果。后者,指的是每一个轴在整体解释量中的重要性。比如,RDA分析中整体解释量为79.97%,RDA1轴的解释量为44.92%,那么RDA1轴对整体解释量的重要性为:44.92/79.97 * 100%  = 56.17%

如何获得RDA和CCA分析的校正解释量和未校正解释量

运行以下代码可以获得

RsquareAdj(test.rda)

我们看到RDA的校正解释量为48.80%;未校正解释量为79.97%

同理,CCA中校正解释量和非校正解释量也能用以上的方法算得(注:在后续的所有适用于RDA的分析同样都适用于CCA)。

校正RDA1和RDA2的解释量分别为:

RDA1: 0.4880 * 0.4492 = 0.2192,也就是21.92%

RDA2: 0.4880*0.2187 = 0.1067 ,也就是10.67%

上面这个获得每一轴校正解释量的方法是,(数量生态学)中给出的方法。但是,我觉得这种直接使用校正解释量乘以每个轴的解释量,获得每轴校正解释量的方法似乎并不符合逻辑。

我认为应该

1) 先计算校正值即:0.4880/0.7997 = 0.6102

2) 计算每一轴的校正解释量,即:

RDA1: 0.6102*0.4492 = 0.2741

RDA2: 0.6102*0.2187 = 0.1335

(如有错误之处,敬请指正)

如何获知,RDA分析中和CCA分析中整体模型是否显著以及每个变量的重要性

使用以下代码可以验证模型的显著性和每个变量的重要性:

permutest(test.rda,permu=999)

通过999次置换检验证明了在RDA中环境因子显著影响物种分布(p = 0.002)。

每个因子的重要性:

envfit(test.rda,varechem,permu=999)

结果表明,Mo对物种分布的影响不显著,可能是不重要的环境因子。

简单出图,对照以上结果:

plot(test.rda,display=c("si","bp"),scaling=3)#只显示样方数据位置

3、结果绘图

scrs<-scores(test.rda,display=c("sp","wa","lc","bp","cn"))
#a list
#计算箭头变化倍数并计算箭头的长度
multiplier <- vegan:::ordiArrowMul(scrs$biplot)
df_arrows<- scrs$biplot*multiplier
df_arrows %>%
data.frame() ->df_arrows2
df_arrows2

#提取样方坐标(一般我们都是通过样方来绘RDA的而不是物种)

sites <- scrs$sites %>%
as_tibble(rownames = "sample")
sites

这里sample下的数字就是我们的样方名,我们用的是vegan中自带的数据,所以没有样方名,只是一串数字,如果是自己的数据,那么这里应该是具体的样方名。

#分组
#我们根据环境变量varechem中的Humdepth对数据分成两个组,操作如下
varechem %>%
as_tibble(rownames = "sample") %>%
select(sample, Humdepth) %>%
mutate(group = if_else(Humdepth < 2.2,"deep","shallow")) ->group
group
#把分组加到样方数据(sites)中并最终绘图
sites %>%
left_join(group, by = "sample") %>%
ggplot(aes(x = RDA1, y=RDA2))+
geom_hline(aes(yintercept=0),colour="#d8d6d6",linetype=5)+
geom_vline(aes(xintercept=0),colour="#d8d6d6",linetype=5)+
geom_point(aes(color=group),size=3.5,shape=16) +
geom_segment(data=df_arrows2, aes(x = 0, y = 0, xend = RDA1, yend = RDA2),
arrow = arrow(angle= 15,length = unit(0.25, "cm")),color="#000000",alpha=0.5)+#画箭头
geom_text(data=as.data.frame(df_arrows*1.1),aes(RDA1, RDA2, label = rownames(df_arrows2)),
color="#000000",alpha=0.7)+#箭头对应的信息
scale_color_manual(values = c("#005991","#910e00"))+#点的颜色
#scale_x_continuous(limits = c(-6,10))+
#scale_y_continuous(limits = c(-12,5))+
labs(x = "RDA1 (27.41%)", y = "RDA2 (13.35%)")+
theme_bw() +
theme(panel.grid=element_blank())

注意:如果不使用校正解释量也是可以的。那样的话这个RDA分析应该是这样的:

#把分组加到样方数据(sites)中并最终绘图
sites %>%
left_join(group, by = "sample") %>%
ggplot(aes(x = RDA1, y=RDA2))+
geom_hline(aes(yintercept=0),colour="#d8d6d6",linetype=5)+
geom_vline(aes(xintercept=0),colour="#d8d6d6",linetype=5)+
geom_point(aes(color=group),size=3.5,shape=16) +
geom_segment(data=df_arrows2, aes(x = 0, y = 0, xend = RDA1, yend = RDA2),
arrow = arrow(angle= 15,length = unit(0.25, "cm")),color="#000000",alpha=0.5)+#画箭头
geom_text(data=as.data.frame(df_arrows*1.1),aes(RDA1, RDA2, label = rownames(df_arrows2)),
color="#000000",alpha=0.7)+#箭头对应的信息
scale_color_manual(values = c("#005991","#910e00"))+#点的颜色
#scale_x_continuous(limits = c(-6,10))+
#scale_y_continuous(limits = c(-12,5))+
labs(x = "RDA1 (44.92%)", y = "RDA2 (21.87%)")+
theme_bw() +
theme(panel.grid=element_blank())

创作不易:欢迎收藏、转发。

(0)

相关推荐

  • 技术贴 | R语言:ggplot绘图的Y轴截断和拼接

    导读 记录一个产生Y轴截断ggplot绘图的方法.先用coord_cartesian根据Y轴把图截断成上下两份,接着用ggarrange拼接到一起,实现去不要的部分 一.准备依赖包 ggarrange ...

  • RDA_环境因子_群落结构_统计检验_可视化

    RDA环境因子群落结构统计检验可视化 环境因子的筛选及数据的转化方面请参阅宏基因组公众号之前的推文,本文主要侧重统计分析与可视化 看到师兄文章里的图自己可能用到,想复现一下,于是就尝试了一下,顺便写个 ...

  • 堆叠柱状图也要做统计-标记显著性

    写在前面 有时候我们展示的指标有一定的关系,希望可以使用堆叠柱状图展示.许多朋友们问询,这样如何添加显著性标记,因此本期结合EasyStat包给大家做一个演示. R 包导入 ## 导入包 librar ...

  • 圣诞前送你们一朵使用ggplot画的玫瑰花

    library(tidyverse) 一只花柄 p <- ggplot() + coord_equal(1, c(-4, 2), c(-7, 3)) + geom_curve(aes(x = - ...

  • R之箱线图绘制

    16s分析一直在连载,但是最基础的莫过于alpha多样性了,但是箱线图却不是alpha多样性的唯一选择,箱线图也不是局限于alpha多样性,这里借助alpha多样性,将箱线图做一个完整绘制 #这里安装 ...

  • CCA典型关联分析原理与Python案例

    更多技术干货第一时间送达 Hello,大家好! Rose小哥今天分享一下CCA的相关原理以及Python应用,CCA在EEG等脑电数据的特征提取中使用很多,很有必要熟悉其原理. CCA典型相关分析 C ...

  • 这才是真正意义上的技术分析,绝大多数人却不知

    在交易之前,我们着重会分析历史价格和未来价格的关系,其目的是通过形成的分析事实来评价判断将要发生的事情,但从实战的角度来讲,这仅仅是万里长征走完里第一步.相对真金白银的实战投资,其着眼点更应该是研究价 ...

  • 技术贴 | 微生太宏基因组报告解读 | 第四篇:PCoA、NMDS、RDA/CCA、相关分析

    本文由阿童木根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 导读 本篇内容分为以下三块:(1)NMDS和PCoA分析:上一篇的多样性分析中介绍了利用QIIME2进行PCoA分析研究菌 ...

  • 面相分析:如何从面相去判断一个人的穷富

    注:本文转载自网络,如有侵权,请联系删除谢谢. 虽说每个人都渴望自己的物质生活条件可以更富裕一些,但赚钱的多少并不是单纯的只是看自己的能力或者付出的多少,同时也要看自身的气运.有些人似乎天生就是富贵命 ...

  • 你买的公司值不值这个钱?杜邦分析法ROE,就看这三点

    你买的公司值不值这个钱?杜邦分析法ROE,就看这三点

  • 解决不良?看这个图解8D分析法。直观明了!

    8D(8 Disciplines)即问题解决8步法,最早是福特公司使用的经典质量问题分析手法,对于解决工厂中存在的问题是一个很有用的工具,尤其在面对重大不良时,它能建立一个体系,让整个团队共享信息,并 ...

  • 面相分析:有唇珠的人面相分析 唇珠在面相中代表什么

    注:本文转载自网络,如有侵权,请联系删除谢谢. 有唇珠的人有福气吗?今天,小编为大家带来有唇珠的人面相分析,告诉你唇珠在面相中代表什么.有唇珠的嘴唇,微闭微张时,唇珠非常的明显,两唇之间的弓形弧度非常 ...

  • 桂枝汤及其加味方方证分析

    临证加减再变通,是中医临床遣方用药的原则之一.一些配伍合理.用药简约.疗效确切的经典名方(可称为"母方")在临床运用时,往往会根据患者个体病证特征进行化裁,从而变化产生许多新的有效 ...

  • 【分析】最新肉鸡、肉鸭以及生猪养殖成本收益测算分析

    水禽行情网 水禽产业供需行情资深通讯老兵,养殖.冻品.行业热点一网打尽-- 22篇原创内容 公众号 一季度:猪牛羊盈利,家禽处于盈亏线 ★生猪:生猪(按育肥猪平均体重110公斤)自繁自育每公斤成本20 ...