Principal Components Analysis (PCA) - Phân tích thành phần chính: Là phương pháp phân tích nhằm giảm chiều dữ liệu (giữ lại những thành phần/biến quan trọng) mà vẫn dữ được các đặc trưng cơ bản của dữ liệu.
- Phân tích PCA sẽ giúp chúng ta:

Hình 1: Hình minh hoạ PCA (Nguồn: Internet)

Hay nói cách khác, PCA là phương pháp chuyển hệ toạ độ (Hình mình họa)

Hình 2: Thay đổi hệ toạ độ trong PCA (Nguồn: Internet)

- PCA giả định rằng các hướng có phương sai lớn nhất là “quan trọng” nhất (tức là thành phần chính quan trọng nhất). Trong hình 2, trục PC1 là hướng chính đầu tiên mà các mẫu cho thấy sự biến thiên lớn nhất. Trục PC2 là hướng quan trọng thứ hai và nó trực giao với trục PC1.

Hình 2: Thay đổi hệ toạ độ trong PCA (Nguồn: Internet)

Eigenvalues / Variances

Thực hành phân tích PCA trong R

Cài các packages sử dụng trong PCA: install.packages(c("FactoMineR", "factoextra"))

Gọi các packages

library("FactoMineR")
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

Đọc dữ liệu vào R

Sử dụng data set Iris

data(iris)
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Tách các biến định lượng thành một data set mới

df <- iris[, 1:4]
head(df)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          5.1         3.5          1.4         0.2
## 2          4.9         3.0          1.4         0.2
## 3          4.7         3.2          1.3         0.2
## 4          4.6         3.1          1.5         0.2
## 5          5.0         3.6          1.4         0.2
## 6          5.4         3.9          1.7         0.4

Sử dụng hàm PCA trong FactoMineR package

PCA(X, scale.unit = TRUE, ncp = 5, graph = TRUE)

  • “scale.unit = TRUE”: Một giá trị logic, dữ liệu sẽ được chia tỉ lệ thành đơn vị phương sai trước khi phân tích. Việc tiêu chuẩn hóa theo cùng một thang đo này tránh cho một số biến trở nên thống trị chỉ vì các đơn vị đo lường lớn của chúng. Điều này giúp cho các biến có thể so sánh được.
library("FactoMineR")
pca <- PCA(df, graph = FALSE)
print(pca)
## **Results for the Principal Component Analysis (PCA)**
## The analysis was performed on 150 individuals, described by 4 variables
## *The results are available in the following objects:
## 
##    name               description                          
## 1  "$eig"             "eigenvalues"                        
## 2  "$var"             "results for the variables"          
## 3  "$var$coord"       "coord. for the variables"           
## 4  "$var$cor"         "correlations variables - dimensions"
## 5  "$var$cos2"        "cos2 for the variables"             
## 6  "$var$contrib"     "contributions of the variables"     
## 7  "$ind"             "results for the individuals"        
## 8  "$ind$coord"       "coord. for the individuals"         
## 9  "$ind$cos2"        "cos2 for the individuals"           
## 10 "$ind$contrib"     "contributions of the individuals"   
## 11 "$call"            "summary statistics"                 
## 12 "$call$centre"     "mean of the variables"              
## 13 "$call$ecart.type" "standard error of the variables"    
## 14 "$call$row.w"      "weights for the individuals"        
## 15 "$call$col.w"      "weights for the variables"

Trích xuất giá trị eigenvalue và các phương sai của các PC bằng factoextra package

library(factoextra)
eig.val <- get_eigenvalue(pca)
eig.val
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.91849782       72.9624454                    72.96245
## Dim.2 0.91403047       22.8507618                    95.81321
## Dim.3 0.14675688        3.6689219                    99.48213
## Dim.4 0.02071484        0.5178709                   100.00000
  • Tỉ lệ của các biến thiên được thể hiện bằng một giá trị eigenvalue ở cột thứ 2. VD: Dim.1 có eigen value là 2.918, tương ứng với tỉ lệ % phương sai là 72.96 (= 2.918/4)

  • Các giá trị eigen được sử dụng để xác định số lượng các thành phần chính cần giữ lại sau PCA (Kaiser 1961):

  • Nếu giá trị eigen > 1 nói lên rằng các thành phần chính (PCs) chiếm nhiều phương sai hơn so với một trong các biến ban đầu. Đây thường được dùng như một điểm giới hạn để xác định các PC được giữ lại.*

  • Chúng ta có thể giới hạn số lượng thành phần chính mà số đó chiếm một phần nhất định của tổng phương sai (VD > 70%).

Trực quan tỉ lệ các thành phần chính bằng biểu đồ scree với các hàm fviz_eig() hoặc fviz_screeplot() trong packages factoextra

fviz_eig(pca, addlabels = TRUE, ylim = c(0, 100))

Trực quan hoá kết quả PCA bằng biểu đồ với mỗi nhóm gắn với các ký hiệu và màu sắc khác nhau.

