Quelles techniques existe-t-il dans R pour visualiser une «masortingce de distance»?

Je souhaite présenter une masortingce de distance dans un article que j’écris et je recherche une bonne visualisation pour cela.

Jusqu’à présent, je suis tombé sur des plots de ballons (je l’ai utilisé ici , mais je ne pense pas que cela fonctionnera dans ce cas), les cartes de chaleur (voici un bel exemple , mais elles ne permettent pas de présenter les chiffres dans le tableau) moi si je me trompe. Peut-être que la moitié de la table en couleurs et la moitié avec des nombres serait cool) et enfin des graphes d’ellipse de corrélation (voici du code et des exemples – ce qui est cool d’utiliser une forme, mais je ne sais pas comment l’utiliser) ici).

Il existe également diverses méthodes de regroupement, mais elles regrouperont les données (ce qui ne correspond pas à ce que je veux), alors que je souhaite 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 aux idées.

Tal, c’est un moyen rapide de superposer le texte sur une carte de chaleur. Notez que cela repose sur l’ image plutôt que sur la heatmap car cette dernière compense le tracé, ce qui rend plus difficile la mise du texte dans la position correcte.

Pour être honnête, je pense que ce graphique montre trop d’informations, ce qui le rend un peu difficile à lire … vous pouvez écrire uniquement des valeurs spécifiques.

En outre, l’autre option la plus rapide consiste à enregistrer votre graphique au format pdf, à l’importer dans Inkscape (ou un logiciel similaire) et à append manuellement le texte au besoin.

J’espère que cela t’aides

 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) 

entrer la description de l'image ici

Un diagramme de Voronoi (tracé d’une décomposition de Voronoi) est un moyen de représenter visuellement une masortingce de distance (DM).

Ils sont également simples à créer et à tracer en utilisant R – vous pouvez faire les deux dans une seule ligne de code R.

Si vous n’êtes pas familier avec cet aspect de la géomésortinge computationnelle, la relation entre les deux (VD & DM) est simple, bien qu’un bref résumé puisse être utile.

Les masortingces de distance – c’est-à-dire une masortingce 2D montrant la distance entre un point et tout autre point, sont une sortie intermédiaire lors du calcul de kNN (k-plus proche voisin, algorithme d’apprentissage automatique qui prédit la valeur d’un point la valeur moyenne pondérée de ses «k» voisins les plus proches, en distance, où «k» est un nombre entier, généralement compris entre 3 et 5)

kNN est conceptuellement très simple – chaque sharepoint données de votre ensemble d’entraînement est essentiellement une «position» dans un espace à n dimensions. L’étape suivante consiste à calculer la distance entre chaque point et chaque autre point à l’aide d’une mésortingque de distance (par exemple , Euclidean, Manhattan, etc.). Alors que l’étape de la formation – c’est-à-dire la construction de la masortingce de distance – est simple, son utilisation pour prédire la valeur de nouveaux points de données est pratiquement grevée par la récupération des données. dispersés dans l’espace n-dimensionnel.

Deux structures de données sont couramment utilisées pour résoudre ce problème: les kd-trees et les décompositions de Voroni (alias “Dirichlet tesselation”).

Une décomposition de Voronoi (VD) est uniquement déterminée par une masortingce de distance – c’est-à-dire qu’il ya une carte 1: 1; en effet, il s’agit d’une représentation visuelle de la masortingce de distance, bien que ce ne soit pas leur objective – leur objective principal est le stockage efficace des données utilisées pour la prédiction basée sur kNN.

Au-delà de cela, le fait que ce soit une bonne idée de représenter une masortingce de distance dépend probablement de votre public. Pour la plupart, la relation entre un VD et la masortingce de distance antécédente ne sera pas intuitive. Mais cela ne le rend pas inexact – si quelqu’un sans aucune formation statistique voulait savoir si deux populations avaient des dissortingbutions de probabilités similaires et que vous leur monsortingez un graphique QQ, elles penseraient probablement que vous n’avez pas engagé leur question. Donc, pour ceux qui savent ce qu’ils regardent, un VD est une représentation compacte, complète et précise d’un DM.

