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 R
Implementierung 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,]))
duiprj
z
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")

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

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.
R
ui
