"Koordinat bintang" dimaksudkan untuk dimodifikasi secara interaktif, dimulai dengan default. Jawaban ini menunjukkan cara membuat default; modifikasi interaktif adalah detail pemrograman.
Data dianggap sebagai kumpulan vektor di . Ini pertama dinormalisasi secara terpisah dalam setiap koordinat, secara linear mengubah data ke dalam interval . Ini dilakukan, tentu saja, dengan terlebih dahulu mengurangi minimum dari setiap elemen dan membaginya dengan rentang. Panggil data yang dinormalisasi .xj=(xj1,xj2,…,xjd)Rd{xji,j=1,2,…}[0,1]zj
Dasar adalah himpunan vektor memiliki tunggal dalam Tempat . Dalam hal dasar ini, . "Proyeksi koordinat bintang" memilih satu set vektor satuan yang berbeda di dan memetakan ke . Ini mendefinisikan transformasi linear dari ke . Peta ini diterapkan keRdei=(0,0,…,0,1,0,0,…,0)1ithzj=zj1e1+zj2e2+⋯+zjded{ui,i=1,2,…,d}R2eiuiRdR2zj--it hanyalah perkalian matriks - untuk membuat titik awan dua dimensi, digambarkan sebagai sebar scatter. Vektor satuan digambar dan diberi label untuk referensi.ui
(Versi interaktif akan memungkinkan pengguna untuk memutar masing-masing individual.)ui
Untuk menggambarkan hal ini, berikut adalah R
penerapan yang diterapkan pada dataset karakteristik kinerja mobil. Pertama mari kita dapatkan datanya:
library(MASS)
x <- subset(Cars93,
select=c(Price, MPG.city, Horsepower, Fuel.tank.capacity, Turn.circle))
Langkah awal adalah menormalkan data:
x.range <- apply(x, 2, range)
z <- t((t(x) - x.range[1,]) / (x.range[2,] - x.range[1,]))
Sebagai default, mari kita buat vektor satuan spasi sama untuk . Ini menentukan proyeksi yang diterapkan pada :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
Itu saja - kita semua siap untuk merencanakan. Ini diinisialisasi untuk memberikan ruang bagi titik data, sumbu koordinat, dan labelnya:
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="")
Ini plotnya sendiri, dengan satu baris untuk setiap elemen: sumbu, label, dan poin:
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")
Untuk memahami plot ini, mungkin membantu untuk membandingkannya dengan metode tradisional, matriks sebar:
pairs(x)
Analisis komponen utama berbasis korelasi (PCA) menciptakan hasil yang hampir sama.
(pca <- princomp(x, cor=TRUE))
pca$loadings[,1]
biplot(pca, choices=2:3)
Output untuk perintah pertama adalah
Standard deviations:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
1.8999932 0.8304711 0.5750447 0.4399687 0.4196363
Sebagian besar varians diperhitungkan oleh komponen pertama (1,9 vs 0,83 dan kurang). Memuat ke komponen ini dalam ukuran yang hampir sama, seperti yang ditunjukkan oleh output ke perintah kedua:
Price MPG.city Horsepower Fuel.tank.capacity Turn.circle
0.4202798 -0.4668682 0.4640081 0.4758205 0.4045867
Ini menunjukkan - dalam kasus ini - bahwa plot koordinat bintang default sedang diproyeksikan di sepanjang komponen utama pertama dan karenanya menunjukkan, pada dasarnya, beberapa kombinasi dua dimensi dari PC kedua hingga kelima. Nilainya dibandingkan dengan hasil PCA (atau analisis faktor terkait) karena itu dipertanyakan; manfaat utama mungkin dalam interaktivitas yang diusulkan.
Meskipun R
biplot default terlihat mengerikan, ini untuk perbandingan. Untuk membuatnya cocok dengan plot koordinat bintang dengan lebih baik, Anda harus mengubah agar setuju dengan urutan sumbu yang ditunjukkan pada biplot ini.ui