我正試圖找到一種方法,使得R更加便攜的3D PCA可視化; 我已使用prcomp()
在2D矩陣上運行PCA。從R中提取3D座標PCA
- 如何導出數據點的3D座標以及與每個點相關的標籤和顏色(RGB)?
- 與
princomp()
和prcomp()
有什麼實際區別? - 關於如何使用HTML5和畫布最佳查看3D PCA圖的任何想法?
謝謝!
我正試圖找到一種方法,使得R更加便攜的3D PCA可視化; 我已使用prcomp()
在2D矩陣上運行PCA。從R中提取3D座標PCA
princomp()
和prcomp()
有什麼實際區別?謝謝!
下面是一個例子,從工作:
pc <- prcomp(~ . - Species, data = iris, scale = TRUE)
分數從部件x
萃取軸;因此你可以只寫出來(你不說你想怎麼導出)爲CSV使用:
write.csv(pc$x[, 1:3], "my_pc_scores.csv")
如果你想分配信息,以這些分數(顏色和標籤,這是不相關的東西與PCA,但你自己分配),然後將它們添加到分數矩陣,然後出口。在上面的例子中,有三個物種各有50個觀測值。如果我們要導出的成績旁邊的信息,然後像這樣將工作
scrs <- data.frame(pc$x[, 1:3], Species = iris$Species,
Colour = rep(c("red","green","black"), each = 50))
write.csv(scrs, "my_pc_scores2.csv")
scrs
看起來是這樣的:
> head(scrs)
PC1 PC2 PC3 Species Colour
1 -2.257141 -0.4784238 0.12727962 setosa red
2 -2.074013 0.6718827 0.23382552 setosa red
3 -2.356335 0.3407664 -0.04405390 setosa red
4 -2.291707 0.5953999 -0.09098530 setosa red
5 -2.381863 -0.6446757 -0.01568565 setosa red
6 -2.068701 -1.4842053 -0.02687825 setosa red
更新錯過有關RGB點。見?rgb
爲R中指定此方法,但是如果你想要的是RGB字符串,然後更改上述使用類似
Colour = rep(c("#FF0000","#00FF00","#000000"), each = 50)
相反,在那裏你指定你想要的RGB字符串。
princomp()
和prcomp()
之間的本質區別是用於計算PCA的算法。 princomp()
使用協方差或相關矩陣的Eigen分解,而prcomp()
使用原始數據矩陣的奇異值分解(SVD)。princomp()
僅處理數據中至少包含同樣多樣本(行)和變量(列)的數據集。 prcomp()
可以處理那些類型的數據和數據集,其中列數多於行數。另外,也許更重要的是取決於你的想法,SVD優於特徵分解,因爲它具有更好的數值精度。
我已經用html5和canvas標記了Q,希望那些專家能夠提供幫助。如果您沒有得到任何答覆,請從Q中刪除第3點,並專門針對使用畫布顯示PC的主題開始一個新的操作,並參考該細節。
您可以通過做str(object_name)
瞭解任何R對象。在這種情況下:
m <- matrix(rnorm(50), nrow = 10)
res <- prcomp(m)
str(m)
如果你看一下幫助頁面prcomp
做?prcomp
,你可以發現,得分在res$x
和負荷都在res$rotation
。這些已被PC標記。沒有顏色,除非你決定在劇情過程中分配一些顏色。請參閱相應的幫助頁面,以比較princomp
與prcomp
,以便比較兩種功能。基本上,它們之間的區別與幕後使用的方法有關。我無法幫助你處理最後一個問題。
您聲明您在2D矩陣上執行PCA。如果這是您的數據矩陣,則無法獲得3D PCA。 Ofcourse它可能是你的二維矩陣是數據的協方差矩陣,在這種情況下,你需要使用princomp
和explictely通過協方差矩陣m
像這樣(不prcomp
!):
princomp(covmat = m)
傳遞的協方差矩陣如:
princomp(m)
不會產生正確的結果。
您是否正在對數據描述進行相當概括的觀察?考慮'mat < - matrix(rnorm(100),ncol = 10)';這是一個二維數據集,意思是「長度(dim(mat))」是2.然而,由這些數據表示的空間是10-d。 –
你最好問這些問題作爲單獨的問題(特別是問題3)。 –
你必須提供更多信息。你的數據是什麼,你的2d矩陣是一個cov矩陣,RGB的含義是什麼?在你的領域,這種分析可能是顯而易見的,但PCA適用於大量的學科領域。 –