“星坐标”旨在以交互方式修改,从默认值开始。这个答案显示了如何创建默认值;交互式修改是一个编程细节。
中向量的集合。这些首先在每个坐标内分别归一化,将数据线性变换到区间。当然,这是通过首先从每个元素中减去它们的最小值并除以范围来完成的。调用标准化数据。xj=(xj1,xj2,…,xjd)Rd{xji,j=1,2,…}[0,1]zj
的通常基础是向量集合在i的地方。在这个基础上,。“星坐标投影”在映射到。到的线性变换。此映射应用于Rdei=(0,0,…,0,1,0,0,…,0)1ithzj=zj1e1+zj2e2+⋯+zjded{ui,i=1,2,…,d}R2eiuiRdR2zj——它只是一个矩阵乘法——创建一个二维点云,描绘为一个散点图。绘制并标记单位向量ui
(交互式版本将允许用户单独旋转每个。)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,]))
默认情况下,让我们个等距单位向量。这些决定了应用于的投影: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
就是这样——我们都准备好了。它被初始化为数据点、坐标轴及其标签提供空间:
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="")
这是绘图本身,每个元素都有一条线:轴、标签和点:
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 或更小)解释。该组件上的负载大小几乎相等,如第二个命令的输出所示:
Price MPG.city Horsepower Fuel.tank.capacity Turn.circle
0.4202798 -0.4668682 0.4640081 0.4758205 0.4045867
这表明——在这种情况下——默认星坐标图沿第一个主成分投影,因此基本上显示了第二个到第五个 PC 的一些二维组合。因此,它与 PCA 结果(或相关因素分析)相比的价值值得怀疑;主要优点可能在于建议的交互性。
虽然R的默认双标图看起来很糟糕,但这里是为了比较。为了使其更好地匹配星坐标图,您需要置换以与此双图中显示的轴序列一致。ui
