Wie zeichne ich einen 5D-Datensatz in „Sternkoordinaten“?

8

Ich lese den Artikel "Sternkoordinaten: Eine mehrdimensionale Visualisierungstechnik mit einheitlicher Behandlung von Dimensionen" und versuche, meine Daten zu zeichnen.

Angenommen, ich habe , einen fünfdimensionalen Datenpunkt, und Punkte werden nach der in der Arbeit erläuterten Formel berechnet. A(2,5,3,1,8)

Die Grundidee von Sternkoordinaten besteht darin, die Koordinatenachsen auf einem Kreis in einer zweidimensionalen Ebene mit gleichen (anfänglich) Winkeln zwischen den Achsen mit einem Ursprung in der Mitte des Kreises anzuordnen (Abbildung 1). Anfangs haben alle Achsen die gleiche Länge. Datenpunkte werden auf die Länge der Achse skaliert, wobei die minimale Zuordnung zum Ursprung und die maximale Zuordnung zum anderen Ende der Achse erfolgt. Einheitsvektoren werden entsprechend berechnet. ...

Dies ist einfach eine Erweiterung typischer 2D- und 3D-Streudiagramme auf höhere Dimensionen mit Normalisierung.

Es fällt mir schwer, die Idee zu verstehen. Wie zeichne ich es? Das Hauptproblem ist, dass ich die Formel in der Zeitung nicht verstehen konnte.

Solti
quelle
Was möchtest du zeichnen? die 3D-Darstellung? eine 2d Darstellung, die etwas Clustering zeigen würde?
lcrmorin
2
Sie erwarten von uns, dass Google das, lesen Sie das Papier und finden Sie "die Formel" .... Bitte geben Sie weitere Informationen.
Nick Cox
Diese Technik ist eng mit einem PCA- "Biplot" verwandt. Ich glaube, dass "Sternkoordinaten" dieselben sein können wie diejenigen, die in einem Biplot für eine PCA verwendet werden, in der die erste Hauptkomponente und die zweite PC ein beliebiger orthogonaler Vektor ist. (1,1,,1)
whuber
Vielen Dank für die Antwort @Imorin Ich denke, 2d Darstellung .. @ whuber ♦ -sind Biplot und Stern koordinieren ähnlich wie du meinst?
Solti
Ich habe meine Frage eingegrenzt. Wie finde ich den Einheitsvektor entlang x und y?
Solti

Antworten:

10

Die "Sternkoordinaten" sollen interaktiv geändert werden, beginnend mit einer Standardeinstellung. Diese Antwort zeigt, wie Sie die Standardeinstellung erstellen. Die interaktiven Änderungen sind ein Programmierdetail.

Die Daten sind eine Sammlung von Vektoren betrachtet in R d . Diese werden zunächst innerhalb jeder Koordinate separat normalisiert, wobei die Daten { x j i , j = 1 , 2 , } linear in das Intervall [ 0 , 1 ] transformiert werden.xj=(xj1,xj2,,xjd)Rd{xji,j=1,2,}[0,1]. Dies geschieht natürlich, indem zuerst das Minimum von jedem Element subtrahiert und durch den Bereich dividiert wird. Nennen Sie die normalisierten Daten .zj

Rdei=(0,0,,0,1,0,0,,0)1ithzj=zj1e1+zj2e2++zjded{ui,i=1,2,,d}R2eiuiRdR2zjui

ui


Um dies zu veranschaulichen, wird hier eine RImplementierung auf einen Datensatz von Leistungsmerkmalen von Kraftfahrzeugen angewendet. Lassen Sie uns zuerst die Daten erhalten:

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

Der erste Schritt besteht darin, die Daten zu normalisieren:

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

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

Das war's - wir sind alle bereit zu planen. Es wird initialisiert, um Platz für die Datenpunkte, die Koordinatenachsen und ihre Beschriftungen bereitzustellen:

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="")

Hier ist das Diagramm selbst mit einer Linie für jedes Element: Achsen, Beschriftungen und Punkte:

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

Sternhandlung


Um dieses Diagramm zu verstehen, kann es hilfreich sein, es mit einer herkömmlichen Methode, der Streudiagramm-Matrix, zu vergleichen:

pairs(x)

Streudiagramm-Matrix


Eine korrelationsbasierte Hauptkomponentenanalyse (PCA) liefert fast das gleiche Ergebnis.

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

