代谢性酸中毒原因

首页 » 常识 » 诊断 » CCA和RDA分析绘图和深度解析
TUhjnbcbe - 2025/1/9 23:28:00

简介:本节我们将为大家介绍两种非对称约束排序分析方法,分别是典范对应分析(CCA)冗余分析(RDA)。两者的计算原理我们就不再过多的赘述,网络上已经有很多相关介绍了。本节我们的重点主要是这两个排序分析能做什么?要注意什么?以及如何在R中绘图。(本节内容均为干货,建议收藏转发)

1、如何选择RDA还是CCA

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

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

代码如下:

library(tidyverse)

library(vegan)

#loaddata

data("varespec")#species

data("varechem")#env

#选择RDA和CCA的依据

decorana(veg=varespec)

#Call:

#decorana(veg=varespec)

#Detrendedcorrespondenceanalysiswith26segments.

#Rescalingofaxeswith4iterations.

#DCA1DCA2DCA3DCA4

#Eigenvalues0....

#Decoranavalues0....

#Axislengths2....

很明显,我们看到所有的轴的长度均小于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)除以对应的Totalinertia

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

在CCA分析中,CCA1对物种分布的解释量=0./2.*%=21.07%

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

summary(test.rda)

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

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

运行以下代码可以获得

RsquareAdj(test.rda)

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

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

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

RDA1:0.*0.=0.,也就是21.92%

RDA2:0.*0.=0.,也就是10.67%

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

我认为应该

1)先计算校正值即:0./0.=0.

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

RDA1:0.*0.=0.

RDA2:0.*0.=0.

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

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

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

permutest(test.rda,permu=)

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

每个因子的重要性:

envfit(test.rda,varechem,permu=)

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

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

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

3、结果绘图

scrs-scores(test.rda,display=c("sp","wa","lc","bp","cn"))

#alist

#计算箭头变化倍数并计算箭头的长度

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(Humdepth2.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="#",alpha=0.5)+#画箭头

geom_text(data=as.data.frame(df_arrows*1.1),aes(RDA1,RDA2,label=rownames(df_arrows2)),

color="#",alpha=0.7)+#箭头对应的信息

scale_color_manual(values=c("#","#e00"))+#点的颜色

#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分析应该是这样的:

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

欢迎在

1
查看完整版本: CCA和RDA分析绘图和深度解析