fviz_pca_ind(pca,
             geom.ind = "point", # show points only (nbut not "text")
             col.ind = iris$Species, # color by groups
             palette = c("#00AFBB", "#E7B800", "#FC4E07"),
             addEllipses = TRUE, # Concentration ellipses
             legend.title = "Groups"
             )

Phân tích PCA với các gói lệnh có sẵn trong R

Tính các thành phần chính PCA

myPr <- prcomp(iris[, -5])
myPr <- prcomp(iris[, -5], scale = TRUE)
myPr # Kiểm tra kết quả
## Standard deviations (1, .., p=4):
## [1] 1.7083611 0.9560494 0.3830886 0.1439265
## 
## Rotation (n x k) = (4 x 4):
##                     PC1         PC2        PC3        PC4
## Sepal.Length  0.5210659 -0.37741762  0.7195664  0.2612863
## Sepal.Width  -0.2693474 -0.92329566 -0.2443818 -0.1235096
## Petal.Length  0.5804131 -0.02449161 -0.1421264 -0.8014492
## Petal.Width   0.5648565 -0.06694199 -0.6342727  0.5235971
  • Thành phần chính đầu tiên có tương quan thuận với chiều dài đài hoa, chiều dài cánh hoa và chiều rộng cánh hoa (Ba biến này có mối tương quan cao trong phân tích biểu đồ nhiệt phân cụm).
  • Chiều rộng đài hoa là biến số gần như giống nhau giữa ba loài với độ lệch chuẩn nhỏ.
  • PC2 chủ yếu được xác định bởi chiều rộng lá đài (Sepal.Width), ít hơn bởi chiều dài lá đài.

Lưu ý rằng “scale = TRUE” trong lệnh trên có nghĩa là dữ liệu được chuẩn hóa trước khi phân tích PCA, do đó mỗi biến có đơn vị phương sai.

plot(myPr, ylim = c(0,4)) # Biểu đồ phương sai mỗi thành phần chính thu được

plot(myPr, type = "l") # Biểu đồ phương sai mỗi thành phần chính thu được

biplot(myPr)

biplot(myPr, scale = 0)

Tách điểm các thành phần chính (PC score)

