procrustes.RdFunction 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 procrustes summary(object, digits = getOption("digits"), ...) # S3 method for procrustes plot(x, kind=1, choices=c(1,2), to.target = TRUE, type = "p", xlab, ylab, main, ar.col = "blue", len=0.05, cex = 0.7, ...) # S3 method for procrustes points(x, display = c("target", "rotated"), choices = c(1,2), truemean = FALSE, ...) # S3 method for procrustes text(x, display = c("target", "rotated"), choices = c(1,2), labels, truemean = FALSE, ...) # S3 method for procrustes lines(x, type = c("segments", "arrows"), choices = c(1, 2), truemean = FALSE, ...) # S3 method for procrustes residuals(object, ...) # S3 method for procrustes fitted(object, truemean = TRUE, ...) # S3 method for procrustes predict(object, newdata, truemean = TRUE, ...) protest(X, Y, scores = "sites", permutations = how(nperm = 999), ...)
| X | Target matrix |
|---|---|
| Y | Matrix to be rotated. |
| scale | Allow scaling of axes of |
| symmetric | Use symmetric Procrustes statistic (the rotation will still be non-symmetric). |
| scores | Kind of scores used. This is the |
| x, object | An object of class |
| digits | Number of digits in the output. |
| kind | For |
| choices | Axes (dimensions) plotted. |
| xlab, ylab | Axis labels, if defaults unacceptable. |
| main | Plot title, if default unacceptable. |
| display | Show only the |
| to.target | Draw arrows to point to target. |
| type | The type of plot drawn. In |
| truemean | Use the original range of target matrix instead of
centring the fitted values. Function |
| newdata | Matrix of coordinates to be rotated and translated to the target. |
| permutations | a list of control values for the permutations
as returned by the function |
| ar.col | Arrow colour. |
| len | Width of the arrow head. |
| labels | Character vector of text labels. Rownames of the result object are used as default. |
| cex | Character expansion for points or text. |
| ... | Other parameters passed to functions. In |
Procrustes rotation rotates a matrix to maximum similarity with a
target matrix minimizing sum of squared differences. Procrustes
rotation is typically used in comparison of ordination results. It is
particularly useful in comparing alternative solutions in
multidimensional scaling. If scale=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 if to.target = TRUE, and to rotated
configuration if to.target = FALSE. 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 predict can be used to add new rotated
coordinates to the target. The predict function will always
translate coordinates to the original non-centred matrix. The
function cannot be used with newdata for symmetric
analysis.
Function protest performs symmetric Procrustes analysis
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 also prints the sum of
squares of the symmetric analysis, sometimes called
\(m_{12}^2\). Function protest has own
print method, but otherwise uses procrustes
methods. Thus plot with a protest object yields a
Procrustean superimposition plot.
Function procrustes returns an object of class
procrustes with items. Function protest inherits from
procrustes, but amends that with some new items:
Rotated matrix Y.
Target matrix.
Sum of squared differences between X and Yrot.
Orthogonal rotation matrix.
Translation of the origin.
Scaling factor.
The centroid of the target.
Type of ss statistic.
Function call.
This and the following items are only in class
protest: Procrustes correlation from non-permuted solution.
Procrustes correlations from permutations. The distribution
of these correlations can be inspected with permustats
function.
Significance of t
Number of permutations.
A list of control values for the permutations
as returned by the function how.
the list passed to argument control describing
the permutation design.
Mardia, K.V., Kent, J.T. and Bibby, J.M. (1979). Multivariate Analysis. Academic Press.
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.
The function protest follows Peres-Neto & Jackson (2001),
but the implementation is still after Mardia et al.
(1979).
monoMDS, for obtaining
objects for procrustes, and mantel for an
alternative to protest without need of dimension reduction. See
how for details on specifying the type of
permutation required.
data(varespec) vare.dist <- vegdist(wisconsin(varespec)) mds.null <- monoMDS(vare.dist, y = cmdscale(vare.dist)) mds.alt <- monoMDS(vare.dist) vare.proc <- procrustes(mds.alt, mds.null) vare.proc#> #> Call: #> procrustes(X = mds.alt, Y = mds.null) #> #> Procrustes sum of squares: #> 11.17 #>summary(vare.proc)#> #> Call: #> procrustes(X = mds.alt, Y = mds.null) #> #> Number of objects: 24 Number of dimensions: 2 #> #> Procrustes sum of squares: #> 11.17384 #> Procrustes root mean squared error: #> 0.6823318 #> Quantiles of Procrustes errors: #> Min 1Q Median 3Q Max #> 0.1641171 0.2426814 0.2783606 0.4983783 2.4450896 #> #> Rotation matrix: #> [,1] [,2] #> [1,] 0.99937914 -0.03523252 #> [2,] 0.03523252 0.99937914 #> #> Translation of averages: #> [,1] [,2] #> [1,] -1.070002e-18 1.44245e-17 #> #> Scaling of target: #> [1] 0.7310427 #>plot(vare.proc)residuals(vare.proc)#> 18 15 24 27 23 19 22 16 #> 0.2735533 0.2033089 0.4709266 0.4423212 0.3539958 0.1641171 0.2513291 0.2610482 #> 28 13 14 20 25 7 5 6 #> 0.7758045 0.3075563 0.2831679 0.1748867 0.2685187 0.5170435 0.9748918 0.2439112 #> 3 4 2 9 12 10 11 21 #> 0.2253369 0.7584140 2.4450896 0.2389922 0.2092248 0.2597444 0.4921566 1.0886269