"Tọa độ sao" được dự định sửa đổi tương tác, bắt đầu bằng mặc định. Câu trả lời này cho thấy cách tạo mặc định; các sửa đổi tương tác là một chi tiết lập trình.
Dữ liệu được coi là tập hợp các vectơ trong R d . Đây là lần đầu tiên bình thường hóa riêng biệt trong từng phối hợp, tuyến tính chuyển dữ liệu { x j i , j = 1 , 2 , ... } vào khoảng [ 0 , 1 ]xj= ( Xj 1, xj 2, Lọ , xj d)Rd{ xj i, j = 1 , 2 , Hoài }[ 0 , 1 ]. Tất nhiên, điều này được thực hiện bằng cách trừ tối thiểu của chúng khỏi từng phần tử và chia cho phạm vi. Gọi dữ liệu chuẩn hóa .zj
Cơ sở thông thường của là tập hợp các vectơ e i = ( 0 , 0 , ... , 0 , 1 , 0 , 0 , ... , 0 ) có một đơn 1 trong i thứ diễn ra. Trong điều kiện của cơ sở đó, z j = z j 1 e 1 + z j 2 e 2 + ⋯ + z j d e dRdeTôi= ( 0 , 0 , ... , 0 , 1 , 0 , 0 , ... , 0 )1Tôithứ tựzj= zj 1e1+ zj 2e2+ ⋯ + zj ded. Một "phép chiếu tọa độ sao" chọn một tập các vectơ đơn vị riêng biệt trong R 2 và ánh xạ e i đến u i . Điều này xác định một phép biến đổi tuyến tính từ R d sang R 2 . Bản đồ này được áp dụng cho z j --it chỉ là phép nhân ma trận - để tạo ra đám mây điểm hai chiều, được mô tả dưới dạng phân tán. Các vectơ đơn vị u i được vẽ và dán nhãn để tham khảo.{ bạnTôi, i = 1 , 2 , Hoài , d}R2eTôibạnTôiRdR2zjbạnTôi
(Một phiên bản tương tác sẽ cho phép người dùng xoay mỗi riêng.)bạnTôi
Để minh họa điều này, đây là một R
triển khai được áp dụng cho một bộ dữ liệu về các đặc tính hiệu suất ô tô. Trước tiên hãy lấy dữ liệu:
library(MASS)
x <- subset(Cars93,
select=c(Price, MPG.city, Horsepower, Fuel.tank.capacity, Turn.circle))
Bước đầu tiên là bình thường hóa dữ liệu:
x.range <- apply(x, 2, range)
z <- t((t(x) - x.range[1,]) / (x.range[2,] - x.range[1,]))
Như một mặc định, hãy tạo vectơ đơn vị khoảng cách bằng nhau cho u i . Chúng xác định phép chiếu được áp dụng cho z :dbạnTôiprj
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
Đó là nó - tất cả chúng ta đã sẵn sàng để âm mưu. Nó được khởi tạo để cung cấp chỗ cho các điểm dữ liệu, trục tọa độ và nhãn của chúng:
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="")
Đây là cốt truyện, với một dòng cho mỗi phần tử: trục, nhãn và điểm:
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")
Để hiểu cốt truyện này, có thể giúp so sánh nó với một phương thức truyền thống, ma trận phân tán:
pairs(x)
Một phân tích thành phần chính dựa trên tương quan (PCA) tạo ra gần như cùng một kết quả.
(pca <- princomp(x, cor=TRUE))
pca$loadings[,1]
biplot(pca, choices=2:3)
Đầu ra cho lệnh đầu tiên là
Standard deviations:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5
1.8999932 0.8304711 0.5750447 0.4399687 0.4196363
Hầu hết các phương sai được tính bởi thành phần đầu tiên (1.9 so với 0.83 trở xuống). Các tải trọng lên thành phần này có kích thước gần như bằng nhau, như được hiển thị bởi đầu ra cho lệnh thứ hai:
Price MPG.city Horsepower Fuel.tank.capacity Turn.circle
0.4202798 -0.4668682 0.4640081 0.4758205 0.4045867
Điều này cho thấy - trong trường hợp này - rằng biểu đồ tọa độ sao mặc định đang chiếu dọc theo thành phần chính đầu tiên và do đó, về cơ bản, là sự kết hợp hai chiều của PC thứ hai đến thứ năm. Do đó, giá trị của nó so với kết quả PCA (hoặc phân tích nhân tố liên quan) là đáng nghi ngờ; công đức chính có thể là trong sự tương tác được đề xuất.
R
bạnTôi