str(myPr) # Kiểm tra cấu trúc đối tượng, liệt kê tất cả các thành phần
## List of 5
##  $ sdev    : num [1:4] 1.708 0.956 0.383 0.144
##  $ rotation: num [1:4, 1:4] 0.521 -0.269 0.58 0.565 -0.377 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
##   .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
##  $ center  : Named num [1:4] 5.84 3.06 3.76 1.2
##   ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
##  $ scale   : Named num [1:4] 0.828 0.436 1.765 0.762
##   ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
##  $ x       : num [1:150, 1:4] -2.26 -2.07 -2.36 -2.29 -2.38 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : NULL
##   .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
##  - attr(*, "class")= chr "prcomp"
myPr$x    # Giá trị toạ độ mới cho mỗi observation
##                PC1          PC2          PC3          PC4
##   [1,] -2.25714118 -0.478423832  0.127279624  0.024087508
##   [2,] -2.07401302  0.671882687  0.233825517  0.102662845
##   [3,] -2.35633511  0.340766425 -0.044053900  0.028282305
##   [4,] -2.29170679  0.595399863 -0.090985297 -0.065735340
##   [5,] -2.38186270 -0.644675659 -0.015685647 -0.035802870
##   [6,] -2.06870061 -1.484205297 -0.026878250  0.006586116
##   [7,] -2.43586845 -0.047485118 -0.334350297 -0.036652767
##   [8,] -2.22539189 -0.222403002  0.088399352 -0.024529919
##   [9,] -2.32684533  1.111603700 -0.144592465 -0.026769540
##  [10,] -2.17703491  0.467447569  0.252918268 -0.039766068
##  [11,] -2.15907699 -1.040205867  0.267784001  0.016675503
##  [12,] -2.31836413 -0.132633999 -0.093446191 -0.133037725
##  [13,] -2.21104370  0.726243183  0.230140246  0.002416941
##  [14,] -2.62430902  0.958296347 -0.180192423 -0.019151375
##  [15,] -2.19139921 -1.853846555  0.471322025  0.194081578
##  [16,] -2.25466121 -2.677315230 -0.030424684  0.050365010
##  [17,] -2.20021676 -1.478655729  0.005326251  0.188186988
##  [18,] -2.18303613 -0.487206131  0.044067686  0.092779618
##  [19,] -1.89223284 -1.400327567  0.373093377  0.060891973
##  [20,] -2.33554476 -1.124083597 -0.132187626 -0.037630354
##  [21,] -1.90793125 -0.407490576  0.419885937  0.010884821
##  [22,] -2.19964383 -0.921035871 -0.159331502  0.059398340
##  [23,] -2.76508142 -0.456813301 -0.331069982  0.019582826
##  [24,] -1.81259716 -0.085272854 -0.034373442  0.150636353
##  [25,] -2.21972701 -0.136796175 -0.117599566 -0.269238379
##  [26,] -1.94532930  0.623529705  0.304620475  0.043416203
##  [27,] -2.04430277 -0.241354991 -0.086075649  0.067454082
##  [28,] -2.16133650 -0.525389422  0.206125707  0.010241084
##  [29,] -2.13241965 -0.312172005  0.270244895  0.083977887
##  [30,] -2.25769799  0.336604248 -0.068207276 -0.107918349
##  [31,] -2.13297647  0.502856075  0.074757996 -0.048027970
##  [32,] -1.82547925 -0.422280389  0.269564311  0.239069476
##  [33,] -2.60621687 -1.787587272 -0.047070727 -0.228470534
##  [34,] -2.43800983 -2.143546796  0.082392024 -0.048053409
##  [35,] -2.10292986  0.458665270  0.169706329  0.028926042
##  [36,] -2.20043723  0.205419224  0.224688852  0.168343905
##  [37,] -2.03831765 -0.659349230  0.482919584  0.195702902
##  [38,] -2.51889339 -0.590315163 -0.019370918 -0.136048774
##  [39,] -2.42152026  0.901161067 -0.192609402 -0.009705907
##  [40,] -2.16246625 -0.267981199  0.175296561  0.007023875
##  [41,] -2.27884081 -0.440240541 -0.034778398  0.106626042
##  [42,] -1.85191836  2.329610745  0.203552303  0.288896090
##  [43,] -2.54511203  0.477501017 -0.304745527 -0.066379077
##  [44,] -1.95788857 -0.470749613 -0.308567588  0.176501717
##  [45,] -2.12992356 -1.138415464 -0.247604064 -0.150539117
##  [46,] -2.06283361  0.708678586  0.063716370  0.139801160
##  [47,] -2.37677076 -1.116688691 -0.057026813 -0.151722682
##  [48,] -2.38638171  0.384957230 -0.139002234 -0.048671707
##  [49,] -2.22200263 -0.994627669  0.180886792 -0.014878291
##  [50,] -2.19647504 -0.009185585  0.152518539  0.049206884
##  [51,]  1.09810244 -0.860091033  0.682300393  0.034717469
##  [52,]  0.72889556 -0.592629362  0.093807452  0.004887251
##  [53,]  1.23683580 -0.614239894  0.552157058  0.009391933
##  [54,]  0.40612251  1.748546197  0.023024633  0.065549239
##  [55,]  1.07188379  0.207725147  0.396925784  0.104387166
##  [56,]  0.38738955  0.591302717 -0.123776885 -0.240027187
##  [57,]  0.74403715 -0.770438272 -0.148472007 -0.077111455
##  [58,] -0.48569562  1.846243998 -0.248432992 -0.040384912
##  [59,]  0.92480346 -0.032118478  0.594178807 -0.029779844
##  [60,]  0.01138804  1.030565784 -0.537100055 -0.028366154
##  [61,] -0.10982834  2.645211115  0.046634215  0.013714785
##  [62,]  0.43922201  0.063083852 -0.204389093  0.039992104
##  [63,]  0.56023148  1.758832129  0.763214554  0.045578465
##  [64,]  0.71715934  0.185602819  0.068429700 -0.164256922
##  [65,] -0.03324333  0.437537419 -0.194282030  0.108684396
##  [66,]  0.87248429 -0.507364239  0.501830204  0.104593326
##  [67,]  0.34908221  0.195656268 -0.489234095 -0.190869932
##  [68,]  0.15827980  0.789451008  0.301028700 -0.204612265
##  [69,]  1.22100316  1.616827281  0.480693656  0.225145511
##  [70,]  0.16436725  1.298259939  0.172260719 -0.051554138
##  [71,]  0.73521959 -0.395247446 -0.614467782 -0.083006045
##  [72,]  0.47469691  0.415926887  0.264067576  0.113189079
##  [73,]  1.23005729  0.930209441  0.367182178 -0.009911322
##  [74,]  0.63074514  0.414997441  0.290921638 -0.273304557
##  [75,]  0.70031506  0.063200094  0.444537765  0.043313222
##  [76,]  0.87135454 -0.249956017  0.471001057  0.101376117
##  [77,]  1.25231375  0.076998069  0.724727099  0.039556002
##  [78,]  1.35386953 -0.330205463  0.259955701  0.066604931
##  [79,]  0.66258066  0.225173502 -0.085577197 -0.036318171
##  [80,] -0.04012419  1.055183583  0.318506304  0.064571834
##  [81,]  0.13035846  1.557055553  0.149482697 -0.009371129
##  [82,]  0.02337438  1.567225244  0.240745761 -0.032663020
##  [83,]  0.24073180  0.774661195  0.150707074  0.023572390
##  [84,]  1.05755171  0.631726901 -0.104959762 -0.183354200
##  [85,]  0.22323093  0.286812663 -0.663028512 -0.253977520
##  [86,]  0.42770626 -0.842758920 -0.449129446 -0.109308985
##  [87,]  1.04522645 -0.520308714  0.394464890  0.037084781
##  [88,]  1.04104379  1.378371048  0.685997804  0.136378719
##  [89,]  0.06935597  0.218770433 -0.290605718 -0.146653279
##  [90,]  0.28253073  1.324886147 -0.089111491  0.008876070
##  [91,]  0.27814596  1.116288852 -0.094172116 -0.269753497
##  [92,]  0.62248441 -0.024839814  0.020412763 -0.147193289
##  [93,]  0.33540673  0.985103828  0.198724011  0.006508757
##  [94,] -0.36097409  2.012495825 -0.105467721  0.019505467
##  [95,]  0.28762268  0.852873116 -0.130452657 -0.107043742
##  [96,]  0.09105561  0.180587142 -0.128547696 -0.229191812
##  [97,]  0.22695654  0.383634868 -0.155691572 -0.132163118
##  [98,]  0.57446378  0.154356489  0.270743347 -0.019794366
##  [99,] -0.44617230  1.538637456 -0.189765199  0.199278855
## [100,]  0.25587339  0.596852285 -0.091572385 -0.058426315
## [101,]  1.83841002 -0.867515056 -1.002044077 -0.049085303
## [102,]  1.15401555  0.696536401 -0.528389994 -0.040385459
## [103,]  2.19790361 -0.560133976  0.202236658  0.058986583
## [104,]  1.43534213  0.046830701 -0.163083761 -0.234982858
## [105,]  1.86157577 -0.294059697 -0.394307408 -0.016243853
## [106,]  2.74268509 -0.797736709  0.580364827 -0.101045973
## [107,]  0.36579225  1.556289178 -0.983598122 -0.132679346
## [108,]  2.29475181 -0.418663020  0.649530452 -0.237246445
## [109,]  1.99998633  0.709063226  0.392675073 -0.086221779
## [110,]  2.25223216 -1.914596301 -0.396224508  0.104488870
## [111,]  1.35962064 -0.690443405 -0.283661780  0.107500284
## [112,]  1.59732747  0.420292431 -0.023108991  0.058136869
## [113,]  1.87761053 -0.417849815 -0.026250468  0.145926073
## [114,]  1.25590769  1.158379741 -0.578311891  0.098826244
## [115,]  1.46274487  0.440794883 -1.000517746  0.274738504
## [116,]  1.58476820 -0.673986887 -0.636297054  0.191222383
## [117,]  1.46651849 -0.254768327 -0.037306280 -0.154811637
## [118,]  2.41822770 -2.548124795  0.127454475 -0.272892966
## [119,]  3.29964148 -0.017721580  0.700957033  0.045037725
## [120,]  1.25954707  1.701046715  0.266643612 -0.064963167
## [121,]  2.03091256 -0.907427443 -0.234015510  0.167390481
## [122,]  0.97471535  0.569855257 -0.825362161  0.027662914
## [123,]  2.88797650 -0.412259950  0.854558973 -0.126911337
## [124,]  1.32878064  0.480202496  0.005410239  0.139491837
## [125,]  1.69505530 -1.010536476 -0.297454114 -0.061437911
## [126,]  1.94780139 -1.004412720  0.418582432 -0.217609339
## [127,]  1.17118007  0.315338060 -0.129503907  0.125001677
## [128,]  1.01754169 -0.064131184 -0.336588365 -0.008625505
## [129,]  1.78237879  0.186735633 -0.269754304  0.030983849
## [130,]  1.85742501 -0.560413289  0.713244682 -0.207519953
## [131,]  2.42782030 -0.258418706  0.725386035 -0.017863520
## [132,]  2.29723178 -2.617554417  0.491826144 -0.210968943
## [133,]  1.85648383  0.177953334 -0.352966242  0.099675959
## [134,]  1.11042770  0.291944582  0.182875741 -0.185721512
## [135,]  1.19845835  0.808606364  0.164173760 -0.487849130
## [136,]  2.78942561 -0.853942542  0.541093785  0.294893130
## [137,]  1.57099294 -1.065013214 -0.942695700  0.035486875
## [138,]  1.34179696 -0.421020154 -0.180271551 -0.214702016
## [139,]  0.92173701 -0.017165594 -0.415434449  0.005220919
## [140,]  1.84586124 -0.673870645  0.012629804  0.194543500
## [141,]  2.00808316 -0.611835930 -0.426902678  0.246711805
## [142,]  1.89543421 -0.687273065 -0.129640697  0.468128374
## [143,]  1.15401555  0.696536401 -0.528389994 -0.040385459
## [144,]  2.03374499 -0.864624030 -0.337014969  0.045036251
## [145,]  1.99147547 -1.045665670 -0.630301866  0.213330527
## [146,]  1.86425786 -0.385674038 -0.255418178  0.387957152
## [147,]  1.55935649  0.893692855  0.026283300  0.219456899
## [148,]  1.51609145 -0.268170747 -0.179576781  0.118773236
## [149,]  1.36820418 -1.007877934 -0.930278721  0.026041407
## [150,]  0.95744849  0.024250427 -0.526485033 -0.162533529
iris2 <- cbind(iris, myPr$x) # Gộp dữ liệu cũ với dữ liệu toạ độ mới
head(iris2)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species       PC1
## 1          5.1         3.5          1.4         0.2  setosa -2.257141
## 2          4.9         3.0          1.4         0.2  setosa -2.074013
## 3          4.7         3.2          1.3         0.2  setosa -2.356335
## 4          4.6         3.1          1.5         0.2  setosa -2.291707
## 5          5.0         3.6          1.4         0.2  setosa -2.381863
## 6          5.4         3.9          1.7         0.4  setosa -2.068701
##          PC2         PC3          PC4
## 1 -0.4784238  0.12727962  0.024087508
## 2  0.6718827  0.23382552  0.102662845
## 3  0.3407664 -0.04405390  0.028282305
## 4  0.5953999 -0.09098530 -0.065735340
## 5 -0.6446757 -0.01568565 -0.035802870
## 6 -1.4842053 -0.02687825  0.006586116

