# [R] From Distance Matrix to 2D coordinates

Lorenzo Isella lorenzo.isella at gmail.com
Thu Dec 15 19:47:57 CET 2011

```Thanks a lot!
Precisely what I had in mind.
One last question (an extension of the previous one): can this be
extended to points in 3D? Once again, given the distance matrix, can I
reconstruct a set of coordinates (among many possible) for the points in
three-dimensional space?
Cheers

Lorenzo

On 12/15/2011 07:22 PM, Peter Langfelder wrote:
> On Thu, Dec 15, 2011 at 10:08 AM, Lorenzo Isella
> <lorenzo.isella at gmail.com>  wrote:
>> Dear All,
>> I am struggling with the following problem: I am given a NxN symmetric
>> matrix P ( P[i,i]=0, i=1...N and P[i,j]>0 for i!=j) which stands for the
>> relative distances of N points.
>> I would like use it to get the coordinates of the N points in a 2D plane. Of
>> course, the solution is not unique (given one solution, I can translate or
>> rotate all the points by the same amount and generate another solution), but
>> any correct solution will do for me.
>> Any idea about how I can achieve that? Is there any clustering package that
>> can help me?
>> Many thanks.
>
> If your matrix really corresponds to distances of points (in 2
> dimensions), you can try multidimensional scaling, function
> cmdscale().
>
> This little code illustrates that cmdscale recovers the 2-dimensional
> points used to generate a distance matrix, up to a shift and rotation:
>
> # Generate 10 random points in 2 dimensions
> nPoints = 10;
> nDim = 2;
>
> set.seed(10);
> points = matrix(runif(nPoints * nDim), nPoints, nDim);
>
> # Their distance:
> dst = dist(points)
>
> # Classical multidimensional scaling
> mds = cmdscale(dst);
>
> # Distance of the points calculated by mds
> dst2 = dist(mds);
>
> # The two distances are equal
> all.equal(as.vector(dst), as.vector(dst2))
>
> HTH,
>
> Peter

```