On Thu, Dec 15, 2011 at 10:08 AM, Lorenzo Isella <lorenzo.ise...@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 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.