Vẽ biểu đồ PCA

library(ggplot2) # install.packages("ggplot2")
ggplot(iris2, aes(PC1, PC2, col = Species, fill = Species)) +
  stat_ellipse(geom = "polygon", col = "black", alpha = 0.5) +
  geom_point(shape = 21, col = "black") # Biểu diễn bằng điểm

Tuỳ biến

percentVar <- round(100 * summary(myPr)$importance[2, 1:2], 0)     # Tính % các phương sai
ggplot(iris2, aes(PC1, PC2, color = Species, shape = Species)) +  # Vẽ biểu đồ bằng ggplot2
         geom_point(size = 2) +                                       
         xlab(paste0("PC1: ", percentVar[1], "% variance")) +         # x label
         ylab(paste0("PC2: ", percentVar[2], "% variance")) +         # y label
         ggtitle("Principal component analysis (PCA)") +              # Tiêu đề            
         theme(aspect.ratio = 1)  

  • Kết quả trên là một phép chiếu của dữ liệu 4 chiều của data set iris trên không gian 2 chiều bằng cách sử dụng hai thành phần chính đầu tiên.
  • Chúng ta có thể thấy rằng chỉ riêng thành phần chính đầu tiên cũng hữu ích trong việc phân biệt ba loài.
  • Chúng ta có thể thấy: Nếu PC1 <-1, thì là Iris setosa. Nếu PC1> 1,5 thì là Iris virginica. Nếu -1 <PC1 <1, thì Iris versicolor.

