Chapter 7 Partial Redundancy Analysis - Workshop 10 - Advanced Multivariate Analyses in R
Chapter 7 Partial Redundancy Analysis - Workshop 10 - Advanced Multivariate Analyses in R
Partial RDA is a special case of RDA in which the response variables Y are related to
explanatory variables X in the presence of additional explanatory variables W , called
covariates (or covariables). As in partial linear regression, the linear effect of X variables on
the Y variables are adjusted for the effects of the covariates W . For this, a RDA of the
covariables W on the response variables Y is first performed. The residuals of this RDA are
then extracted, i.e. a matrix Yres |W containing the Y response variables in which the effect of
W was removed. The partial RDA corresponds to the RDA of X on Yres |W . All statistics
previously presented for RDA also apply for partial RDA.
Partial RDA has several applications. It is a powerful tool when users what to assess the effect
of environmental variables on species composition while taking into account the variation due
to other environmental variables that are not the focus of the study. A common example of
this in community ecology is to test the importance of environmental variables while controlling
for the effect of space. Partial RDA can also be used to control for well-known linear effects, to
isolate the effect of a single explanatory variable, or to analyse related samples.
7.1 Example: Partial RDA on Doubs River data
In R , a partial RDA is performed in the same way as the RDA we used previously, using
rda() . As a demonstration, let’s assess the effect of water chemistry on fish species
# chemistry variables
env.topo <- subset(env.z, select = c(alt, pen, deb))
env.chem <- subset(env.z, select = c(pH, dur, pho, nit, amm,
oxy, dbo))
Note: You can also use a formula syntax like Y ~ X + Condition(W) , where
Condition() allows you to control for the covariates.
The output of a partial RDA is very similar to the output discussed in the previous section on
RDA. The key difference is that we have covariates in our model, which means we can see
how much variation is explained by these additional, but not “interesting” variables. Once
again, the first section of the summary contains the pieces we need to verify the performance
of our partial RDA. Let us break it down:
summary(spe.partial.rda)
...
## Partitioning of variance:
## Inertia Proportion
## Total 0.5025 1.0000
## Conditioned 0.2087 0.4153
How would you report these results? You could say something like: “Water chemistry
explains 31.9% of the variation in fish community composition across sites, while
topography explains 41.5% of this variation.”
As with the RDA, we can interpret the significance of our model with two key pieces of
information.
## [1] 0.2413464
## Df Variance F Pr(>F)
## Model 7 0.16024 3.0842 0.001 ***
## Residual 18 0.13360
...
Our model explains 24.1% of the variation in fish abundance across sites. It is also
statistically significant (p = 0.001)!
We can visualise the effects of the environmental variables on the fish community with the
ordiplot() function.
The partial RDA only adjusts the effects of the explanatory variables
according to the covariates. The covariates are not of interest, and are
therefore not plotted.
7.2 Challenge 2
Run a partial RDA to model the effects of environmental variables on mite species abundances
( mite.spe.hel ), while controlling for substrate variables ( SubsDens , WatrCont , and
Substrate ). * What is the variance explained by substrate variables? * Is the model
rda()
summary()
RsquareAdj()
anova.cca() # hint: see the 'by' argument in ?anova.cca
# Check summary
summary(mite.spe.subs)
...
## Partitioning of variance:
## Inertia Proportion
## Total 0.39428 1.00000
## Conditioned 0.16891 0.42839
## Constrained 0.03868 0.09811
Shrub and Topo explain 9.8% of the variation in mite species abundances, while substrate
covariables explain 42.8% of this variation.
RsquareAdj(mite.spe.subs)$adj.r.squared
## [1] 0.08327533
## Df Variance F Pr(>F)
## Model 3 0.038683 4.006 0.001 ***
## Residual 58 0.186688
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Model: rda(formula = mite.spe.hel ~ Shrub + Topo + Condition(SubsDens + WatrCont + Su
## Df Variance F Pr(>F)
## RDA1 1 0.027236 8.4618 0.001 ***
## RDA2 1 0.008254 2.5643 0.017 *
## RDA3 1 0.003193 0.9919 0.435
## Residual 58 0.186688
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1