Comment tracer un ensemble de données 5D en «coordonnées étoiles»?


8

Je lis le document "Coordonnées en étoile: une technique de visualisation multidimensionnelle avec un traitement uniforme des dimensions" et j'essaie de tracer mes données.

Disons que j'ai , un point de données à cinq dimensions, et les points sont calculés par la formule expliquée dans l'article. A(2,5,3,1,8)

L'idée de base des coordonnées stellaires est d'organiser les axes de coordonnées sur un cercle sur un plan bidimensionnel avec des angles égaux (initialement) entre les axes avec une origine au centre du cercle (figure 1). Initialement, tous les axes ont la même longueur. Les points de données sont mis à l'échelle à la longueur de l'axe, avec le mappage minimum à l'origine et le maximum à l'autre extrémité de l'axe. Les vecteurs unitaires sont calculés en conséquence. ...

Il s'agit simplement d'une extension des diagrammes de dispersion 2d et 3d typiques à des dimensions plus élevées avec normalisation.

J'ai du mal à saisir l'idée. Comment puis-je le tracer? Le principal problème est que je ne pouvais pas comprendre la formule du document.


Que voulez-vous tracer? la représentation 3D? une représentation 2D qui montrerait un certain regroupement?
lcrmorin

2
Vous attendez de nous que Google, lisez l'article et trouvez "la formule" .... Veuillez fournir plus d'informations.
Nick Cox

Cette technique est étroitement liée à un "biplot" PCA. Je pense que les "coordonnées étoiles" peuvent être les mêmes que celles utilisées dans un diagramme biographique pour une ACP dans laquelle le premier composant principal est et le deuxième PC est un vecteur orthogonal à celui-ci. (1,1,,1)
whuber

merci les gars pour la réponse @Imorin je pense que la représentation 2d .. @ whuber ♦ -sont biplot et coordonnée étoile similaire vous voulez dire?
solti

J'ai réduit ma question .. comment puis-je trouver le vecteur unitaire le long de x et y.
solti

Réponses:


10

Les "coordonnées étoiles" sont destinées à être modifiées de manière interactive, en commençant par une valeur par défaut. Cette réponse montre comment créer la valeur par défaut; les modifications interactives sont un détail de programmation.

Les données sont considérées comme une collection de vecteurs dans . Celles-ci sont d'abord normalisées séparément à l'intérieur de chaque coordonnée, transformant linéairement les données en l'intervalle . Cela se fait, bien sûr, en soustrayant d'abord leur minimum de chaque élément et en divisant par la plage. Appelez les données normalisées .xj=(xj1,xj2,,xjd)Rd{xji,j=1,2,}[0,1]zj

La base habituelle de est l'ensemble des vecteurs ayant un seul dans le lieu. En termes de cette base, . Une "projection de coordonnées d'étoiles" choisit un ensemble de vecteurs unitaires distincts dans et mappe à . Ceci définit une transformation linéaire de à . Cette carte est appliquée auRdei=(0,0,,0,1,0,0,,0)1ithzj=zj1e1+zj2e2++zjded{ui,i=1,2,,d}R2eiuiRdR2zj- ce n'est qu'une multiplication matricielle - pour créer un nuage de points bidimensionnel, représenté comme un nuage de points. Les vecteurs unitaires sont dessinés et étiquetés pour référence.ui

