52 votes

Quelles techniques existent dans R pour visualiser une "matrice de distance"?

Je souhaite présenter une matrice de distance dans un article que j'ai écris, et je suis à la recherche d'une bonne visualisation pour elle.

Jusqu'à présent, je suis tombé sur ballon parcelles (je l'ai utilisé ici, mais je ne pense pas qu'il va travailler dans ce cas), cartes de chaleur (ici est un bon exemple, mais ils ne permettent pas de présenter les chiffres dans le tableau, corrigez-moi si je me trompe. Peut-être la moitié de la table dans les couleurs et la moitié avec des nombres serait cool), et enfin de corrélation ellipse parcelles (voici un peu de code et exemple - ce qui est cool à utiliser une forme, mais je ne suis pas sûr de la façon de l'utiliser ici).

Il existe également différentes méthodes de clustering, mais ils vont agréger les données (ce qui n'est pas ce que je veux) tout ce que je veux est de présenter toutes les données.

Exemple de données:

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
dist(nba[1:20, -1], )

Je suis ouvert pour des idées.

Tal

20voto

doug Points 29567

Un Diagramme de Voronoi (graphe de Voronoï de Décomposition) est une façon de représenter visuellement une Matrice de Distance (DM).

Ils sont aussi simples à créer et tracer à l'aide de R-vous pouvez faire les deux en une seule ligne de R code.

Si vous n'êtes pas famililar avec cet aspect de calcul de la géométrie, de la relation entre les deux (VD & DM) est simple, si un bref résumé pourrait être utile.

Matrices de Distance--c'est à dire, une matrice 2D montrant la distance entre un point et tous les autres points, sont un intermédiaire de la sortie au cours de kNN calcul (i.e., k-plus proche voisin, un algorithme d'apprentissage automatique, qui estime que la valeur du point de données basé sur la moyenne pondérée de la valeur de ses k plus proches voisins, la distance-sage, où k est un certain entier, généralement entre 3 et 5.)

kNN est conceptuellement très simple: chaque point de données dans votre formation est, par essence, un "poste" dans certains n-dimension de l'espace, de sorte que la prochaine étape est de calculer la distance entre chaque point et chaque autre point à l'aide de quelques distance métrique (par exemple, Euclidienne, Manhattan, etc.). Alors que la formation étape--c'est à dire, construcing de la matrice de distance--est simple, l'utiliser pour prédire la valeur de nouveaux points de données est pratiquement gênés par l'extraction de données--trouver le plus proche de 3 ou 4 points parmi plusieurs milliers ou plusieurs millions de éparpillés en à n dimensions de l'espace.

Deux structures de données sont couramment utilisés pour traiter de ce problème: kd-trees et Voroni décompositions (aka "Dirichlet tesselation").

Voronoï de décomposition (VD) est déterminée de façon unique par une matrice de distance--c'est à dire, il y a une correspondance 1:1; donc en effet c'est une représentation visuelle de la matrice de distance, mais encore une fois, ce n'est pas leur but, leur but principal est le stockage efficace des données utilisées pour kNN de prédiction basée sur.

Au-delà, si c'est une bonne idée de représenter une matrice de distance de cette manière dépend probablement la plupart de tous sur votre audience. De plus, la relation entre VD et l'antécédent matrice de distance ne sera pas intuitif. Mais ce n'en est pas incorrect--si quelqu'un sans aucune statistique de la formation voulais savoir si les deux populations avaient les mêmes distributions de probabilité et vous a montré une Q-Q plot, ils ne seraient probablement penser que vous n'avez pas engagé leur question. Donc, pour ceux qui savent ce qu'ils recherchent, un VD est un compact, précis et complet à la représentation d'un DM.

Alors, comment pensez-vous le faire?

Voronoï decomp est construit en sélectionnant (généralement au hasard) un sous-ensemble de points de l'intérieur de l'ensemble de la formation (ce nombre varie selon les circonstances, mais si nous avons eu 1 000 000 de points, puis 100 est un nombre raisonnable de ce sous-ensemble). Ces 100 points de données sont les centres de Voronoi ("VC").

