vegan (version 2.6-4)

decorana: Detrended Correspondence Analysis and Basic Reciprocal Averaging


Performs detrended correspondence analysis and basic reciprocal averaging or orthogonal correspondence analysis.


decorana(veg, iweigh=0, iresc=4, ira=0, mk=26, short=0,
         before=NULL, after=NULL)

# S3 method for decorana plot(x, choices=c(1,2), origin=TRUE, display=c("both","sites","species","none"), cex = 0.8, cols = c(1,2), type, xlim, ylim, ...)

# S3 method for decorana text(x, display = c("sites", "species"), labels, choices = 1:2, origin = TRUE, select, ...)

# S3 method for decorana points(x, display = c("sites", "species"), choices=1:2, origin = TRUE, select, ...)

# S3 method for decorana summary(object, digits=3, origin=TRUE, display=c("both", "species","sites","none"), ...)

# S3 method for summary.decorana print(x, head = NA, tail = head, ...)

downweight(veg, fraction = 5)

# S3 method for decorana scores(x, display="sites", choices=1:4, origin=TRUE, tidy=FALSE, ...)


decorana returns an object of class "decorana", which has print, summary, scores, plot,

points and text methods, and support functions

eigenvals, bstick, screeplot,

predict and tolerance. downweight is an independent function that can also be used with other methods than




Community data, a matrix-like object.


Downweighting of rare species (0: no).


Number of rescaling cycles (0: no rescaling).


Type of analysis (0: detrended, 1: basic reciprocal averaging).


Number of segments in rescaling.


Shortest gradient to be rescaled.


Hill's piecewise transformation: values before transformation.


Hill's piecewise transformation: values after transformation -- these must correspond to values in before.

x, object

A decorana result object.


Axes shown.


Use true origin even in detrended correspondence analysis.


Display only sites, only species, both or neither.


Plot character size.


Colours used for sites and species.


Type of plots, partial match to "text", "points" or "none".


Optional text to be used instead of row names.


Items to be displayed. This can either be a logical vector which is TRUE for displayed items or a vector of indices of displayed items.

xlim, ylim

the x and y limits (min,max) of the plot.


Number of digits in summary output.

head, tail

Number of rows printed from the head and tail of species and site scores. Default NA prints all.


Abundance fraction where downweighting begins.


Return scores that are compatible with ggplot2: all scores are in a single data.frame, score type is identified by factor variable score ("sites", "species"), the names by variable label. These scores are incompatible with conventional plot functions, but they can be used in ggplot2.


Other arguments for plot function.


Mark O. Hill wrote the original Fortran code, the R port was by Jari Oksanen.


In late 1970s, correspondence analysis became the method of choice for ordination in vegetation science, since it seemed better able to cope with non-linear species responses than principal components analysis. However, even correspondence analysis can produce an arc-shaped configuration of a single gradient. Mark Hill developed detrended correspondence analysis to correct two assumed ‘faults’ in correspondence analysis: curvature of straight gradients and packing of sites at the ends of the gradient.

The curvature is removed by replacing the orthogonalization of axes with detrending. In orthogonalization successive axes are made non-correlated, but detrending should remove all systematic dependence between axes. Detrending is performed using a smoothing window on mk segments. The packing of sites at the ends of the gradient is undone by rescaling the axes after extraction. After rescaling, the axis is supposed to be scaled by ‘SD’ units, so that the average width of Gaussian species responses is supposed to be one over whole axis. Other innovations were the piecewise linear transformation of species abundances and downweighting of rare species which were regarded to have an unduly high influence on ordination axes.

It seems that detrending actually works by twisting the ordination space, so that the results look non-curved in two-dimensional projections (‘lolly paper effect’). As a result, the points usually have an easily recognized triangular or diamond shaped pattern, obviously an artefact of detrending. Rescaling works differently than commonly presented, too. decorana does not use, or even evaluate, the widths of species responses. Instead, it tries to equalize the weighted standard deviation of species scores on axis segments (parameter mk has no effect, since decorana finds the segments internally). Function tolerance returns this internal criterion and can be used to assess the success of rescaling.

The summary method prints the ordination scores, possible prior weights used in downweighting, and the marginal totals after applying these weights. The plot method plots species and site scores. Classical decorana scaled the axes so that smallest site score was 0 (and smallest species score was negative), but summary, plot and scores use the true origin, unless origin = FALSE.

In addition to proper eigenvalues, the function reports ‘decorana values’ in detrended analysis. These ‘decorana values’ are the values that the legacy code of decorana returns as eigenvalues. They are estimated during iteration, and describe the joint effects of axes and detrending. The ‘decorana values’ are estimated before rescaling and do not show its effect on eigenvalues. The proper eigenvalues are estimated after extraction of the axes and they are the ratio of weighted sum of squares of site and species scores even in detrended and rescaled solutions. These eigenvalues are estimated for each axis separately, but they are not additive, because higher decorana axes can show effects already explained by prior axes. ‘Additive eigenvalues’ are cleansed from the effects of prior axes, and they can be assumed to add up to total inertia (scaled Chi-square). For proportions and cumulative proportions explained you can use eigenvals.decorana.


Hill, M.O. and Gauch, H.G. (1980). Detrended correspondence analysis: an improved ordination technique. Vegetatio 42, 47--58.

Oksanen, J. and Minchin, P.R. (1997). Instability of ordination results under changes in input data order: explanations and remedies. Journal of Vegetation Science 8, 447--454.

See Also

For unconstrained ordination, non-metric multidimensional scaling in monoMDS may be more robust (see also metaMDS). Constrained (or ‘canonical’) correspondence analysis can be made with cca. Orthogonal correspondence analysis can be made with decorana or cca, but the scaling of results vary (and the one in decorana corresponds to scaling = "sites" and hill = TRUE in cca.). See predict.decorana for adding new points to an ordination.


Run this code
vare.dca <- decorana(varespec)

### the detrending rationale:
gaussresp <- function(x,u) exp(-(x-u)^2/2)
x <- seq(0,6,length=15) ## The gradient
u <- seq(-2,8,len=23)   ## The optima
pack <- outer(x,u,gaussresp)
matplot(x, pack, type="l", main="Species packing")
opar <- par(mfrow=c(2,2))
plot(scores(prcomp(pack)), asp=1, type="b", main="PCA")
plot(scores(decorana(pack, ira=1)), asp=1, type="b", main="CA")
plot(scores(decorana(pack)), asp=1, type="b", main="DCA")
plot(scores(cca(pack ~ x), dis="sites"), asp=1, type="b", main="CCA")

### Let's add some noise:
noisy <- (0.5 + runif(length(pack)))*pack
matplot(x, pack, type="l", main="Ideal model")
matplot(x, noisy, type="l", main="Noisy model")
plot(scores(prcomp(noisy)), type="b", main="PCA", asp=1)
plot(scores(decorana(noisy, ira=1)), type="b", main="CA", asp=1)
plot(scores(decorana(noisy)), type="b", main="DCA", asp=1)
plot(scores(cca(noisy ~ x), dis="sites"), asp=1, type="b", main="CCA")

Run the code above in your browser using DataLab