Áp dụng với dữ liệu nghiên cứu:

Đọc dữ liệu vào R

df <- read.delim("~/Desktop/ngoc_122423/dat1(leaf).txt")
attach(df)
head(df)
##     len  wid  rat  cir  pet species
## 1 17.42 6.58 2.65 0.67 2.24   L_cad
## 2 17.77 6.88 2.58 0.65 2.15   L_cad
## 3 20.65 7.73 2.67 0.67 2.15   L_cad
## 4 21.57 7.26 2.97 0.63 2.15   L_cad
## 5 25.07 8.34 3.01 0.61 2.40   L_cad
## 6 21.14 8.11 2.61 0.62 2.34   L_cad

Tính các thành phần chính PCA và trực quan bằng biểu đồ

myPr <- (prcomp(df[,-6]))
myPr <- prcomp(df[,-6], scale = TRUE)
plot(scale(df$rat), scale(df$cir))

myPr
## Standard deviations (1, .., p=5):
## [1] 1.7937375 1.2490815 0.3953751 0.2167730 0.1378013
## 
## Rotation (n x k) = (5 x 5):
##            PC1        PC2         PC3         PC4         PC5
## len -0.3637746 -0.5891549 -0.40698235  0.03691426  0.59461519
## wid -0.5323621 -0.1972872 -0.32059196  0.12274502 -0.74821307
## rat  0.4078115 -0.5265585  0.24848647  0.68825093 -0.14488319
## cir -0.4052330  0.5356167  0.01951834  0.69609396  0.25292928
## pet -0.5037208 -0.2232155  0.81820515 -0.15916928  0.04056629
summary(myPr)
## Importance of components:
##                           PC1    PC2     PC3    PC4    PC5
## Standard deviation     1.7937 1.2491 0.39538 0.2168 0.1378
## Proportion of Variance 0.6435 0.3120 0.03126 0.0094 0.0038
## Cumulative Proportion  0.6435 0.9555 0.98680 0.9962 1.0000
plot(myPr, type = "l")

biplot(myPr, scale = 0)

Tách điểm các thành phần chính (PC score)