(Une version interactive permettra à l'utilisateur de faire pivoter chacun des individuellement.)ui


Pour illustrer cela, voici une Rimplémentation appliquée à un ensemble de données de caractéristiques de performances automobiles. Obtenons d'abord les données:

library(MASS)
x <- subset(Cars93, 
       select=c(Price, MPG.city, Horsepower, Fuel.tank.capacity, Turn.circle))

La première étape consiste à normaliser les données:

x.range <- apply(x, 2, range)
z <- t((t(x) - x.range[1,]) / (x.range[2,] - x.range[1,]))

Par défaut, créons vecteurs unitaires également espacés pour . Ceux-ci déterminent la projection qui est appliquée à :duiprjz

d <- dim(z)[2] # Dimensions
prj <- t(sapply((1:d)/d, function(i) c(cos(2*pi*i), sin(2*pi*i))))
star <- z %*% prj

C'est tout - nous sommes tous prêts à comploter. Il est initialisé pour laisser de la place aux points de données, aux axes de coordonnées et à leurs étiquettes:

plot(rbind(apply(star, 2, range), apply(prj*1.25, 2, range)), 
     type="n", bty="n", xaxt="n", yaxt="n",
     main="Cars 93", xlab="", ylab="")

Voici l'intrigue elle-même, avec une ligne pour chaque élément: axes, étiquettes et points:

tmp <- apply(prj, 1, function(v) lines(rbind(c(0,0), v)))
text(prj * 1.1, labels=colnames(z), cex=0.8, col="Gray")
points(star, pch=19, col="Red"); points(star, col="0x200000")

Graphique en étoile


Pour comprendre ce graphique, il pourrait être utile de le comparer à une méthode traditionnelle, la matrice de nuage de points:

pairs(x)

Matrice de nuage de points


Une analyse en composantes principales (ACP) basée sur la corrélation crée presque le même résultat.

(pca <- princomp(x, cor=TRUE))
pca$loadings[,1]
biplot(pca, choices=2:3)

La sortie de la première commande est

Standard deviations:
   Comp.1    Comp.2    Comp.3    Comp.4    Comp.5 
1.8999932 0.8304711 0.5750447 0.4399687 0.4196363 

La majeure partie de la variance est attribuable à la première composante (1,9 contre 0,83 et moins). Les chargements sur ce composant sont de taille presque égale, comme le montre la sortie de la deuxième commande:

     Price           MPG.city         Horsepower Fuel.tank.capacity        Turn.circle 
 0.4202798         -0.4668682          0.4640081          0.4758205          0.4045867 

Cela suggère - dans ce cas - que le tracé des coordonnées étoiles par défaut se projette le long de la première composante principale et montre donc, essentiellement, une combinaison bidimensionnelle des deuxième à cinquième PC. Sa valeur par rapport aux résultats de l'ACP (ou à une analyse factorielle connexe) est donc discutable; le principal mérite peut être dans l'interactivité proposée.

Bien que Rle biplot par défaut soit horrible, le voici à titre de comparaison. Pour qu'il corresponde mieux au tracé des coordonnées des étoiles, vous devez permuter pour qu'il corresponde à la séquence des axes indiquée dans ce biplot.ui

Biplot


1

En plus de la belle réponse de @whuber, je voudrais ajouter quelques autres options pour afficher des données multidimensionnelles (multivariées) en "coordonnées d'étoiles", pour une couverture plus complète. Ma réponse se concentre sur la réalisation d'une telle visualisation de données multivariées dans R.

Je commencerai par dire que les graphiques en étoile (dans les variantes araignée et radar ) sont pris en charge par Rle graphicspackage de base de via la fonction stars(): http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/ stars.html . Ensuite, dans la R"chaîne alimentaire", il y a évidemment le ggplot2paquet, qui AFAIK n'a actuellement pas de fonctions spécifiques pour ce type de parcelles (veuillez me corriger, si je ne suis pas à jour à ce sujet). Cependant, une implémentation de base par Hadley Wickham, utilisant coord_polar(), peut être trouvée ici . De plus, un package basé sur ggplot2 ggsubplotoffre la fonction appropriée geom_star(): http://www.inside-r.org/packages/cran/ggsubplot/docs/geom_star .

D'autres packages qui contiennent la fonctionnalité de traçage en étoile incluent: psych- les fonctions spider()et radar()- http://personality-project.org/r/html/spider.html , plotrix- la fonction radial.plot()- http://onertipaday.blogspot.com/2009/01/radar -chart.html ) et, éventuellement, d'autres.

En plus de ce qui précède, il convient de noter qu'il est possible de créer des graphiques en étoile dans un logiciel Web , qui s'interface facilement avec R. Par exemple, voici une variation d'un graphique en étoiles dans plotly, où il est appelé graphique de zone polaire: https://plot.ly/r/polar-chart/#Polar-Area-Chart . En parlant de Rvisualisation de données sur le Web, il est impossible de ne pas mentionner la grande bibliothèque D3.js, qui est également accessible à partir de R. Voici comment créer une intrigue d'étoiles magnifique, en utilisant D3.js: http://www.visualcinnamon.com/2013/09/making-d3-radar-chart-look-bit-better.html .


2
Votre contribution est appréciée. Cependant, il ne semble pas être directement pertinent pour ce fil. L'article référencé par l'OP s'intéresse aux visualisations "... pour la découverte de grappes et les tâches d'analyse multifactorielles". Il considère que les coordonnées , et non la forme du tracé, sont l'innovation pertinente, affirmant qu'elles sont "... des transformations avancées qui amélioreront la compréhension des données en plusieurs dimensions [ sic ]". En particulier, les "coordonnées d'étoiles" ne sont pas simplement les coordonnées par défaut dans un tracé d'étoiles radiales, comme votre réponse semble le supposer.
whuber

1
@whuber: Merci pour vos aimables paroles et pour avoir signalé le problème. Après avoir relu le document, je suis d'accord avec votre commentaire. Il existe une différence essentielle entre l'approche suggérée dans l'approche papier et l'approche des diagrammes en étoile standard. Cependant, du point de vue de la visualisation des données et de l'idée centrale de présenter des données multidimensionnelles ( transformées ) via un système de coordonnées polaires , elles sont toujours liées.
Aleksandr Blekh
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.