L'idée de base de Voronoï decomp est que, plutôt que d'avoir à passer au crible les 1 000 000 de points de données pour trouver les voisins les plus proches, vous n'avez qu'à regarder ces 100, puis une fois que vous trouvez le plus proche de la VC, votre rechercher les voisins les plus proches est limité à seulement les points à l'intérieur de cette cellule de Voronoi. Ensuite, pour chaque point de données dans l'ensemble de la formation, de calculer la VC il est le plus proche. Enfin, pour chaque VC et de ses points, calculer l'enveloppe convexe--sur le plan conceptuel, juste à la limite extérieure formée par le fait que VC est attribué des points qui sont les plus éloignés de la VC. Cette enveloppe convexe autour de la Voronoi centre forme une "cellule de Voronoi." Un complet VD est le résultat de l'application de ces trois étapes pour chaque CR dans votre kit de formation. Cela vous donnera une parfaite pavage de la surface (Voir le schéma ci-dessous).

Pour calculer un VD dans R, utilisez le tripack paquet. La touche de fonction est " de voronoi.mosaïque", à laquelle vous venez de passer en coordonnées x et y, séparément, les données brutes, pas le DM--alors vous pouvez simplement passer de voronoi.mosaïque de 'complot'.

library(tripack)
plot(voronoi.mosaic(runif(100), runif(100), duplicate="remove"))

alt text

20voto

nico Points 21115

Tal, c'est un moyen rapide de chevauchement de texte sur une heatmap. Notez que cela dépend de l' image plutôt que d' heatmap comme le dernier des décalages de l'intrigue, le rendant plus difficile à mettre du texte dans la position correcte.

Pour être honnête, je pense que ce graphique montre trop d'informations, le rendant un peu difficile à lire... vous pouvez écrire seulement des valeurs spécifiques.

aussi, l'autre plus rapide option est d'enregistrer votre graphique, sous forme de pdf, de les importer dans Inkscape (ou tout autre logiciel similaire) et l'ajouter manuellement le texte en cas de besoin.

Espérons que cette aide

nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")

dst <- dist(nba[1:20, -1],)
dst <- data.matrix(dst)

dim <- ncol(dst)

image(1:dim, 1:dim, dst, axes = FALSE, xlab="", ylab="")

axis(1, 1:dim, nba[1:20,1], cex.axis = 0.5, las=3)
axis(2, 1:dim, nba[1:20,1], cex.axis = 0.5, las=1)

text(expand.grid(1:dim, 1:dim), sprintf("%0.1f", dst), cex=0.6)

16voto

Ian Fellows Points 8013

Vous voudrez peut-être envisager une projection 2D de votre matrice (Multi Dimensional Scaling). Voici un lien pour savoir comment le faire dans R.

Sinon, je pense que vous êtes sur la bonne voie avec les cartes thermiques. Vous pouvez ajouter vos chiffres sans trop de difficulté. Par exemple, la construction de off Learn R :

 nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
nba$Name <- with(nba, reorder(Name, PTS))
nba.m <- melt(nba)
nba.m <- ddply(nba.m, .(variable), transform,
rescale = rescale(value))
(p <- ggplot(nba.m, aes(variable, Name)) + geom_tile(aes(fill = rescale),
colour = "white") + scale_fill_gradient(low = "white",
high = "steelblue")+geom_text(aes(label=round(rescale,1))))
 

9voto

Jeromy Anglim Points 8325
  1. Un dendrogramme basé sur une analyse de classification hiérarchique peut être utile: http://www.statmethods.net/advstats/cluster.html

  2. 2-D ou 3-D multidimensional scaling analyse dans R: http://www.statmethods.net/advstats/mds.html

  3. Si vous voulez aller en 3+ dimensions, vous pouvez explorer ggobi / rggobi: http://www.ggobi.org/rggobi/

7voto

Jens Points 478

Dans le livre Numérique "l'Écologie" par Borcard et coll. En 2011, ils ont utilisé une fonction appelée *coldiss.r * vous pouvez le trouver ici: http://ichthyology.usm.edu/courses/multivariate/coldiss.R

il des codes de couleur les distances et même des ordres les enregistrements par la dissemblance.

un autre bon paquet serait le seriation paquet.

Référence: Borcard, D., Gillet, F. & Legendre, P. (2011) Numérique de l'Écologie avec R. Springer.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X