str(myPr)
## List of 5
##  $ sdev    : num [1:5] 1.794 1.249 0.395 0.217 0.138
##  $ rotation: num [1:5, 1:5] -0.364 -0.532 0.408 -0.405 -0.504 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:5] "len" "wid" "rat" "cir" ...
##   .. ..$ : chr [1:5] "PC1" "PC2" "PC3" "PC4" ...
##  $ center  : Named num [1:5] 14.861 4.906 3.292 0.586 1.329
##   ..- attr(*, "names")= chr [1:5] "len" "wid" "rat" "cir" ...
##  $ scale   : Named num [1:5] 5.043 2.071 1.094 0.127 0.658
##   ..- attr(*, "names")= chr [1:5] "len" "wid" "rat" "cir" ...
##  $ x       : num [1:138, 1:5] -1.82 -1.82 -2.27 -1.98 -2.62 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : NULL
##   .. ..$ : chr [1:5] "PC1" "PC2" "PC3" "PC4" ...
##  - attr(*, "class")= chr "prcomp"
myPr$x
##                 PC1         PC2          PC3          PC4           PC5
##   [1,] -1.822375424 -0.10200054  0.535377932 -0.042439833  0.0065351285
##   [2,] -1.817919438 -0.19182812  0.329730009 -0.154251812 -0.0968247501
##   [3,] -2.274683177 -0.56803577 -0.010807002  0.083740076 -0.0363473093
##   [4,] -1.980438707 -0.94424393  0.049665522  0.031446404  0.1223832878
##   [5,] -2.623206094 -1.64475755 -0.083005207 -0.024176845  0.1150199961
##   [6,] -2.415650436 -0.90855772  0.105866201 -0.248660884 -0.1960686059
##   [7,] -2.537075115 -1.34140140 -0.177274752 -0.222831399 -0.1475469273
##   [8,] -3.082923541 -0.74822448  0.383546187  0.015638561 -0.1683940870
##   [9,] -2.411216996 -0.84243731  0.518035207 -0.326065790 -0.1477641439
##  [10,] -2.324553265 -0.85383640  0.495273904 -0.194456155 -0.0330691848
##  [11,] -2.398257608 -0.47307096  0.654751254 -0.170159371 -0.1001891653
##  [12,] -2.433604483 -0.36722043 -0.319209960  0.222420932 -0.1376201617
##  [13,] -2.620138333 -0.04794171 -0.200492447  0.161808905 -0.3306347285
##  [14,] -1.860879250  0.67036847 -0.390239717  0.170364997 -0.3320612503
##  [15,] -3.642793916 -2.05660684  1.008963116 -0.137100198  0.2044589718
##  [16,] -1.961733624 -0.72786853 -0.622184295  0.080921315 -0.0780149189
##  [17,] -1.985289421 -0.85486318 -0.464109560  0.122170169  0.0274550010
##  [18,] -3.180121855 -1.88135063  0.168296858  0.032780228  0.1719419896
##  [19,] -3.659938260 -1.32668413 -0.179459042  0.243716520 -0.1399827620
##  [20,] -2.244666558 -1.92952785  0.126172585  0.261048161  0.5234275325
##  [21,] -2.522961515 -1.11919593  0.174462003 -0.189409096 -0.0903012343
##  [22,] -2.643014003 -1.04237749  0.049808749 -0.083515970 -0.1028180043
##  [23,] -2.928056402 -1.23068349  0.149138516 -0.015603317 -0.0431472206
##  [24,] -2.568954440 -1.01052375  0.577418482 -0.214660212 -0.0435640603
##  [25,] -2.349902694 -0.87822690  0.335024966  0.093908451  0.1331875434
##  [26,] -2.251947982 -0.74633569  0.472973150 -0.221163339 -0.0691707184
##  [27,] -2.353383936 -0.43799617 -0.475957919  0.216204419 -0.1421675302
##  [28,] -2.663681584  0.03781409 -0.043787948 -0.002141787 -0.4550351100
##  [29,] -1.810984943  0.45164419 -0.595916170  0.234893071 -0.2628147027
##  [30,] -3.699813986 -1.87259317  1.055470184 -0.077424844  0.1799167447
##  [31,] -1.916737555 -0.99580814 -0.670059408 -0.026650890 -0.0752438160
##  [32,] -1.935427856 -0.78738046 -0.585650970  0.206801562  0.0530555916
##  [33,] -2.629090625 -2.32422376  0.144592941  0.650477599 -0.0176764237
##  [34,] -3.734549427 -1.23869951 -0.127884991  0.344456179 -0.1027576899
##  [35,]  1.039264444  1.76057553  0.489210049 -0.074504888  0.1145428223
##  [36,]  0.424273891  1.93798657  0.105924316  0.024099440  0.0725244668
##  [37,]  0.117243825  0.98494418  0.300635840 -0.003610894  0.0992804368
##  [38,] -0.596244419  1.02694801 -0.236481732  0.170726047 -0.0103561130
##  [39,]  0.475238641  0.39024511  0.169266307 -0.122119594  0.0834037958
##  [40,]  0.574508666  0.23494279  0.124209268 -0.166352919  0.0722261278
##  [41,]  0.230232780 -0.20376728  0.364403388 -0.172288858  0.1353216146
##  [42,]  0.550902039  0.75529448 -0.030176811 -0.307130117 -0.0438559785
##  [43,]  0.885496899  0.68803801 -0.100006204 -0.290023224 -0.0313609346
##  [44,]  0.519883408  0.30090234 -0.100458325 -0.417519218 -0.0707057668
##  [45,]  1.030846585 -0.69829160  0.618936020 -0.232092985  0.1129566199
##  [46,]  1.115813949 -0.77813202  0.278456671 -0.021333881  0.1765572726
##  [47,]  0.585328935  0.70692549  0.110624785 -0.071140680  0.0777047438
##  [48,]  0.210354802  0.41666746 -0.046499401 -0.157349945  0.0288299468
##  [49,] -0.209501938 -0.49459802 -0.057901103 -0.277269329  0.0560273629
##  [50,]  0.321252551 -0.09645682  0.077339152 -0.080342531  0.1351644598
##  [51,]  0.297323243 -1.38542934  0.020377803  0.032597697  0.3348961722
##  [52,]  0.786437415  1.06744494  0.398378143 -0.326050582  0.0036396002
##  [53,]  0.286321751  1.01466982  0.169075056 -0.127153147  0.0330647681
##  [54,]  0.673650696  0.14096601  0.142615718 -0.154908779  0.0850048806
##  [55,]  0.245862765 -0.17252966  0.415563844 -0.088676224  0.1723088405
##  [56,]  0.221583900  0.69240101  0.083714542 -0.528779731 -0.1492268190
##  [57,]  0.924079664  0.39776006 -0.082781651 -0.081645248  0.0703507932
##  [58,]  0.428194265  0.38525610 -0.114323605 -0.416385347 -0.0861323071
##  [59,]  0.935240853 -0.45515441  0.624993975 -0.345894654  0.0697866667
##  [60,]  1.362646291 -1.01720315  0.437813083  0.172241244  0.2210941205
##  [61,]  0.649033044  0.52709131  0.235071616  0.171497370  0.1953775514
##  [62,]  0.234842591  0.38453731 -0.069668081 -0.220688327  0.0000503966
##  [63,] -0.274532247 -0.28993369 -0.071238929 -0.239860447  0.0408188743
##  [64,]  0.478221000 -0.18354255  0.046655926 -0.140357248  0.1142929398
##  [65,]  0.382830190 -1.20396608  0.200610293  0.154465847  0.3626237473
##  [66,]  0.657145493  0.94998381  0.276737658 -0.601196725 -0.1246102688
##  [67,]  0.385809115  1.13310638  0.275587548 -0.261998720 -0.0076120911
##  [68,] -0.226761154  1.45640555 -0.246254379  0.166111137 -0.0022158487
##  [69,] -0.723443646  1.67057411 -0.465137304  0.507125127  0.0119584741
##  [70,] -0.408141512  1.50955731 -0.034161314  0.129861595 -0.0098199954
##  [71,] -0.689698367  1.49131795 -0.257014139  0.048383272 -0.1808580727
##  [72,]  0.073874589  2.10062221 -0.166544224  0.269045742  0.0744089979
##  [73,]  0.352422032  2.07651583 -0.088964107  0.209875588  0.1042789651
##  [74,] -0.390046058  1.56484731 -0.105871178  0.205258239  0.0122759482
##  [75,]  0.035307784  1.81536942  0.057189889  0.123408413  0.0637626708
##  [76,] -0.387465151  1.56346268 -0.303170196  0.226474069 -0.0238201552
##  [77,] -0.532852388  1.47935170 -0.049031883  0.097025679 -0.0541454390
##  [78,]  0.159464179  2.00489071  0.208522854 -0.053792837  0.0251861740
##  [79,] -0.388910183  1.45623136 -0.045997100  0.077193376 -0.0323760855
##  [80,] -0.129977156  1.82924474  0.126412968  0.228011630  0.1006567835
##  [81,] -0.989948838  1.14814842  0.005549901  0.191361068 -0.0367912725
##  [82,] -0.579394362  2.03012357  0.342748062  0.170614395  0.0329673441
##  [83,] -0.001743478  1.79754650  0.106419909 -0.078463802 -0.0303907307
##  [84,] -0.281680264  1.67607025 -0.268720366  0.198692458 -0.0189996805
##  [85,]  0.360245696  2.00298475  0.073010719 -0.045426128  0.0261806730
##  [86,]  0.412406447  2.59597279  0.333096311  0.144249515  0.1848649969
##  [87,] -0.338451688  1.47241750 -0.100481488  0.093732169 -0.0271225586
##  [88,] -0.118226834  1.82642421  0.153736745  0.135376009  0.0661354449
##  [89,] -0.468758876  1.50749314 -0.020727468  0.102406852 -0.0280451639
##  [90,] -0.467044512  1.47721709 -0.201974276  0.047261209 -0.1075864269
##  [91,]  0.018329484  2.08691594  0.232112929  0.021146973  0.0416138647
##  [92,] -0.383982021  1.45929002 -0.008708060  0.168559132  0.0268712659
##  [93,] -0.135474024  1.74550872  0.131397448  0.085535300  0.0365889496
##  [94,] -0.942790400  1.17638355 -0.034080184  0.290959549  0.0200789275
##  [95,] -0.551162340  2.01218654  0.252819885  0.108675278 -0.0185686405
##  [96,] -0.125997063  1.87804342  0.104976423  0.007825208 -0.0129830126
##  [97,] -0.327491706  1.59430710  0.017981735  0.012645070 -0.0536624760
##  [98,]  0.215505588  2.16301510  0.102443536  0.169716136  0.1096514404
##  [99,]  0.543477553  2.56288670  0.291663419  0.135105571  0.1811325978
## [100,]  2.850344395 -2.29949143  0.014214723  0.393798397  0.0606502951
## [101,]  2.748041858 -1.63399253  0.097210614  0.087060835 -0.0504610312
## [102,]  2.053581352 -1.28444053  0.234245537 -0.159567913  0.0134785683
## [103,]  2.786847913 -0.80345487 -0.120109527 -0.146209215 -0.1518490960
## [104,]  2.323796514 -0.82661754 -0.073376918  0.003555699 -0.0118324197
## [105,]  2.563500648 -1.43515501  0.177359448  0.044617465 -0.0322564550
## [106,]  2.005809623 -1.29155350 -0.173558588  0.027348153  0.0933697124
## [107,]  3.786651899 -1.83049695  0.736037433  0.476732251 -0.3406645328
## [108,]  3.139180325 -0.75455854  0.242282402  0.140054223 -0.1945445946
## [109,]  2.964619184 -0.94041068  0.345304049  0.056072029 -0.1696258107
## [110,]  1.860736624 -1.17956524 -0.132410895  0.071161929  0.1243442544
## [111,]  3.144651831 -1.00680514  0.376939194  0.216154671 -0.1835936667
## [112,]  2.721771752 -0.66997462  0.056433144 -0.176524777 -0.1568110434
## [113,]  3.681861773 -1.65064534  0.629041774  0.596344573 -0.2738800526
## [114,]  3.111202455 -1.18087727  0.344194616  0.211430592 -0.1651889314
## [115,]  2.405317518 -0.48906648  0.148847999 -0.078956447 -0.0739472528
## [116,]  3.268707115 -1.82084035  0.309480700  0.544906497 -0.0970242863
## [117,]  2.487694878 -0.89140714  0.130767868  0.351483042  0.0389797191
## [118,]  2.722031245 -1.06526352  0.221330703  0.199682531 -0.0552494610
## [119,]  2.999985165 -0.77370551  0.153686294 -0.038296026 -0.1914877167
## [120,]  2.604195196 -0.91014667 -0.010193636 -0.080875115 -0.0946847905
## [121,]  2.167845019 -0.98414982  0.011481287 -0.291086528 -0.0602179448
## [122,]  0.872487816 -0.23445879 -0.687731817 -0.121897663  0.0480555760
## [123,]  1.660589168  0.42673885 -0.186726168 -0.214062328 -0.0305598442
## [124,]  2.275185809  0.08337148 -0.343770746 -0.271164116 -0.1160617705
## [125,]  2.013806203  0.14917735 -0.313742052 -0.240536474 -0.0740513086
## [126,]  1.583729990  0.84216084 -0.336227404 -0.196833371 -0.0391827448
## [127,]  1.577171789 -0.80816570 -0.674152882 -0.116492637  0.0661012776
## [128,]  1.463224420 -0.54752505 -0.558956574  0.097515052  0.1384316789
## [129,]  1.583075205 -1.28636528 -0.655098371 -0.024389191  0.1465249554
## [130,]  1.495272354 -1.05953261 -0.472455343 -0.025635329  0.1391462907
## [131,]  0.881011279 -1.43238747 -1.097215228 -0.066975342  0.2002120401
## [132,]  0.162285926 -0.79453506 -1.003053285  0.092803272  0.1852243619
## [133,]  0.432620549 -0.92340179 -0.577647518 -0.068628668  0.1789277034
## [134,]  0.366735661 -0.12615401 -0.204306176 -0.264935932  0.0202913640
## [135,]  0.476122098 -0.17823765 -0.784656162 -0.326030662 -0.0743311148
## [136,] -0.285074294 -1.12332574 -1.274869623 -0.217515567  0.0096429916
## [137,] -0.259927056 -1.18861038 -1.115633784 -0.105029255  0.1160436120
## [138,]  0.058104832 -0.89046340 -1.021403692 -0.194070861  0.0446974844
df1 <- cbind(df, myPr$x[,1:2])
head(df1)
##     len  wid  rat  cir  pet species       PC1        PC2
## 1 17.42 6.58 2.65 0.67 2.24   L_cad -1.822375 -0.1020005
## 2 17.77 6.88 2.58 0.65 2.15   L_cad -1.817919 -0.1918281
## 3 20.65 7.73 2.67 0.67 2.15   L_cad -2.274683 -0.5680358
## 4 21.57 7.26 2.97 0.63 2.15   L_cad -1.980439 -0.9442439
## 5 25.07 8.34 3.01 0.61 2.40   L_cad -2.623206 -1.6447576
## 6 21.14 8.11 2.61 0.62 2.34   L_cad -2.415650 -0.9085577

Trực quan phân tích PCA bằng ggplot2

ggplot(df1, aes(PC1, PC2, col = species, fill = species)) +
stat_ellipse(geom = "polygon", col= "black", alpha = 0.5) + 
geom_point(shape = 21, col = "black")


Tài liệu tham khảo

http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/112-pca-principal-component-analysis-essentials/