「スター座標」は、デフォルトから始めて、インタラクティブに変更することを目的としています。この回答は、デフォルトを作成する方法を示しています。インタラクティブな変更はプログラミングの詳細です。
データは、R d内のベクトル集合と見なされます。これらは最初の直線データを変換し、座標各内別々に正規化される{ X 、J 、I、J = 1 、2 、... }間隔に[ 0 、1 ]バツj= (xj 1、xj 2、… 、xj d)Rd{xji,j=1,2,…}[0,1]。もちろん、これは最初に各要素から最小値を減算し、範囲で割ることによって行われます。正規化されたデータ呼び出します。zj
Rdei=(0,0,…,0,1,0,0,…,0)1ithzj=zj1e1+zj2e2+⋯+zjded{ui,i=1,2,…,d}R2eiuiRdR2zjui
ui
これを説明するためにR
、自動車の性能特性のデータセットに適用された実装を次に示します。最初にデータを取得しましょう:
library(MASS)
x <- subset(Cars93,
select=c(Price, MPG.city, Horsepower, Fuel.tank.capacity, Turn.circle))
最初のステップはデータを正規化することです:
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
それだけです-計画する準備ができています。データポイント、座標軸、およびそれらのラベルのためのスペースを提供するために初期化されます。
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="")
以下は、プロット自体です。各要素に1本の線があります:軸、ラベル、点:
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")
このプロットを理解するには、それを従来の方法である散布図行列と比較すると役立つ場合があります。
pairs(x)
相関ベースの主成分分析(PCA)でもほぼ同じ結果が得られます。
(pca <- princomp(x, cor=TRUE))
pca$loadings[,1]
biplot(pca, choices=2:3)
最初のコマンドの出力は
Standard deviations:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
1.8999932 0.8304711 0.5750447 0.4399687 0.4196363
ほとんどの分散は、最初のコンポーネント(1.9対0.83以下)によって説明されます。2番目のコマンドの出力に示されているように、このコンポーネントへのロードのサイズはほぼ同じです。
Price MPG.city Horsepower Fuel.tank.capacity Turn.circle
0.4202798 -0.4668682 0.4640081 0.4758205 0.4045867
これは、この場合、デフォルトの星座標プロットが最初の主成分に沿って投影されているため、基本的に、2番目から5番目のPCの2次元の組み合わせを示していることを示唆しています。したがって、PCAの結果(または関連する因子分析)と比較した場合の値には疑問があります。主なメリットは、提案された対話性にある可能性があります。
R
ui