Bạn có thể sử dụng bộ dữ liệu decathlon {FactoMineR} để sao chép này. Câu hỏi là tại sao các giá trị riêng được tính toán khác với các ma trận hiệp phương sai.
Dưới đây là các giá trị riêng sử dụng 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
Và sử dụng tương tự 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
Bạn có thể giải thích cho tôi tại sao các giá trị riêng được tính trực tiếp khác với giá trị đó không? (các hàm riêng giống nhau):
> 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
Ngoài ra, prcomp
phương pháp thay thế cho các giá trị riêng giống như tính toán trực tiếp:
> 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
Tại sao làm PCA
/ princomp
và prcomp
đưa ra các giá trị riêng khác nhau?
princomp
: "Lưu ý rằng phép tính mặc định sử dụng ước số N cho ma trận hiệp phương sai." Trang trợ giúp cho prcomp
: "Không giống như Princeomp, phương sai được tính toán với ước số thông thường N-1."