Procrustes | R Documentation |
Solves the Procrustean problem of fitting one (MDS) configuration (testee) to another (target) MDS configuration.
Procrustes(X, Y) ## S3 method for class 'procr' plot(x, plot.type = "jointplot", plot.dim = c(1,2), main, xlab, ylab, xlim, ylim, asp = 1, pch = 20, col.X = "cadetblue", col.Y = "gray", col.Yhat = "coral1", label.conf = list(label = TRUE, pos = 3, cex = 0.8), arrows = TRUE, length = 0.10, legend = list(plot = TRUE, labels = c("Target", "Testee"), pos = "bottomright"), ...)
X |
Target configuration |
Y |
Testee configuration |
x |
Object of class |
plot.type |
Either |
plot.dim |
Vector with dimensions to be plotted. |
main |
Plot title. |
xlab |
Label of x-axis. |
ylab |
Label of y-axis. |
xlim |
Scale x-axis. |
ylim |
Scale y-axis. |
pch |
Plot symbol. |
asp |
Aspect ratio. |
col.X |
Color target configuration. |
col.Y |
Color testee configuration. |
col.Yhat |
Color transformed configuration. |
label.conf |
List with arguments for plotting the labels of the configurations in a configuration plot (logical value whether to plot labels or not, label position, label color). |
length |
length of the edges of the arrow head (in inches). |
arrows |
For |
legend |
List with arguments for plotting the legend. |
... |
Additional plot arguments. |
Y
is going to be modified by finding an optimal dilation factor, an optimal translation and rotation for Y
such that it is a similar as possible to X
. X
remains untouched.
Returns an object of class procr
with:
X |
Input target configuration |
Y |
Input testee configuration |
Yhat |
Procrustes transformed (fitted) configuration |
translation |
Translation vector |
dilation |
Dilation factor |
rotation |
Rotation-reflection matrix |
confdistX |
Configuration distances X |
confdistY |
Configuration distances Y |
confdistYhat |
Configuration distances of fitted configuration |
congcoef |
Congruence coefficient |
aliencoef |
Alienation coefficient |
r |
Correlation coefficient between X and Y-hat (shrinkage ratio) |
pairdist |
Pairwise object distances (sorted) |
Borg, I., & Groenen, P. J. F. (2005). Modern Multidimensional Scaling and Unfolding (2nd ed.). Springer.
Mair, P., Groenen, P. J. F., De Leeuw, J. (2022). More on multidimensional scaling in R: smacof version 2, Journal of Statistical Software, 102(10), 1-47. doi: 10.18637/jss.v102.i10
Borg, I. and Mair, P. (2022). A note on Procrustean fittings of noisy configurations. Austrian Journal of Statistics, 51, 1-9. doi: 10.17713/ajs.v51i4.1423
## artificial example: X <- matrix(c(1, -1, -1, 1, 2, 2, -2, -2), ncol = 2) Y <- matrix(c(0.07, 0.93, 1.93, 1.07, 2.62, 3.12, 1.38, 0.88), ncol = 2) op <- par(mfrow = c(1,2)) plot(X[,1], X[,2], xlim = c(-3, 3), ylim = c(-2, 3.5), asp = 1, xlab = "", ylab = "") rect(-1, -2, 1, 2) points(Y[,1], Y[,2], xlim = c(-3, 3), col = "gray") polygon(Y[,1], Y[,2], border = "gray") fitp <- Procrustes(X, Y) plot(fitp$Yhat[,1], fitp$Yhat[,2], col = "red", xlim = c(-3, 3), ylim = c(-2, 3.5), asp = 1, xlab = "", ylab = "") polygon(fitp$Yhat[,1], fitp$Yhat[,2], border = "red") par(op) ## MDS example: eastD <- sim2diss(EW_eng$east) attr(eastD, "Labels") <- abbreviate(attr(eastD, "Labels")) fit.east <- mds(eastD, type = "ordinal") westD <- sim2diss(EW_eng$west) attr(westD, "Labels") <- abbreviate(attr(westD, "Labels")) fit.west <- mds(westD, type = "ordinal", init = torgerson(eastD)) fit.proc <- Procrustes(fit.east$conf, fit.west$conf) fit.proc ## Configuration plots; Procrustes plots. plot(fit.east, main = "MDS East Germany") ## MDS plot East Germany plot(fit.west, main = "MDS West Germany") ## MDS plot West Germany ## Procrustes configurations (X and Yhat) plot(fit.proc, ylim = c(-1, 1), col.X = "cadetblue", col.Yhat = "brown", pch = 19, legend = list(pos = "topleft", labels = c("East Germany", "West Germany"))) ## Procrustes transformations (Y and Yhat) plot(fit.proc, plot.type = "transplot", length = 0.05, ylim = c(-1,1), legend = list(pos = "bottomright", labels = c("West Germany (untransformed)", "West Germany (transformed)")))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.