decorana(veg, iweigh=0, iresc=4, ira=0, mk=26, short=0, before=NULL, after=NULL)"plot"(x, choices=c(1,2), origin=TRUE, display=c("both","sites","species","none"), cex = 0.8, cols = c(1,2), type, xlim, ylim, ...)"text"(x, display = c("sites", "species"), labels, choices = 1:2, origin = TRUE, select, ...)"points"(x, display = c("sites", "species"), choices=1:2, origin = TRUE, select, ...)"summary"(object, digits=3, origin=TRUE, display=c("both", "species","sites","none"), ...)"print"(x, head = NA, tail = head, ...)downweight(veg, fraction = 5)"scores"(x, display=c("sites","species"), choices=1:4, origin=TRUE, ...)
TRUEfor displayed items or a vector of indices of displayed items.
decoranareturns an object of class
"decorana", which has
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 five-segment smoothing
window with weights (1,2,3,2,1) on
mk segments --- which indeed
is more robust than the suggested alternative of detrending by
polynomials. 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
decorana does not use, or even evaluate, the
widths of species responses. Instead, it tries to equalize the
weighted variance of species scores on axis segments (parameter
mk has only a small effect, since
decorana finds the
segment number from the current estimate of axis length). This
equalizes response widths only for the idealized species packing
model, where all species initially have unit width responses and
equally spaced modes.
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
scores use the true origin, unless
origin = FALSE.
In addition to proper eigenvalues, the function also reports `decorana
values' in detrended analysis. These `decorana values' are the values
that the legacy code of
decorana returns as `eigenvalues'.
They are estimated internally during iteration, and it seems that
detrending interferes the estimation so that these values are
generally too low and have unclear interpretation. Moreover, `decorana
values' are estimated before rescaling which will change the
eigenvalues. The proper eigenvalues are estimated after extraction of
the axes and they are the ratio of biased weighted variances of site
and species scores even in detrended and rescaled solutions. The
`decorana values' are provided only for the compatibility with
legacy software, and they should not be used.
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.
monoMDSmay be more robust (see also
metaMDS). Constrained (or canonical) correspondence analysis can be made with
cca. Orthogonal correspondence analysis can be made with
corresp, or with
cca, but the scaling of results vary (and the one in
scaling = "sites"and
hill = TRUEin
predict.decoranafor adding new points to an ordination.
data(varespec) vare.dca <- decorana(varespec) vare.dca summary(vare.dca) plot(vare.dca) ### 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 par(mfrow=c(2,1)) matplot(x, pack, type="l", main="Ideal model") matplot(x, noisy, type="l", main="Noisy model") par(mfrow=c(2,2)) 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") par(opar)