2013-06-24 22 views
7

Gibt es ein Paket, um eine Distanzmatrix in eine Menge von Koordinaten zu konvertieren? Ich habe die folgende Frage durchgegangen. Ich hatte gehofft, dass es dafür ein Paket geben würde.Koordinaten aus der Distanzmatrix in R

Finding the coordinates of points from distance matrix

Ich habe für diese Sammons Projektion betrachtet, sondern von dem, was ich verstehe, ist es ein Optimierer und bekommt man eine optimale Lösung. Ich denke, dass es einen Algorithmus geben sollte, um eine einzigartige Lösung dafür zu bekommen.

+1

Es gibt keine eindeutige Lösung für dieses Problem, da Sie kann Ihren Datensatz drehen, ohne die Abstandsmatrix zu beeinflussen. – Backlin

Antwort

7

Multidimensional Scaling (MDS) hat zum Ziel, den Abstand Matrix von Daten auf eine niedrigere Dimension k, zu projizieren, wo k gewünschten = 2 im Fall, bei dem Versuch, die Abstände zwischen den Datenpunkten zu erhalten:

# Multidimensional scaling 
library(MASS) 
set.seed(1) 
labels <- as.factor(sample(LETTERS[1:5], 100, replace=TRUE)) 
dat <- mvrnorm(n=100, mu = c(1:4), Sigma=matrix(1:16, ncol=4)) + as.numeric(labels)^2 
#> dim(dat) 
#[1] 100 4 

# Euclidean distance matrix (100x100) 
d <- dist(dat) 

# Classical MDS for distance matrix d 
# http://en.wikipedia.org/wiki/Multidimensional_scaling 
mds <- cmdscale(d, k = 2) 
x <- mds[,1] 
y <- mds[,2] 

plot(x,y, col=rainbow(5)[as.numeric(labels)], pch=16, main="MDS for object 'dat'") 
legend("topright", legend=unique(labels), col=rainbow(5)[unique(as.numeric(labels))], pch=16) 

Weiterführende Literatur: https://stats.stackexchange.com/questions/14002/whats-the-difference-between-principal-components-analysis-and-multidimensional

mds projection

+0

Danke für eine tolle Antwort. Aber wie ich oben erwähnt habe, ist dies eine exakte Lösung oder nur ein anderer Optimierer? – Avinash

+1

Es ist ein Eigenwertproblem (wie in [dieser Antwort] (http://stackoverflow.com/a/17177833/1129973)) so kann es als eine Optimierung gesehen werden. Wenn es eine genaue Lösung gibt, gibt es eine genaue Lösung zurück, und wenn es keine genaue Lösung gibt, scheitert es nicht, aber gibt eine ungefähre Lösung. –

2

Suchen Sie einen Algorithmus namens Multi-Dimensional Scaling (MDS). Eine Implementierung in R die cmdscale Funktion aus dem stats Paket:

Multidimensional Scaling nimmt einen Satz von Unähnlichkeiten und gibt eine Menge von Punkten, so dass die Abstände zwischen den Punkten, auf die Unähnlichkeiten in etwa gleich sind.

Die Dokumentation hat auch ein Beispiel, wo eine Distanzmatrix in zwei Vektoren x und y Koordinaten gedreht wird, dann aufgetragen.

+0

Ist das nicht eine weitere Optimierung? Der in der anderen Frage definierte Algorithmus, den ich verlinkt habe, ist für mich sinnvoll. MDS macht das gleiche? Wie bereits erwähnt, gibt es keine eindeutige Lösung, aber eine Lösung, daher glaube ich nicht, dass eine ungefähre/optimale Lösung benötigt wird, wenn eine exakte Lösung erreicht werden kann. Wenn ich MDS hier nicht völlig falsch verstehe, bitte verzeihen Sie meine Unwissenheit. – Avinash