我正试图找到一种方法,使得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适用于大量的学科领域。 –