This vignette deals with biplots based on Multidimensional scaling (MDS).
In general, multidimensional scaling deals with constructing a low dimensional map of n samples such that the Euclidean distances between the samples match a given set of dissimilarities Δ:n×n as closely as possible. Here the focus is on Principal Coordinate Analysis (PCO), an approach based on the singular value decomposition of a matrix. However, the regression biplot provides a general structure for fitting any 2D map of samples with biplot axes.
The function regress
accepts as arguments an object of
class biplot
. The call to the function biplot
should contain the data set that will be used to construct the biplot
axes. The second argument Z
contains the coordinates of the
samples in the MDS map. By default linear regression axes will be fitted
to the plot. If X denote
the data matrix, the directions of the biplot axes are found by solving
the regression equation
X=ZH′+E. The matrix H′=(Z′Z)−1Z′X and calibration of the axes proceed analogous to equation (2) in the biplotEZ vignette. The coordinates of the marker /mu on biplot axis j is given as follows
pμ=μh′(j)h(j)h(j).
biplot(rock) |>
regress(Z = MASS::sammon(dist(scale(rock), method="manhattan"))$points) |>
plot()
#> Initial stress : 0.02554
#> stress after 10 iters: 0.01094, magic = 0.500
#> stress after 20 iters: 0.01080, magic = 0.500
#> stress after 30 iters: 0.01078, magic = 0.500
More flexibility is provided by approximating the biplot axes using B-splines. A calibrated trajectory represented in a matrix H:m×2 snakes through the samples points Z such that the marker on the trajectory which is closest to a particular sample gives the predicted value of that sample for the particular variable. To retain smoothness of the trajectory H, B-splines are used.
biplot(rock) |>
regress(Z = MASS::sammon(dist(scale(rock), method="manhattan"))$points,
axes = "splines") |>
plot()
#> Initial stress : 0.02554
#> stress after 10 iters: 0.01094, magic = 0.500
#> stress after 20 iters: 0.01080, magic = 0.500
#> stress after 30 iters: 0.01078, magic = 0.500
#> Calculating spline axis for variable 1
#> Calculating spline axis for variable 2
#> Calculating spline axis for variable 3
#> Calculating spline axis for variable 4
Let ˜Δ be the n×n matrix containing the values −12δ2ij where δij represent the dissimilarity between objects i and j. If it is possible to find a set of coordinates Y:n×m where typically m=n−1 such that the Euclidean distances between the rows of Y exactly match the dissimilarities δij, the dissimilarity is known as a Euclidean embeddable distance metric. J. C. Gower (1982) shows that if the distances δij are Euclidean embeddable, then
(I−1s′)˜Δ(I−s1′)
is positive semi-definite.
The Euclidean representation of the samples is obtained as Y=VΛ12 where (I−1s′)˜Δ(I−s1′)=VΛV′. Since the coordinates in Y is already referred to their principal axes with Y′Y=Λ, the representation of the samples in a 2D biplot is obtained from the first two columns of Y.
In addition to the exact biplot axis representations discussed in J. C. Gower, Lubbe, and Roux (2011) approximate axes can be obtained. Linear axes are fitted with the regression method. The variables in the data matrix X:n×p can be represented as biplot axes in the PCO biplot with the sample points Z=VΛ12J2 according to the regression method discussed in section 2 above.
Using B-splines instead of linear regression provides the user with
more flexibility. This is achieved by setting the argument
axes = "splines"
.
#> Calculating spline axis for variable 1
#> Calculating spline axis for variable 2
#> Calculating spline axis for variable 3
#> Calculating spline axis for variable 4
By default the distance metric used for the analysis is Euclidean
distance. The user can also specify the distance matrix
Dmat
as an n×n
matrix of a dist
object. As illustration of a metric that
is Euclidean embeddable, the Clark’s distance
δ2ij=p∑k=1(xik−xjkxik+xjk)2
as defined by John C. Gower and Ngouenet (2005) is calculated below and used for constructing a PCO biplot. Note that the metric is only defined for strictly positive values, so that the data is scaled to values between 1 and 2.
Clark.dist <- function(X)
{
n <- nrow(X)
p <- ncol(X)
Dmat <- matrix (0, nrow=n, ncol=n)
for (i in 1:(n-1))
for (j in (i+1):n)
Dmat[i,j] <- sum(((X[i,] - X[j,])/(X[i,] + X[j,]))^2)
sqrt(Dmat + t(Dmat))
}
my.data <- scale(rock, center=apply(rock,2,min), scale=diff(apply(rock,2,range)))+1
biplot(rock) |> PCO(Dmat = Clark.dist (rock), axes = "splines") |> plot()
#> Calculating spline axis for variable 1
#> Calculating spline axis for variable 2
#> Calculating spline axis for variable 3
#> Calculating spline axis for variable 4
Alternatively, the user can specify a function which computes a
distance matrix or dist
object. The Manhattan distance is
not Euclidean embeddable, but the square root of the distance is. The
function sqrtManhattan
is included as an example of a
function computing a Euclidean embeddable dist
object.
sqrtManhattan
#> function (X)
#> {
#> sqrt(stats::dist(X, method = "manhattan"))
#> }
#> <bytecode: 0x000001f9873774e0>
#> <environment: namespace:biplotEZ>