# cmdscale

Classical multidimensional scaling

## Syntax

`Y = cmdscale(D)`

[Y,e] = cmdscale(D)

[Y,e] = cmdscale(D,p)

## Description

`Y = cmdscale(D)`

takes
an `n`

-by-`n`

distance matrix `D`

,
and returns an `n`

-by-`p`

configuration
matrix `Y`

. Rows of `Y`

are
the coordinates of `n`

points in `p`

-dimensional
space for some `p < n`

. When `D`

is
a Euclidean distance matrix, the distances between those points are
given by `D`

. `p`

is the dimension
of the smallest space in which the `n`

points whose
inter-point distances are given by `D`

can be embedded.

`[Y,e] = cmdscale(D)`

also
returns the eigenvalues of `Y*Y'`

. When `D`

is
Euclidean, the first `p`

elements of `e`

are
positive, the rest zero. If the first `k`

elements
of `e`

are much larger than the remaining `(n-k)`

,
then you can use the first `k`

columns of `Y`

as `k`

-dimensional
points whose inter-point distances approximate `D`

.
This can provide a useful dimension reduction for visualization, e.g.,
for `k = 2`

.

`D`

need not be a Euclidean distance matrix.
If it is non-Euclidean or a more general dissimilarity matrix, then
some elements of `e`

are negative, and `cmdscale`

chooses `p`

as
the number of positive eigenvalues. In this case, the reduction to `p`

or
fewer dimensions provides a reasonable approximation to `D`

only
if the negative elements of `e`

are small in magnitude.

`[Y,e] = cmdscale(D,p)`

also accepts a positive integer
`p`

between 1 and `n`

. `p`

specifies the dimensionality of the desired embedding `Y`

. If a
`p`

dimensional embedding is possible, then `Y`

will be of size `n`

-by-`p`

and `e`

will be of size `p`

-by-1. If only a `q`

dimensional
embedding with `q < p`

is possible, then `Y`

will
be of size `n`

-by-`q`

and `e`

will be
of size `p`

-by-1. Specifying `p`

may reduce the
computational burden when `n`

is very large.

You can specify `D`

as either a full dissimilarity
matrix, or in upper triangle vector form such as is output by `pdist`

.
A full dissimilarity matrix must be real and symmetric, and have zeros
along the diagonal and positive elements everywhere else. A dissimilarity
matrix in upper triangle form must have real, positive entries. You
can also specify `D`

as a full similarity matrix,
with ones along the diagonal and all other elements less than one. `cmdscale`

transforms
a similarity matrix to a dissimilarity matrix in such a way that distances
between the points returned in `Y`

equal or approximate `sqrt(1-D)`

.
To use a different transformation, you must transform the similarities
prior to calling `cmdscale`

.

## Examples

## References

[1] Seber, G. A. F. *Multivariate
Observations*. Hoboken, NJ: John Wiley & Sons, Inc.,
1984.

## Version History

**Introduced before R2006a**

## See Also

`mdscale`

| `pdist`

| `procrustes`