2013-06-24 26 views
7

Esiste un pacchetto per convertire una matrice di distanze in un insieme di coordinate? Ho seguito la domanda qui sotto. Speravo che ci sarebbe stato un pacchetto per questo.Coordinate dalla matrice delle distanze in R

Finding the coordinates of points from distance matrix

ho considerato Sammons proiezione per questo, ma da quanto ho capito, è un ottimizzatore e si ottiene una soluzione ottimale. Penso che ci dovrebbe essere un algoritmo per ottenere una soluzione unica per questo.

+1

non esiste una soluzione unica a questo problema dal momento che può ruotare il set di dati senza influire sulla matrice della distanza. – Backlin

risposta

7

multidimensionali scalatura (MDS) mira a proiettare la matrice distanza dei dati a una dimensione inferiore k, ove desiderato k = 2 nel suo caso, cercando di mantenere le distanze tra i punti di dati:

# 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) 

Ulteriori approfondimenti: https://stats.stackexchange.com/questions/14002/whats-the-difference-between-principal-components-analysis-and-multidimensional

mds projection

+0

Grazie per l'ottima risposta. Ma come ho detto sopra, questa è una soluzione esatta o solo un altro ottimizzatore? – Avinash

+1

Si tratta di un problema agli autovalori (come in [questa risposta] (http://stackoverflow.com/a/17177833/1129973)) quindi può essere visto come un'ottimizzazione. Se esiste una soluzione esatta, restituisce una soluzione esatta, e, se non esiste una soluzione esatta, non fallisce, ma fornisce una soluzione approssimativa. –

2

Cercare un algoritmo chiamato Multi-Dimensional Scaling (MDS). Un'implementazione R è la funzione cmdscale dal pacchetto stats:

Scaling multidimensionale richiede un insieme di diversità e restituisce un insieme di punti tali che le distanze tra i punti sono approssimativamente uguali alle differenze.

La documentazione ha anche un esempio in cui una matrice di distanza è trasformato in due vettori di x e y coordinate, quindi tracciata.

+0

Non è questa un'altra ottimizzazione? L'algoritmo definito nell'altra domanda che ho collegato ha senso per me. MDS fa la stessa cosa? Come è stato sottolineato, non esiste una soluzione unica ma ha una soluzione, quindi non penso che sia necessaria una soluzione approssimata/ottimale quando è possibile ottenere la soluzione esatta. A meno che non abbia completamente frainteso la MDS, per favore perdonami la mia ignoranza. – Avinash