您可以使用十项全能数据集{FactoMineR}重现该数据。问题是为什么计算出的特征值与协方差矩阵的特征值不同。
以下是使用的特征值princomp
:
> library(FactoMineR);data(decathlon)
> pr <- princomp(decathlon[1:10], cor=F)
> pr$sd^2
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6
1.348073e+02 2.293556e+01 9.747263e+00 1.117215e+00 3.477705e-01 1.326819e-01
Comp.7 Comp.8 Comp.9 Comp.10
6.208630e-02 4.938498e-02 2.504308e-02 4.908785e-03
和使用相同PCA
:
> res<-PCA(decathlon[1:10], scale.unit=FALSE, ncp=5, graph = FALSE)
> res$eig
eigenvalue percentage of variance cumulative percentage of variance
comp 1 1.348073e+02 79.659589641 79.65959
comp 2 2.293556e+01 13.552956464 93.21255
comp 3 9.747263e+00 5.759799777 98.97235
comp 4 1.117215e+00 0.660178830 99.63252
comp 5 3.477705e-01 0.205502637 99.83803
comp 6 1.326819e-01 0.078403653 99.91643
comp 7 6.208630e-02 0.036687700 99.95312
comp 8 4.938498e-02 0.029182305 99.98230
comp 9 2.504308e-02 0.014798320 99.99710
comp 10 4.908785e-03 0.002900673 100.00000
您能向我解释为什么直接计算出的特征值不同于那些特征值吗?(特征向量相同):
> eigen(cov(decathlon[1:10]))$values
[1] 1.381775e+02 2.350895e+01 9.990945e+00 1.145146e+00 3.564647e-01
[6] 1.359989e-01 6.363846e-02 5.061961e-02 2.566916e-02 5.031505e-03
另外,替代prcomp
方法给出的特征值与直接计算相同:
> prc <- prcomp(decathlon[1:10])
> prc$sd^2
[1] 1.381775e+02 2.350895e+01 9.990945e+00 1.145146e+00 3.564647e-01
[6] 1.359989e-01 6.363846e-02 5.061961e-02 2.566916e-02 5.031505e-03
为什么PCA
/ princomp
并prcomp
给出不同的特征值?
根据您使用协方差矩阵还是相关矩阵,PCA将为您提供不同的结果。
—
charles.y.zheng 2011年
差异似乎相对较小,但可能太大而无法成为简单的数值问题。它可以通过以下方式正火之间的差或ñ - 1,例如,之前计算SVD或本征值分解来计算协方差的估计时?
—
主教
@cardinal好猜!注意,两个不同的特征值序列具有相同的连续比率。 因此,一组是另一组的常数倍。倍数是1.025 = 41/40(正好)。我不清楚这是从哪里来的。也许数据集包含41个元素,而OP仅显示前10个元素?
—
whuber
@cardinal实际上:帮助页面
—
caracal
princomp
:“请注意,默认计算使用除数N作为协方差矩阵。” 帮助页面prcomp
:“与princomp不同,使用通常的除数N-1计算方差。”
@caracal,您应该将您的评论复制到答案中(并可能将其设为CW),以便将其接受并可以将问题标记为已解决。
—
主教