Die Ausgabe für den ersten Befehl ist

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

Der größte Teil der Varianz entfällt auf die erste Komponente (1,9 gegenüber 0,83 und weniger). Die Ladungen auf diese Komponente sind nahezu gleich groß, wie die Ausgabe des zweiten Befehls zeigt:

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

Dies deutet - in diesem Fall - darauf hin, dass das Standard-Sternkoordinatendiagramm entlang der ersten Hauptkomponente projiziert und daher im Wesentlichen eine zweidimensionale Kombination des zweiten bis fünften PCs zeigt. Sein Wert im Vergleich zu den PCA-Ergebnissen (oder einer verwandten Faktorenanalyse) ist daher fraglich; Der Hauptvorteil kann in der vorgeschlagenen Interaktivität liegen.

Rui

Biplot

whuber
quelle
1

Neben der netten Antwort von @whuber möchte ich einige weitere Optionen für die Anzeige mehrdimensionaler (multivariater) Daten in "Sternkoordinaten" hinzufügen , um eine umfassendere Abdeckung zu gewährleisten. Meine Antwort konzentriert sich auf die Durchführung einer solchen Visualisierung multivariater Daten in R.

Ich werde beginnen , indem das zu sagen Stern Plots (sowohl Spinne und Radar - Varianten) werden unterstützt von R‚s graphicsBasispaket über Funktion stars(): http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/ stars.html . Als nächstes in der R"Nahrungskette" ggplot2folgt natürlich das Paket, für das AFAIK derzeit keine spezifischen Funktionen für diese Art von Parzellen hat (bitte korrigieren Sie mich, wenn ich nicht auf dem neuesten Stand bin). Eine grundlegende Implementierung von Hadley Wickham unter Verwendung coord_polar()finden Sie hier . Darüber hinaus bietet ein auf ggplot2 basierendes ggsubplotPaket die entsprechende Funktion geom_star(): http://www.inside-r.org/packages/cran/ggsubplot/docs/geom_star .

Andere Pakete , die die Sternplot- Funktionalität enthalten, umfassen: psych- Funktionen spider()und radar()- http://personality-project.org/r/html/spider.html , plotrix- Funktion radial.plot()- http://onertipaday.blogspot.com/2009/01/radar -chart.html ) und möglicherweise einige andere.

Darüber hinaus sollte beachtet werden, dass es möglich ist, Sterndiagramme in webfähiger Software zu erstellen , mit der eine einfache Schnittstelle besteht R. Hier ist beispielsweise eine Variation eines Sternplots in plotly, in dem es als Polargebietsdiagramm bezeichnet wird: https://plot.ly/r/polar-chart/#Polar-Area-Chart . In RBezug auf und webfähige Datenvisualisierung ist es unmöglich, die großartige D3.js-Bibliothek zu erwähnen, auf die auch zugegriffen werden kann R. So erstellen Sie mit D3.js eine großartig aussehende Sternenhandlung: http://www.visualcinnamon.com/2013/09/making-d3-radar-chart-look-bit-better.html .

Aleksandr Blekh
quelle
2
Ihr Beitrag wird geschätzt. Es scheint jedoch nicht direkt für diesen Thread relevant zu sein. Das vom OP referenzierte Papier interessiert sich für Visualisierungen "... für Clustererkennungs- und Multi-Faktor-Analyse-Aufgaben". Es betrachtet die Koordinaten , nicht die Form der Plotten, die relevante Innovation zu sein und behauptet , dass sie „... erweitern Transformationen , die in Daten zu verstehen Multi-Dimensionen [verbessern sic ].“ Insbesondere sind "Sternkoordinaten" nicht nur die Standardkoordinaten in einem radialen Sterndiagramm, wie Ihre Antwort anzunehmen scheint.
whuber
1
@whuber: Danke für freundliche Worte und den Hinweis auf das Problem. Nach dem erneuten Lesen des Papiers stimme ich Ihrem Kommentar zu. Es gibt einen wesentlichen Unterschied zwischen dem im Papieransatz vorgeschlagenen und dem Standardansatz für Sterndiagramme. Aus Sicht der Datenvisualisierung und der Kernidee der Darstellung ( transformierter ) mehrdimensionaler Daten über ein Polarkoordinatensystem sind sie jedoch immer noch miteinander verbunden.
Aleksandr Blekh