Last chance! 50% off unlimited learning
Sale ends in
decorana(veg, iweigh=0, iresc=4, ira=0, mk=26, short=0, before=NULL,
after=NULL)
## S3 method for class 'decorana':
plot(x, choices=c(1,2), origin=TRUE, display=c("both","sites","species","none"),
cex = 0.8, cols = c(1,2), type, ...)
## S3 method for class 'decorana':
summary(object, digits=3, origin=TRUE,
display=c("both", "species","sites","none"), ...)
downweight(veg, fraction = 5)
## S3 method for class 'decorana':
scores(x, display=c("sites","species"), choices =1:4, origin=TRUE, ...)
before
.decorana
result object."text"
,
"points"
or "none"
.plot
function.decorana
, which has
print
, summary
and plot
methods. The curvature is removed by replacing the orthogonalization of axes
with detrending. In orthogonalization the successive axes are made
non-correlated, but detrending should remove all systematic dependence
between axes. Detrending is made 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 works actually by twisting the ordination
space, so that the results look non-curved in two-dimensional projections
(`lolly paper effect'). As a result, the points have usually an
easily recognized triangle or diamond shaped pattern, obviously as a
detrending artefact. 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 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.
Function summary.decorana
prints the ordination scores,
possible prior weights used in downweighting, and the marginal totals
after applying these weights. Function plot.decorana
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.decorana
, plot.decorana
and
scores.decorana
use
the true origin, unless origin=FALSE
.
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.
isoMDS
may be more robust. Constrained (or
`canonical') correspondence analysis can be made with
cca
. Orthogonal correspondence analysis can be
made with ca
, or with decorana
or
cca
, but the scaling of results vary.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")
library(mva) ## prcomp
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)
Run the code above in your browser using DataLab