The function partitions the variation in community data or community dissimilarities with respect to two, three, or four explanatory tables, using adjusted R-squared in redundancy analysis ordination (RDA) or distance-based redundancy analysis. If response is a single vector, partitioning is by partial regression. Collinear variables in the explanatory tables do NOT have to be removed prior to partitioning.
1 2 3 4 5 6
Data frame or matrix containing the response data table or
dissimilarity structure inheriting from
Two to four explanatory models, variables or tables. These can
be defined in three alternative ways: (1) one-sided model formulae
The data frame with the variables used in the formulae in
Should the columns of
Add a constant to the non-diagonal values to euclidify
Take square root of dissimilarities. This often
euclidifies dissimilarities. NB., the argument name cannot be
abbreviated. The argument has an effect only when
Number of explanatory tables (circles) displayed.
Labels used for displayed fractions. Default is to use the same letters as in the printed output.
Fill colours of circles or ellipses.
Transparency of the fill colour. The argument takes precedence over possible transparency definitions of the colour. The value must be in range 0...255, and low values are more transparent. Transparency is not available in all graphics devices or file formats.
Names for sources of variation. Default names are
A numerical value giving the character expansion factor for the names of circles or ellipses.
The values below
The number of significant digits; the number of decimal places is at least one higher.
Other parameters passed to functions. NB, arguments after dots cannot be abbreviated but they must be spelt out completely.
The functions partition the variation in
Y into components
accounted for by two to four explanatory tables and their combined
Y is a multicolumn data frame or matrix, the
partitioning is based on redundancy analysis (RDA, see
rda), and if
Y is a single variable, the
partitioning is based on linear regression. If
dissimilarities, the decomposition is based on distance-based
redundancy analysis (db-RDA, see
McArdle & Anderson (2001). The input dissimilarities must be
compatible to the results of
dist. Vegan functions
betadiver produce such
objects, as do many other dissimilarity functions in R
packages. However, symmetric square matrices are not recognized as
dissimilarities but must be transformed with
Partitioning will be made to squared dissimilarities analogously to
using variance with rectangular data – unless
sqrt.dist = TRUE
The function primarily uses adjusted R-squared to assess the partitions explained by the explanatory tables and their combinations, because this is the only unbiased method (Peres-Neto et al., 2006). The raw R-squared for basic fractions are also displayed, but these are biased estimates of variation explained by the explanatory table.
The identifiable fractions are designated by lower case alphabets. The
meaning of the symbols can be found in the separate document (use
browseVignettes("vegan")), or can be displayed graphically
A fraction is testable if it can be directly expressed as an RDA or
db-RDA model. In these cases the printed output also displays the
corresponding RDA model using notation where explanatory tables after
| are conditions (partialled out; see
details). Although single fractions can be testable, this does not
mean that all fractions simultaneously can be tested, since the number
of testable fractions is higher than the number of estimated models.
An abridged explanation of the alphabetic symbols for the individual
fractions follows, but computational details should be checked in the
vignette (readable with
browseVignettes("vegan")) or in the
With two explanatory tables, the fractions explained
uniquely by each of the two tables are
[c], and their joint effect
[b] following Borcard et al. (1992).
With three explanatory tables, the fractions explained uniquely
by each of the three tables are
[c], joint fractions between two tables are
[f], and the joint fraction between all three
With four explanatory tables, the fractions explained uniquely by each
of the four tables are
[d], joint fractions between two tables are
[j], joint fractions between three variables are
[n], and the joint fraction between all four tables is
There is a
plot function that displays the Venn diagram and
labels each intersection (individual fraction) with the adjusted R
squared if this is higher than
cutoff. A helper function
showvarpart displays the fraction labels. The circles and
ellipses are labelled by short default names or by names defined by
the user in argument
Xnames. Longer explanatory file names can
be written on the varpart output plot as follows: use option
Xnames=NA, then add new names using the
text function. A
bit of fiddling with coordinates (see
character size should allow users to place names of reasonably short
lengths on the
varpart returns an
object of class
"varpart" with items
transfo (can be missing) which hold information on
tables which contains names of explanatory
call with the function
varpart calls function
varpart4 which return an object of class
"varpart234" and saves its result in the item
The items in this object are:
Sum of squares of matrix
Number of observations (rows).
Number of explanatory tables
Warnings on collinearity.
Basic fractions from all estimated constrained models.
Individual fractions or all possible subsections in
the Venn diagram (see
Fractions that can be found after conditioning on single explanatory table in models with three or four explanatory tables.
Fractions that can be found after conditioning on two explanatory tables in models with four explanatory tables.
contr2 are all data frames with
Df: Degrees of freedom of numerator of the F-statistic
for the fraction.
R.square: Raw R-squared. This is calculated only for
fract and this is
NA in other items.
Adj.R.square: Adjusted R-squared.
Testable: If the fraction can be expressed as a (partial) RDA
model, it is directly
Testable, and this field is
TRUE. In that case the fraction label also gives the
specification of the testable RDA model.
You can use command
browseVignettes("vegan") to display
document which presents Venn diagrams showing the fraction names in
partitioning the variation of Y with respect to 2, 3, and 4 tables of
explanatory variables, as well as the equations used in variation
The functions frequently give negative estimates of variation.
Adjusted R-squared can be negative for any fraction;
unadjusted R-squared of testable fractions of variances
will be non-negative. Non-testable fractions cannot be found
directly, but by subtracting different models, and these subtraction
results can be negative. The fractions are orthogonal, or linearly
independent, but more complicated or nonlinear dependencies can
cause negative non-testable fractions. Any fraction can be negative
for non-Euclidean dissimilarities because the underlying db-RDA model
can yield negative eigenvalues (see
dbrda). These negative eigenvalues in the underlying
analysis can be avoided with arguments
which have a similar effect as in
capscale: the square
roots of several dissimilarities do not have negative eigenvalues, and
no negative eigenvalues are produced after Lingoes or Cailliez
adjustment, which in effect add random variation to the
The current function will only use RDA in multivariate partitioning. It is much more complicated to estimate the adjusted R-squares for CCA, and unbiased analysis of CCA is not currently implemented.
A simplified, fast version of RDA or dbRDA are used (functions
simpleDBRDA). The actual calculations
are done in functions
varpart4, but these
are not intended to be called directly by the user.
Pierre Legendre, Departement de Sciences Biologiques, Universite de Montreal, Canada. Further developed by Jari Oksanen.
(a) References on variation partitioning
Borcard, D., P. Legendre & P. Drapeau. 1992. Partialling out the spatial component of ecological variation. Ecology 73: 1045–1055.
Legendre, P. & L. Legendre. 2012. Numerical ecology, 3rd English edition. Elsevier Science BV, Amsterdam.
(b) Reference on transformations for species data
Legendre, P. and E. D. Gallagher. 2001. Ecologically meaningful transformations for ordination of species data. Oecologia 129: 271–280.
(c) Reference on adjustment of the bimultivariate redundancy statistic
Peres-Neto, P., P. Legendre, S. Dray and D. Borcard. 2006. Variation partitioning of species data matrices: estimation and comparison of fractions. Ecology 87: 2614–2625.
(d) References on partitioning of dissimilarities
Legendre, P. & Anderson, M. J. (1999). Distance-based redundancy analysis: testing multispecies responses in multifactorial ecological experiments. Ecological Monographs 69, 1–24.
McArdle, B.H. & Anderson, M.J. (2001). Fitting multivariate models to community data: a comment on distance-based redundancy analysis. Ecology 82, 290-297.
For analysing testable fractions, see
anova.cca. For data transformation, see
(unadjusted) components of variation for each species or site
rda displays unadjusted
components in its output, but
RsquareAdj will give
adjusted R-squared that are similar to the current
function also for partial models.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
data(mite) data(mite.env) data(mite.pcnm) # Two explanatory matrices -- Hellinger-transform Y # Formula shortcut "~ ." means: use all variables in 'data'. mod <- varpart(mite, ~ ., mite.pcnm, data=mite.env, transfo="hel") mod ## Use fill colours showvarparts(2, bg = c("hotpink","skyblue")) plot(mod, bg = c("hotpink","skyblue")) # Alternative way of to conduct this partitioning # Change the data frame with factors into numeric model matrix mm <- model.matrix(~ SubsDens + WatrCont + Substrate + Shrub + Topo, mite.env)[,-1] mod <- varpart(decostand(mite, "hel"), mm, mite.pcnm) # Test fraction [a] using partial RDA: aFrac <- rda(decostand(mite, "hel"), mm, mite.pcnm) anova(aFrac, step=200, perm.max=200) # RsquareAdj gives the same result as component [a] of varpart RsquareAdj(aFrac) # Partition Bray-Curtis dissimilarities varpart(vegdist(mite), ~ ., mite.pcnm, data = mite.env) # Three explanatory matrices mod <- varpart(mite, ~ SubsDens + WatrCont, ~ Substrate + Shrub + Topo, mite.pcnm, data=mite.env, transfo="hel") mod showvarparts(3, bg=2:4) plot(mod, bg=2:4) # An alternative formulation of the previous model using # matrices mm1 amd mm2 and Hellinger transformed species data mm1 <- model.matrix(~ SubsDens + WatrCont, mite.env)[,-1] mm2 <- model.matrix(~ Substrate + Shrub + Topo, mite.env)[, -1] mite.hel <- decostand(mite, "hel") mod <- varpart(mite.hel, mm1, mm2, mite.pcnm) # Use RDA to test fraction [a] # Matrix can be an argument in formula rda.result <- rda(mite.hel ~ mm1 + Condition(mm2) + Condition(as.matrix(mite.pcnm))) anova(rda.result, step=200, perm.max=200) # Four explanatory tables mod <- varpart(mite, ~ SubsDens + WatrCont, ~Substrate + Shrub + Topo, mite.pcnm[,1:11], mite.pcnm[,12:22], data=mite.env, transfo="hel") mod plot(mod, bg=2:5) # Show values for all partitions by putting 'cutoff' low enough: plot(mod, cutoff = -Inf, cex = 0.7, bg=2:5)
Loading required package: permute Loading required package: lattice This is vegan 2.4-3 Partition of variance in RDA Call: varpart(Y = mite, X = ~., mite.pcnm, data = mite.env, transfo = "hel") Species transformation: hellinger Explanatory tables: X1: ~. X2: mite.pcnm No. of explanatory tables: 2 Total variation (SS): 27.205 Variance: 0.39428 No. of observations: 70 Partition table: Df R.squared Adj.R.squared Testable [a+b] = X1 11 0.52650 0.43670 TRUE [b+c] = X2 22 0.62300 0.44653 TRUE [a+b+c] = X1+X2 33 0.75893 0.53794 TRUE Individual fractions [a] = X1|X2 11 0.09141 TRUE [b] 0 0.34530 FALSE [c] = X2|X1 22 0.10124 TRUE [d] = Residuals 0.46206 FALSE --- Use function 'rda' to test significance of fractions of interest Permutation test for rda under reduced model Permutation: free Number of permutations: 999 Model: rda(X = decostand(mite, "hel"), Y = mm, Z = mite.pcnm) Df Variance F Pr(>F) Model 11 0.053592 1.8453 0.001 *** Residual 36 0.095050 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 $r.squared  0.1359251 $adj.r.squared  0.09140797 Partition of squared Bray distance in dbRDA Call: varpart(Y = vegdist(mite), X = ~., mite.pcnm, data = mite.env) Explanatory tables: X1: ~. X2: mite.pcnm No. of explanatory tables: 2 Total variation (SS): 14.696 No. of observations: 70 Partition table: Df R.squared Adj.R.squared Testable [a+b] = X1 11 0.50512 0.41127 TRUE [b+c] = X2 22 0.60144 0.41489 TRUE [a+b+c] = X1+X2 33 0.74631 0.51375 TRUE Individual fractions [a] = X1|X2 11 0.09887 TRUE [b] 0 0.31240 FALSE [c] = X2|X1 22 0.10249 TRUE [d] = Residuals 0.48625 FALSE --- Use function 'capscale' to test significance of fractions of interest Partition of variance in RDA Call: varpart(Y = mite, X = ~SubsDens + WatrCont, ~Substrate + Shrub + Topo, mite.pcnm, data = mite.env, transfo = "hel") Species transformation: hellinger Explanatory tables: X1: ~SubsDens + WatrCont X2: ~Substrate + Shrub + Topo X3: mite.pcnm No. of explanatory tables: 3 Total variation (SS): 27.205 Variance: 0.39428 No. of observations: 70 Partition table: Df R.square Adj.R.square Testable [a+d+f+g] = X1 2 0.32677 0.30667 TRUE [b+d+e+g] = X2 9 0.40395 0.31454 TRUE [c+e+f+g] = X3 22 0.62300 0.44653 TRUE [a+b+d+e+f+g] = X1+X2 11 0.52650 0.43670 TRUE [a+c+d+e+f+g] = X1+X3 24 0.67372 0.49970 TRUE [b+c+d+e+f+g] = X2+X3 31 0.72400 0.49884 TRUE [a+b+c+d+e+f+g] = All 33 0.75893 0.53794 TRUE Individual fractions [a] = X1 | X2+X3 2 0.03910 TRUE [b] = X2 | X1+X3 9 0.03824 TRUE [c] = X3 | X1+X2 22 0.10124 TRUE [d] 0 0.01407 FALSE [e] 0 0.09179 FALSE [f] 0 0.08306 FALSE [g] 0 0.17045 FALSE [h] = Residuals 0.46206 FALSE Controlling 1 table X [a+d] = X1 | X3 2 0.05317 TRUE [a+f] = X1 | X2 2 0.12216 TRUE [b+d] = X2 | X3 9 0.05231 TRUE [b+e] = X2 | X1 9 0.13003 TRUE [c+e] = X3 | X1 22 0.19303 TRUE [c+f] = X3 | X2 22 0.18429 TRUE --- Use function 'rda' to test significance of fractions of interest Permutation test for rda under reduced model Permutation: free Number of permutations: 999 Model: rda(formula = mite.hel ~ mm1 + Condition(mm2) + Condition(as.matrix(mite.pcnm))) Df Variance F Pr(>F) Model 2 0.013771 2.6079 0.001 *** Residual 36 0.095050 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Partition of variance in RDA Call: varpart(Y = mite, X = ~SubsDens + WatrCont, ~Substrate + Shrub + Topo, mite.pcnm[, 1:11], mite.pcnm[, 12:22], data = mite.env, transfo = "hel") Species transformation: hellinger Explanatory tables: X1: ~SubsDens + WatrCont X2: ~Substrate + Shrub + Topo X3: mite.pcnm[, 1:11] X4: mite.pcnm[, 12:22] No. of explanatory tables: 4 Total variation (SS): 27.205 Variance: 0.39428 No. of observations: 70 Partition table: Df R.square Adj.R.square Testable [aeghklno] = X1 2 0.32677 0.30667 TRUE [befiklmo] = X2 9 0.40395 0.31454 TRUE [cfgjlmno] = X3 11 0.53231 0.44361 TRUE [dhijkmno] = X4 11 0.09069 -0.08176 TRUE [abefghiklmno] = X1+X2 11 0.52650 0.43670 TRUE [acefghjklmno] = X1+X3 13 0.59150 0.49667 TRUE [adeghijklmno] = X1+X4 13 0.40374 0.26533 TRUE [bcefgijklmno] = X2+X3 20 0.63650 0.48813 TRUE [bdefhijklmno] = X2+X4 20 0.53338 0.34292 TRUE [cdfghijklmno] = X3+X4 22 0.62300 0.44653 TRUE [abcefghijklmno] = X1+X2+X3 22 0.67947 0.52944 TRUE [abdefghijklmno] = X1+X2+X4 22 0.61553 0.43557 TRUE [acdefghijklmno] = X1+X3+X4 24 0.67372 0.49970 TRUE [bcdefghijklmno] = X2+X3+X4 31 0.72400 0.49884 TRUE [abcdefghijklmno] = All 33 0.75893 0.53794 TRUE Individual fractions [a] = X1 | X2+X3+X4 2 0.03910 TRUE [b] = X2 | X1+X3+X4 9 0.03824 TRUE [c] = X3 | X1+X2+X4 11 0.10237 TRUE [d] = X4 | X1+X2+X3 11 0.00850 TRUE [e] 0 0.01407 FALSE [f] 0 0.13200 FALSE [g] 0 0.05355 FALSE [h] 0 0.00220 FALSE [i] 0 -0.00547 FALSE [j] 0 -0.00963 FALSE [k] 0 -0.00231 FALSE [l] 0 0.24037 FALSE [m] 0 -0.03474 FALSE [n] 0 0.02730 FALSE [o] 0 -0.06761 FALSE [p] = Residuals 0 0.46206 FALSE Controlling 2 tables X [ae] = X1 | X3+X4 2 0.05317 TRUE [ag] = X1 | X2+X4 2 0.09265 TRUE [ah] = X1 | X2+X3 2 0.04131 TRUE [be] = X2 | X3+X4 9 0.05231 TRUE [bf] = X2 | X1+X4 9 0.17024 TRUE [bi] = X2 | X1+X3 9 0.03277 TRUE [cf] = X3 | X1+X4 11 0.23437 TRUE [cg] = X3 | X2+X4 11 0.15592 TRUE [cj] = X3 | X1+X2 11 0.09274 TRUE [dh] = X4 | X2+X3 11 0.01071 TRUE [di] = X4 | X1+X3 11 0.00303 TRUE [dj] = X4 | X1+X2 11 -0.00113 TRUE Controlling 1 table X [aghn] = X1 | X2 2 0.12216 TRUE [aehk] = X1 | X3 2 0.05306 TRUE [aegl] = X1 | X4 2 0.34709 TRUE [bfim] = X2 | X1 9 0.13003 TRUE [beik] = X2 | X3 9 0.04452 TRUE [befl] = X2 | X4 9 0.42468 TRUE [cfjm] = X3 | X1 11 0.19000 TRUE [cgjn] = X3 | X2 11 0.17359 TRUE [cfgl] = X3 | X4 11 0.52830 TRUE [dijm] = X4 | X1 11 -0.04134 TRUE [dhjn] = X4 | X2 11 0.02837 TRUE [dhik] = X4 | X3 11 0.00292 TRUE --- Use function 'rda' to test significance of fractions of interest
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.