Làm cách nào để vẽ một tập dữ liệu 5D trong tọa độ ngôi sao Ngôi sao?


8

Tôi đang đọc bài báo "Tọa độ sao: Kỹ thuật trực quan đa chiều với xử lý thống nhất các kích thước" và cố gắng vẽ biểu đồ dữ liệu của tôi.

Giả sử tôi có , điểm dữ liệu năm chiều và điểm được tính theo công thức được giải thích trong bài báo. A(2,5,3,1,8)

Ý tưởng cơ bản của tọa độ sao là sắp xếp các trục tọa độ trên một vòng tròn trên mặt phẳng hai chiều với các góc bằng (ban đầu) giữa các trục có gốc tọa độ tại tâm của vòng tròn (Hình 1). Ban đầu, tất cả các trục có cùng chiều dài. Các điểm dữ liệu được chia tỷ lệ theo chiều dài của trục, với ánh xạ tối thiểu đến điểm gốc và tối đa ở đầu kia của trục. Các vectơ đơn vị được tính toán tương ứng. ...

Đây chỉ đơn giản là một phần mở rộng của các biểu đồ phân tán 2d và 3d điển hình lên các kích thước cao hơn với chuẩn hóa.

Tôi có thời gian khó nắm bắt ý tưởng. Làm thế nào để tôi vẽ nó? Vấn đề chính là tôi không thể hiểu công thức trong bài báo.


Bạn muốn âm mưu gì? đại diện 3d? một đại diện 2d sẽ hiển thị một số cụm?
lcrmorin

2
Bạn đang mong đợi chúng tôi đến Google rằng, hãy đọc bài báo và tìm "công thức" .... Vui lòng cung cấp thêm thông tin.
Nick Cox

Kỹ thuật này liên quan chặt chẽ với "biplot" PCA. Tôi tin rằng "tọa độ sao" có thể giống như những người sử dụng trong một biplot cho PCA trong đó thành phần chủ yếu đầu tiên là và máy tính thứ hai là bất kỳ trực giao vector với nó. (1,1,,1)
whuber

cảm ơn các bạn đã phản hồi @Imorin Tôi nghĩ đại diện 2d .. @ whuber ♦ -are biplot và sao phối hợp tương tự bạn có nghĩa là gì?
solti

Tôi đã thu hẹp câu hỏi của mình .. làm cách nào để tìm vectơ đơn vị dọc theo x và y.
solti

Câu trả lời:


10

"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=(xj1,xj2,,xjd)Rd{xji,j=1,2,}[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 dRdei=(0,0,,0,1,0,0,,0)1ithzj=zj1e1+zj2e2++zjded. 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.{ui,i=1,2,,d}R2eiuiRdR2zjui

(Một phiên bản tương tác sẽ cho phép người dùng xoay mỗi riêng.)ui


Để minh họa điều này, đây là một Rtriể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 :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

Đó 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")

Cốt truyện ngôi sao


Để 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)

Ma trận Scatterplot


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.

Rui

Biplot


1

Ngoài câu trả lời hay của @whuber, tôi muốn thêm một số tùy chọn khác để hiển thị dữ liệu đa chiều (đa biến) trong "tọa độ sao", vì mục đích bao quát toàn diện hơn. Câu trả lời của tôi tập trung vào việc thực hiện trực quan hóa dữ liệu đa biến như vậy R.

Tôi sẽ bắt đầu bằng cách nói rằng các ô sao (trong cả hai biến thể nhệnradar ) được hỗ trợ bởi gói Rcơ sở graphicsthông qua chức năng stars(): http://stat.ethz.ch/R-manual/R-devel/l Library / graphics / html / sao.html . Tiếp theo, trong R"chuỗi thức ăn", rõ ràng là ggplot2gói, mà AFAIK hiện không có chức năng cụ thể cho loại lô này (vui lòng sửa lại cho tôi, nếu tôi không cập nhật về điều này). Tuy nhiên, một triển khai cơ bản của Hadley Wickham, sử dụng coord_polar(), có thể được tìm thấy ở đây . Ngoài ra, ggsubplotgói dựa trên ggplot2 cung cấp chức năng có liên quan geom_star(): http://www.inside-r.org/packages/cran/ggsubplot/docs/geom_star .

Các gói khác có chức năng vẽ ngôi sao bao gồm: psych- chức năng spider()radar()- http://personality-project.org/r/html/spider.html , plotrix- chức năng radial.plot()- http://onertipaday.blogspot.com/2009/01/radar -chart.html ) và, có thể, một số người khác.

Ngoài những điều trên, cần lưu ý rằng có thể tạo các ô sao trong phần mềm hỗ trợ Web , dễ dàng giao tiếp với R. Ví dụ: đây là một biến thể của một ngôi sao trong đó plotly, nơi nó được gọi là biểu đồ vùng cực: https://plot.ly/r/polar-chart/#Polar-Area-Chart . Nói về Rvà trực quan hóa dữ liệu hỗ trợ Web, không thể không nhắc đến thư viện D3.js tuyệt vời, cũng có thể được truy cập từ đó R. Dưới đây là cách tạo một cốt truyện ngôi sao đẹp mắt, sử dụng D3.js: http://www.visualcinnamon.com/2013/09/making-d3-radar-chart-look-bit-better.html .


2
Đóng góp của bạn được đánh giá cao. Tuy nhiên, nó dường như không liên quan trực tiếp đến chủ đề này. Bài viết được tham chiếu bởi OP quan tâm đến trực quan hóa "... cho các nhiệm vụ phân tích đa yếu tố và khám phá cụm". Nó xem tọa độ , chứ không phải hình thức của âm mưu, là sự đổi mới có liên quan, cho rằng chúng là "... các phép biến đổi nâng cao sẽ cải thiện sự hiểu biết dữ liệu trong đa chiều [ sic ]." Cụ thể, "tọa độ sao" không chỉ đơn thuần là tọa độ mặc định trong biểu đồ sao xuyên tâm, vì câu trả lời của bạn dường như giả định.
whuber

1
@whuber: Cảm ơn những lời tốt đẹp và chỉ ra vấn đề. Khi đọc lại bài báo, tôi đồng ý với nhận xét của bạn. Có một sự khác biệt cơ bản giữa đề xuất trong phương pháp giấy và phương pháp sao tiêu chuẩn. Tuy nhiên, từ quan điểm trực quan hóa dữ liệu và ý tưởng cốt lõi của việc trình bày ( biến đổi ) dữ liệu đa chiều thông qua hệ thống tọa độ cực , chúng vẫn có liên quan.
Alexanderr Blekh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.