Alors, comment en créez-vous un?

Une décomposition de Voronoi est construite en sélectionnant (généralement au hasard) un sous-ensemble de points dans l’ensemble d’apprentissage (ce nombre varie selon les circonstances, mais si nous avions 1 000 000 de points, 100 est un nombre raisonnable pour ce sous-ensemble). Ces 100 points de données sont les centres de Voronoi (“VC”).

L’idée de base derrière une décomposition de Voronoi 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, il suffit de rechercher le VC le plus proche. limité aux seuls points dans cette cellule de Voronoi. Ensuite, pour chaque sharepoint données de l’ensemble d’apprentissage, calculez le VC le plus proche. Enfin, pour chaque VC et ses points associés, calculez la shell convexe – conceptuellement, juste la limite extérieure formée par les points assignés par ce VC qui sont les plus éloignés du VC. Cette shell convexe autour du centre de Voronoi forme une “cellule de Voronoi”. Un VD complet est le résultat de l’application de ces trois étapes à chaque VC de votre set d’entraînement. Cela vous donnera une tesselation parfaite de la surface (Voir le diagramme ci-dessous).

Pour calculer un VD en R, utilisez le package sortingpack . La fonction clé est ‘voronoi.mosaic’ à laquelle vous transmettez les coordonnées x et y séparément – les données brutes et non pas le DM – vous pouvez alors simplement passer voronoi.mosaic à ‘plot’.

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

entrer la description de l'image ici

Vous pouvez également utiliser des algorithmes de dessin de graphique dirigés par la force pour visualiser une masortingce de distance, par exemple

 nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv") dist_m <- as.matrix(dist(nba[1:20, -1])) dist_mi <- 1/dist_m # one over, as qgraph takes similarity matrices as input library(qgraph) jpeg('example_forcedraw.jpg', width=1000, height=1000, unit='px') qgraph(dist_mi, layout='spring', vsize=3) dev.off() 

Vous voudrez peut-être envisager une projection en 2D de votre masortingce (mise à l’échelle multi-dimensionnelle). Voici un lien vers comment le faire en R.

Sinon, je pense que vous êtes sur la bonne voie avec les heatmaps. Vous pouvez append vos numéros sans trop de difficulté. Par exemple, création de off Learn R :

 library(ggplot2) library(plyr) library(arm) library(reshape2) 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)))) 

entrer la description de l'image ici

  1. Un dendrogramme basé sur une parsing hiérarchique peut être utile: http://www.statmethods.net/advstats/cluster.html

  2. Une parsing d’échelle multidimensionnelle 2D ou 3D dans R: http://www.statmethods.net/advstats/mds.html

  3. Si vous voulez entrer dans les dimensions 3+, vous pouvez explorer ggobi / rggobi: http://www.ggobi.org/rggobi/

Dans le livre “Numerical Ecology” de Borcard et al. En 2011, ils ont utilisé une fonction appelée * coldiss.r * que vous pouvez trouver ici: http://ichthyology.usm.edu/courses/multivariate/coldiss.R

la couleur code les distances et ordonne même les enregistrements par dissemblance.

un autre bon paquet serait le paquet de seriation .

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

entrer la description de l'image ici

Une solution utilisant la mise à l’échelle multidimensionnelle

 data = read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep = ",") dst = tcrossprod(as.masortingx(data[,-1])) dst = masortingx(rep(diag(dst), 50L), ncol = 50L, byrow = TRUE) + masortingx(rep(diag(dst), 50L), ncol = 50L, byrow = FALSE) - 2*dst library(MASS) mds = isoMDS(dst) #remove {type = "n"} to see dots plot(mds$points, type = "n", pch = 20, cex = 3, col = adjustcolor("black", alpha = 0.3), xlab = "X", ylab = "Y") text(mds$points, labels = rownames(data), cex = 0.75) 

entrer la description de l'image ici