Sie können den Zehnkampf-Datensatz {FactoMineR} verwenden, um dies zu reproduzieren. Die Frage ist, warum sich die berechneten Eigenwerte von denen der Kovarianzmatrix unterscheiden.
Hier sind die Eigenwerte mit 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
Und das gleiche mit 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
Können Sie mir erklären, warum sich die direkt berechneten Eigenwerte von denen unterscheiden? (Die Eigenvektoren sind die gleichen):
> 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
Die alternative prcomp
Methode liefert auch die gleichen Eigenwerte wie die direkte Berechnung:
> 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
Warum tun PCA
/ princomp
und prcomp
gibt verschiedene Eigenwerte?
princomp
: "Beachten Sie, dass die Standardberechnung den Divisor N für die Kovarianzmatrix verwendet."prcomp
Hilfeseite für : "Im Gegensatz zu princomp werden Varianzen mit dem üblichen Divisor N-1 berechnet."Antworten:
Wie in den Kommentaren erwähnt,N N- 1 N
princomp
wird für den Divisor verwendet, aber für die direkte Berechnung mit beiden wird anstelle von .N - 1 Nprcomp
cov
Dies wird sowohl im Detailabschnitt von erwähnt
help(princomp)
:und der Detailbereich von
help(prcomp)
:Sie können dies auch in der Quelle sehen. Das folgendeN
princomp
Quelltext- Snippet zeigt beispielsweise, dass ( ) als Nenner für die Berechnung verwendet wird .n.obs
cv
Sie können diese Multiplikation vermeiden, indem Sie das
covmat
Argument anstelle desx
Arguments angeben.Update bezüglich der PCA-Scores:
Sie könnenz N
cor = TRUE
in Ihrem Aufruf festlegenprincomp
, dass PCA für die Korrelationsmatrix (anstelle der Kovarianzmatrix) ausgeführt werden soll. Dies führt dazuprincomp
, dass die Daten bewertet werden, der Nenner wird jedoch weiterhin .NAls Ergebnis( N- 1 ) / N---------√
princomp(scale(data))$scores
undprincomp(data, cor = TRUE)$scores
wird sich durch den Faktor .quelle
cv <- cov.wt(z, method="ML")
die 2 folgenden Zeilen nicht unnötig macht?