procrustes rotates a configuration to maximum similarity
with another configuration. Function protest tests the
non-randomness (`significance') between two configurations.procrustes(X, Y, scale = TRUE, symmetric = FALSE, scores = "sites", ...)
## S3 method for class 'procrustes':
summary(object, digits = getOption("digits"), ...)
## S3 method for class 'procrustes':
plot(x, kind=1, choices=c(1,2), xlab, ylab, main,
ar.col = "blue", len=0.05, ...)
## S3 method for class 'procrustes':
points(x, display = c("target", "rotated"), ...)
## S3 method for class 'procrustes':
lines(x, type = c("segments", "arrows"), choices = c(1, 2), ...)
## S3 method for class 'procrustes':
residuals(object, ...)
## S3 method for class 'procrustes':
fitted(object, truemean = TRUE, ...)
protest(X, Y, scores = "sites", permutations = 1000, strata, ...)Y.display argument
used with the corresponding scores function: see
scores, scores.cca and
<procrustes.plot function, the kind of plot produced:
kind = 1 plots shifts in two configurations, kind = 0
draws a corresponding empty plot, and kind = 2
plots an impulse diagram of residuals."target" or "rotated"
matrix as points.target and rotated points with line
segments or arrows.procrustes
and protest parameters are passed to scores, in
graphical functions to underlying graphical functions.procrustes returns an object of class
procrustes with items. Function protest inherits from
procrustes, but amends that with some new items:Y.X and Yrot.ss statistic.protest: Procrustes correlation from non-permuted solution.tscale=FALSE, the function only
rotates matrix Y. If scale=TRUE, it scales linearly
configuration Y for maximum similarity. Since Y is scaled
to fit X, the scaling is non-symmetric. However, with
symmetric=TRUE, the configurations are scaled to equal
dispersions and a symmetric version of the Procrustes statistic
is computed. Instead of matrix, X and Y can be results from an
ordination from which scores can extract results.
Function procrustes passes extra arguments to
scores, scores.cca etc. so that you can
specify arguments such as scaling.
Function plot plots a procrustes
object and returns invisibly an ordiplot object so that
function identify.ordiplot can be used for identifying
points. The items in the ordiplot object are called
heads and points with kind=1 (ordination diagram)
and sites with kind=2 (residuals). In ordination
diagrams, the arrow heads point to the target configuration, which may
be either logical or illogical. Target and original rotated axes are
shown as cross hairs in two-dimensional Procrustes analysis, and with
a higher number of dimensions, the rotated axes are projected onto
plot with their scaled and centred range. Function
plot passes
parameters to underlying plotting functions. For full control of
plots, you can draw the axes using plot with kind = 0,
and then add items with points or lines. These
functions pass all parameters to the underlying functions so that you
can select the plotting characters, their size, colours etc., or you
can select the width, colour and type of line segments or
arrows, or you can select the orientation and head width of
arrows.
Function residuals returns the pointwise
residuals, and fitted the fitted values, either centred to zero
mean (if truemean=FALSE) or with the original scale (these
hardly make sense if symmetric = TRUE). In
addition, there are summary and print methods.
If matrix X has a lower number of columns than matrix
Y, then matrix X will be filled with zero columns to
match dimensions. This means that the function can be used to rotate
an ordination configuration to an environmental variable (most
practically extracting the result with the fitted function).
Function protest calls procrustes(..., symmetric = TRUE)
repeatedly to estimate the `significance' of the Procrustes
statistic. Function protest uses a correlation-like statistic
derived from the symmetric Procrustes sum of squares $ss$ as
$r =\sqrt{(1-ss)}$, and sometimes called $m_{12}$. Function
protest has own print method, but otherwise uses
procrustes methods. Thus plot with a protest object
yields a ``Procrustean superimposition plot.''
Peres-Neto, P.R. and Jackson, D.A. (2001). How well do multivariate data sets match? The advantages of a Procrustean superimposition approach over the Mantel test. Oecologia 129: 169-178.
isoMDS, initMDS for obtaining
objects for procrustes, and mantel for an
alternative to protest without need of dimension reduction.data(varespec)
vare.dist <- vegdist(wisconsin(varespec))
library(MASS) ## isoMDS
mds.null <- isoMDS(vare.dist, tol=1e-7)
mds.alt <- isoMDS(vare.dist, initMDS(vare.dist), maxit=200, tol=1e-7)
vare.proc <- procrustes(mds.alt, mds.null)
vare.proc
summary(vare.proc)
plot(vare.proc)
plot(vare.proc, kind=2)
residuals(vare.proc)Run the code above in your browser using DataLab