Answers:
它们之间的区别与它们执行的PCA类型无关,而与它们使用的方法无关。作为帮助页的prcomp
说:
该计算是通过对(居中的和可能缩放的)数据矩阵进行奇异值分解来完成的,而不是通过使用
eigen
协方差矩阵来完成的。通常,这是数值精度的首选方法。
另一方面,princomp
帮助页面显示:
使用
eigen
由确定的相关或协方差矩阵完成计算cor
。这样做是为了与S-PLUS结果兼容。一种首选的计算方法是使用svd
onx
,就像在中所做的那样prcomp
。”
因此,尽管在实践中您不太可能看到很大的差异(例如,如果在帮助页面上运行示例,您应该会得到相同的结果)prcomp
是首选。
prcomp
是首选方法。
来自Gregory B. Anderson的有用且特定的文档,标题为PRINCIPAL COMPONENT ANALYSIS IN R AN EXAMINATION OF THE DIFFERENT FUNCTIONS AND METHODS TO PERFORM PCA
,提供了有关此主题的更多信息。
以下两段摘自引言:
在R中,有两种执行PCA的常规方法,不会丢失任何值:(1)频谱分解(R模式[也称为本征分解])和(2)奇异值分解(Q模式; R Development Core Team 2011)。这两种方法都可以分别使用本征函数(R-mode)和svd(Q-mode)进行长时执行,或者可以使用stats程序包和其他附加可用程序包中的许多PCA函数来执行。分析的频谱分解方法检查变量之间的协方差和相关性,而奇异值分解方法则检查样本之间的协方差和相关性。尽管两种方法都可以在R中轻松执行,但是奇异值分解方法(即
本文档重点在于比较在R中执行PCA的不同方法,并提供适当的可视化技术来检查统计数据包中的正态性。更具体地说,本文档比较了为PCA创建或可用于PCA的六个不同功能:本征,princomp,svd,prcomp,PCA和pca。在整个文档中,使用Courier New字体将执行这些功能的基本R代码嵌入文本中,并使用Tinn-R(https://sourceforge.net/projects/tinn-r)中提供的技术对代码进行颜色编码。此外,使用仿真过程比较函数的结果,以查看不同方法在特征值,特征向量和输出中提供的分数方面是否不同。
以下是我的测试结果:
> job<-read.table("./job_perf.txt", header=TRUE, sep="")
> pc.cr<-prcomp(job, scale=TRUE, cor=TRUE, scores=TRUE)
> pc.cr1<-princomp(job, scale=TRUE, cor=TRUE, scores=TRUE)
> pc.cr$scale
commun probl_solv logical learn physical appearance
5.039841 1.689540 2.000000 4.655398 3.770700 4.526689
> pc.cr1$scale
commun probl_solv logical learn physical appearance
4.805300 1.610913 1.906925 4.438747 3.595222 4.316028
测试数据:
commun probl_solv logical learn physical appearance
12 52 20 44 48 16
12 57 25 45 50 16
12 54 21 45 50 16
13 52 21 46 51 17
14 54 24 46 51 17
22 52 25 54 58 26
22 56 26 55 58 27
17 52 21 45 52 17
15 53 24 45 53 18
23 54 23 53 57 24
25 54 23 55 58 25