1) Mô tả dữ liệu

Nguồn (data + code R): TNV. Hồi quy. NXB TH TP.HCM, 2020.

Dữ liệu đo đạc mai rùa:

library(magrittr)
library(dplyr)
library(GGally)

Đọc dữ liệu:

tt <- read.table("shell.txt", header = TRUE)

Xem 6 hàng đầu:

head(tt)
##   length width height
## 1     98    81     38
## 2    103    84     38
## 3    103    86     42
## 4    105    86     42
## 5    109    88     44
## 6    123    92     50
str(tt)
## 'data.frame':    24 obs. of  3 variables:
##  $ length: int  98 103 103 105 109 123 123 133 133 133 ...
##  $ width : int  81 84 86 86 88 92 95 99 102 102 ...
##  $ height: int  38 38 42 42 44 50 46 51 51 51 ...

Xem cấu trúc:

str(tt)
## 'data.frame':    24 obs. of  3 variables:
##  $ length: int  98 103 103 105 109 123 123 133 133 133 ...
##  $ width : int  81 84 86 86 88 92 95 99 102 102 ...
##  $ height: int  38 38 42 42 44 50 46 51 51 51 ...

mối tương quan:

tt %>% select(length, width, height) %>% ggpairs(upper = list(continuous = "points"), lower = list(continuous = "cor"))

names(tt) # Cho biết tên các biến trong data.frame  
## [1] "length" "width"  "height"

Trong 14 biến các biến trên thấy nhiều biến tương quan

2) Thống kê mô tả

Tính trung bình mẫu của các biến:

apply(tt, 2, mean) 
##    length     width    height 
## 136.04167 102.58333  52.04167

Tính phương sai mẫu của các biến:

apply(tt, 2, var)
##    length     width    height 
## 451.51993 171.73188  64.73732

Dùng đồ thị boxplot:

boxplot(tt)

apply(tt, 2, range)
##      length width height
## [1,]     98    81     38
## [2,]    177   132     67

Nhận xét: từ đồ thị boxplot và kết quả tính phạm vi biến thiên của dữ liệu (range), ta thấy rằng đơn vị và phương sai của các biến rất khác biệt nhau. Do đó ta cần thực hiện chuẩn hóa dữ liệu (standardizing data) trước khi xử lý. Ta có thể thực hiện quy tâm (mean-centering) hoặc/và co giãn (scaling) dữ liệu. Các đồ thị boxplot dưới đây sẽ minh họa các bước xử lý trên.

Quy tâm dữ liệu:

tt.n <- scale(tt, scale = FALSE) # Chỉ thực hiện quy tâm, không co giãn 
tt.n <- as.data.frame(tt.n)
boxplot(tt)

Quy tâm và co giãn dữ liệu (chuẩn hóa):

tt.scale <- as.data.frame(scale(tt)) 
boxplot(tt.scale)

Tính ma trận hiệp phương sai (covariance matrix) và ma trận hệ số tương quan (correlation matrix):

tt.cov <- cov(tt) # Ma trận hiệp phương sai tính từ dữ liệu chưa chuẩn hóa 
tt.cov
##          length    width    height
## length 451.5199 270.9746 165.95471
## width  270.9746 171.7319 101.84420
## height 165.9547 101.8442  64.73732
tt.cor <- cor(tt) # Ma trận hệ số tương quan tính từ dữ liệu chưa chuẩn hóa 
tt.cor
##           length     width    height
## length 1.0000000 0.9731162 0.9706748
## width  0.9731162 1.0000000 0.9659029
## height 0.9706748 0.9659029 1.0000000

Vẽ ma trận đồ thị phân tán:

pairs(tt)

Ta có thể nhận thấy rằng các biến có tương quan tuyến tính mạnh

plot(tt$height , tt$width, pch = 16, col = "blue")

3) Phân tích thành phần chính (PCA):

Ta thực hiện PCA từ bộ dữ liệu đã được chuẩn hóa tt.scale.

pca_tt.scale <- princomp(tt.scale)
summary(pca_tt.scale)
## Importance of components:
##                          Comp.1    Comp.2      Comp.3
## Standard deviation     1.678484 0.1814027 0.157434408
## Proportion of Variance 0.979933 0.0114459 0.008621076
## Cumulative Proportion  0.979933 0.9913789 1.000000000

Trình bày các PC loadings:

pca_tt.scale$loadings
## 
## Loadings:
##        Comp.1 Comp.2 Comp.3
## length  0.578  0.137  0.804
## width   0.577  0.628 -0.522
## height  0.577 -0.766 -0.284
## 
##                Comp.1 Comp.2 Comp.3
## SS loadings     1.000  1.000  1.000
## Proportion Var  0.333  0.333  0.333
## Cumulative Var  0.333  0.667  1.000

Trình bày 3 hàng đầu các PC scores:

pca_tt.scale$scores[1:3,]
##         Comp.1      Comp.2      Comp.3
## [1,] -2.992145  0.05696787 -0.08482498
## [2,] -2.723970  0.23302866 -0.01510844
## [3,] -2.349171 -0.05201949 -0.23582973

Xác định số thành phần chính cần giữ lại: vẽ đồ thị scree plot

screeplot(pca_tt.scale, type = "lines", main = "Scree plot")

Nhận xét: từ đô thị scree plot, ta thấy rằng có thể giữ lại 1 thành phần chính đầu (giải thích được \(98.%\) phương sai toàn phần).

Tiêu chuẩn khác: vì PCA được thực hiện trên dữ liệu chuẩn hóa, ta có thể dùng tiêu chuẩn giữ lại các thành phần chính mà có trị riêng (phương sai) lớn hơn 1. Tính các trị riêng:

eigenvalues_pca <- pca_tt.scale$sdev^2 
eigenvalues_pca
##     Comp.1     Comp.2     Comp.3 
## 2.81730746 0.03290695 0.02478559

Vẽ các PC scores và loadings:

tt_scores <- pca_tt.scale$scores

# Plot the scores
plot(tt_scores, xlab = "PC 1 (36%)", ylab = "PC 2 (16.2%)", main = "Scores plot")
abline(h = 0, v = 0, col = "gray")

# Plot the scores as points
text(tt_scores[, 1] + 0.2, tt_scores[, 2], label = rownames(tt_scores), col="blue", cex=0.6)

4) Phân tích bằng faxtoextra

Kiểm tra ggpair

tt %>% select(length, width, height) %>% ggpairs(upper = list(continuous = "points"), lower = list(continuous = "cor"))

#Phân tích PCA
pca <- prcomp(tt, scale = TRUE)
print(pca)
## Standard deviations (1, .., p=3):
## [1] 1.7145842 0.1853043 0.1608205
## 
## Rotation (n x k) = (3 x 3):
##              PC1        PC2        PC3
## length 0.5781417 -0.1373949 -0.8042853
## width  0.5771970 -0.6278484  0.5221591
## height 0.5767112  0.7661129  0.2836814

Kiểm tra bằng lệnh summary

summary(pca)
## Importance of components:
##                           PC1     PC2     PC3
## Standard deviation     1.7146 0.18530 0.16082
## Proportion of Variance 0.9799 0.01145 0.00862
## Cumulative Proportion  0.9799 0.99138 1.00000

Có thể thấy rằng PC1 giải thích 97.99 % phương sai: Vẽẽ biểu đồ bằng hàm fviz_eig() trong thư viện factoextra

library(factoextra)
fviz_eig(pca)

#Như vậy PC1 giải thích gần 100% phương sai
fviz_pca_ind(pca, col.ind = "cos2", gradient.cols = c("red","blue", "green1"), repel = TRUE)

#Như vậy component 1 giải thích 98%, component 2 giải thích 1.1 %. 

#biểu đồ 3:
fviz_pca_var(pca, col.var = "contrib", gradient.cols = c("red", "blue", "black"), repel = TRUE)

#Phần trăm của contribution của mỗi một component

#Tóm lại PCA giúp cho 3 biến giảm 1 biến, có thể giải thích được % phương sai, giúp cho phát hiện ngoại vi hiệu quả.


######################
LS0tDQp0aXRsZTogJ1BDQTogcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgduG7gSByxrDhu6N1ICh0dXRsZSBzaGVsbCknDQphdXRob3I6ICJoZW5yeSBkbyINCmRhdGU6ICIyOS8wNi8yMDIzIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogcHlnbWVudHMNCiAgICB0aGVtZTogZmxhdGx5DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IG5vDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCi0tLQ0KDQpgYGB7ciBzZXR1cCxpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQoNCiMjIyAxKSBNw7QgdOG6oyBk4buvIGxp4buHdSANCg0KKipOZ3Xhu5NuIChkYXRhICsgY29kZSBSKToqKiBUTlYuICpI4buTaSBxdXkqLiBOWEIgVEggVFAuSENNLCAyMDIwLg0KDQpE4buvIGxp4buHdSDEkW8gxJHhuqFjIG1haSByw7lhOiANCg0KICArIDMgYmnhur9uICh2YXJpYWJsZXMpDQogICsgMjQgcXVhbiB0cuG6r2MgKG9ic2VydmF0aW9ucykNCioqVOG6o2kgdGjGsCB2aeG7h246KioNCmBgYHtyfQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KEdHYWxseSkNCmBgYA0KIA0KDQoqKsSQ4buNYyBk4buvIGxp4buHdToqKg0KDQpgYGB7cn0NCg0KdHQgPC0gcmVhZC50YWJsZSgic2hlbGwudHh0IiwgaGVhZGVyID0gVFJVRSkNCg0KYGBgDQoNCioqWGVtIDYgaMOgbmcgxJHhuqd1OioqDQoNCmBgYHtyfQ0KaGVhZCh0dCkNCnN0cih0dCkNCg0KYGBgDQoqKlhlbSBj4bqldSB0csO6YzoqKg0KDQpgYGB7cn0NCnN0cih0dCkNCg0KYGBgDQoqKm3hu5FpIHTGsMahbmcgcXVhbjoqKg0KDQpgYGB7cn0NCnR0ICU+JSBzZWxlY3QobGVuZ3RoLCB3aWR0aCwgaGVpZ2h0KSAlPiUgZ2dwYWlycyh1cHBlciA9IGxpc3QoY29udGludW91cyA9ICJwb2ludHMiKSwgbG93ZXIgPSBsaXN0KGNvbnRpbnVvdXMgPSAiY29yIikpDQpgYGANCg0KDQpgYGB7cn0NCm5hbWVzKHR0KSAjIENobyBiaeG6v3QgdMOqbiBjw6FjIGJp4bq/biB0cm9uZyBkYXRhLmZyYW1lICANCmBgYA0KDQpUcm9uZyAxNCBiaeG6v24gY8OhYyBiaeG6v24gdHLDqm4gdGjhuqV5IG5oaeG7gXUgYmnhur9uIHTGsMahbmcgcXVhbg0KDQoNCiMjIyAyKSBUaOG7kW5nIGvDqiBtw7QgdOG6oyANCg0KKipUw61uaCB0cnVuZyBiw6xuaCBt4bqrdSBj4bunYSBjw6FjIGJp4bq/bjoqKg0KDQpgYGB7cn0NCmFwcGx5KHR0LCAyLCBtZWFuKSANCmBgYA0KDQoqKlTDrW5oIHBoxrDGoW5nIHNhaSBt4bqrdSBj4bunYSBjw6FjIGJp4bq/bjoqKg0KDQpgYGB7cn0NCmFwcGx5KHR0LCAyLCB2YXIpDQpgYGANCg0KKipEw7luZyDEkeG7kyB0aOG7iyBib3hwbG90OioqDQoNCmBgYHtyfQ0KYm94cGxvdCh0dCkNCmBgYA0KDQpgYGB7cn0NCmFwcGx5KHR0LCAyLCByYW5nZSkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqIHThu6sgxJHhu5MgdGjhu4sgYm94cGxvdCB2w6Aga+G6v3QgcXXhuqMgdMOtbmggcGjhuqFtIHZpIGJp4bq/biB0aGnDqm4gY+G7p2EgZOG7ryBsaeG7h3UgKHJhbmdlKSwgdGEgdGjhuqV5IHLhurFuZyDEkcahbiB24buLIHbDoCBwaMawxqFuZyBzYWkgY+G7p2EgY8OhYyBiaeG6v24gcuG6pXQga2jDoWMgYmnhu4d0IG5oYXUuIERvIMSRw7MgdGEgY+G6p24gdGjhu7FjIGhp4buHbiBjaHXhuqluIGjDs2EgZOG7ryBsaeG7h3UgKHN0YW5kYXJkaXppbmcgZGF0YSkgdHLGsOG7m2Mga2hpIHjhu60gbMO9LiBUYSBjw7MgdGjhu4MgdGjhu7FjIGhp4buHbiBxdXkgdMOibSAobWVhbi1jZW50ZXJpbmcpIGhv4bq3Yy92w6AgY28gZ2nDo24gKHNjYWxpbmcpIGThu68gbGnhu4d1LiBDw6FjIMSR4buTIHRo4buLIGJveHBsb3QgZMaw4bubaSDEkcOieSBz4bq9IG1pbmggaOG7jWEgY8OhYyBixrDhu5tjIHjhu60gbMO9IHRyw6puLiANCg0KKipRdXkgdMOibSBk4buvIGxp4buHdToqKg0KDQpgYGB7cn0NCnR0Lm4gPC0gc2NhbGUodHQsIHNjYWxlID0gRkFMU0UpICMgQ2jhu4kgdGjhu7FjIGhp4buHbiBxdXkgdMOibSwga2jDtG5nIGNvIGdpw6NuIA0KdHQubiA8LSBhcy5kYXRhLmZyYW1lKHR0Lm4pDQpib3hwbG90KHR0KQ0KYGBgDQoNCioqUXV5IHTDom0gdsOgIGNvIGdpw6NuIGThu68gbGnhu4d1IChjaHXhuqluIGjDs2EpOioqDQoNCmBgYHtyfQ0KdHQuc2NhbGUgPC0gYXMuZGF0YS5mcmFtZShzY2FsZSh0dCkpIA0KYm94cGxvdCh0dC5zY2FsZSkNCmBgYA0KDQoqKlTDrW5oIG1hIHRy4bqtbiBoaeG7h3AgcGjGsMahbmcgc2FpIChjb3ZhcmlhbmNlIG1hdHJpeCkgdsOgIG1hIHRy4bqtbiBo4buHIHPhu5EgdMawxqFuZyBxdWFuIChjb3JyZWxhdGlvbiBtYXRyaXgpOioqDQoNCmBgYHtyfQ0KdHQuY292IDwtIGNvdih0dCkgIyBNYSB0cuG6rW4gaGnhu4dwIHBoxrDGoW5nIHNhaSB0w61uaCB04burIGThu68gbGnhu4d1IGNoxrBhIGNodeG6qW4gaMOzYSANCnR0LmNvdg0KYGBgDQoNCmBgYHtyfQ0KdHQuY29yIDwtIGNvcih0dCkgIyBNYSB0cuG6rW4gaOG7hyBz4buRIHTGsMahbmcgcXVhbiB0w61uaCB04burIGThu68gbGnhu4d1IGNoxrBhIGNodeG6qW4gaMOzYSANCnR0LmNvcg0KYGBgDQoNCioqVuG6vSBtYSB0cuG6rW4gxJHhu5MgdGjhu4sgcGjDom4gdMOhbjoqKg0KDQpgYGB7cn0NCnBhaXJzKHR0KQ0KYGBgDQoNClRhIGPDsyB0aOG7gyBuaOG6rW4gdGjhuqV5IHLhurFuZyBjw6FjIGJp4bq/biBjw7MgdMawxqFuZyBxdWFuIHR1eeG6v24gdMOtbmggbeG6oW5oIA0KDQpgYGB7cn0NCnBsb3QodHQkaGVpZ2h0ICwgdHQkd2lkdGgsIHBjaCA9IDE2LCBjb2wgPSAiYmx1ZSIpDQpgYGANCg0KDQoNCiMjIyAzKSBQaMOibiB0w61jaCB0aMOgbmggcGjhuqduIGNow61uaCAoUENBKTogDQoNClRhIHRo4buxYyBoaeG7h24gUENBIHThu6sgYuG7mSBk4buvIGxp4buHdSDEkcOjIMSRxrDhu6NjIGNodeG6qW4gaMOzYSAqdHQuc2NhbGUqLiANCg0KYGBge3J9DQpwY2FfdHQuc2NhbGUgPC0gcHJpbmNvbXAodHQuc2NhbGUpDQpzdW1tYXJ5KHBjYV90dC5zY2FsZSkNCmBgYA0KDQoqKlRyw6xuaCBiw6B5IGPDoWMgUEMgbG9hZGluZ3M6KioNCg0KYGBge3J9DQpwY2FfdHQuc2NhbGUkbG9hZGluZ3MNCmBgYA0KDQoqKlRyw6xuaCBiw6B5IDMgaMOgbmcgxJHhuqd1IGPDoWMgUEMgc2NvcmVzOioqDQoNCmBgYHtyfQ0KcGNhX3R0LnNjYWxlJHNjb3Jlc1sxOjMsXQ0KYGBgDQoNCioqWMOhYyDEkeG7i25oIHPhu5EgdGjDoG5oIHBo4bqnbiBjaMOtbmggY+G6p24gZ2nhu68gbOG6oWk6KiogduG6vSDEkeG7kyB0aOG7iyBzY3JlZSBwbG90DQoNCmBgYHtyfQ0Kc2NyZWVwbG90KHBjYV90dC5zY2FsZSwgdHlwZSA9ICJsaW5lcyIsIG1haW4gPSAiU2NyZWUgcGxvdCIpDQpgYGANCg0KKk5o4bqtbiB4w6l0OiogdOG7qyDEkcO0IHRo4buLIHNjcmVlIHBsb3QsIHRhIHRo4bqleSBy4bqxbmcgY8OzIHRo4buDIGdp4buvIGzhuqFpIDEgdGjDoG5oIHBo4bqnbiBjaMOtbmggxJHhuqd1IChnaeG6o2kgdGjDrWNoIMSRxrDhu6NjICQ5OC4lJCBwaMawxqFuZyBzYWkgdG/DoG4gcGjhuqduKS4NCg0KKlRpw6p1IGNodeG6qW4ga2jDoWM6KiB2w6wgUENBIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gdHLDqm4gZOG7ryBsaeG7h3UgY2h14bqpbiBow7NhLCB0YSBjw7MgdGjhu4MgZMO5bmcgdGnDqnUgY2h14bqpbiBnaeG7ryBs4bqhaSBjw6FjIHRow6BuaCBwaOG6p24gY2jDrW5oIG3DoCBjw7MgdHLhu4sgcmnDqm5nIChwaMawxqFuZyBzYWkpIGzhu5tuIGjGoW4gMS4gVMOtbmggY8OhYyB0cuG7iyByacOqbmc6DQoNCmBgYHtyfQ0KZWlnZW52YWx1ZXNfcGNhIDwtIHBjYV90dC5zY2FsZSRzZGV2XjIgDQplaWdlbnZhbHVlc19wY2ENCmBgYA0KDQoqKlbhur0gY8OhYyBQQyBzY29yZXMgdsOgIGxvYWRpbmdzOioqDQoNCmBgYHtyfQ0KDQp0dF9zY29yZXMgPC0gcGNhX3R0LnNjYWxlJHNjb3Jlcw0KDQojIFBsb3QgdGhlIHNjb3Jlcw0KcGxvdCh0dF9zY29yZXMsIHhsYWIgPSAiUEMgMSAoMzYlKSIsIHlsYWIgPSAiUEMgMiAoMTYuMiUpIiwgbWFpbiA9ICJTY29yZXMgcGxvdCIpDQphYmxpbmUoaCA9IDAsIHYgPSAwLCBjb2wgPSAiZ3JheSIpDQoNCiMgUGxvdCB0aGUgc2NvcmVzIGFzIHBvaW50cw0KdGV4dCh0dF9zY29yZXNbLCAxXSArIDAuMiwgdHRfc2NvcmVzWywgMl0sIGxhYmVsID0gcm93bmFtZXModHRfc2NvcmVzKSwgY29sPSJibHVlIiwgY2V4PTAuNikNCmBgYA0KDQojIyMgNCkgUGjDom4gdMOtY2ggYuG6sW5nIGZheHRvZXh0cmENCg0KICArIFTDrW5oIHRvw6FuIA0KDQoNCktp4buDbSB0cmEgZ2dwYWlyDQoNCmBgYHtyfQ0KdHQgJT4lIHNlbGVjdChsZW5ndGgsIHdpZHRoLCBoZWlnaHQpICU+JSBnZ3BhaXJzKHVwcGVyID0gbGlzdChjb250aW51b3VzID0gInBvaW50cyIpLCBsb3dlciA9IGxpc3QoY29udGludW91cyA9ICJjb3IiKSkNCg0KYGBgDQoNCmBgYHtyfQ0KI1Bow6JuIHTDrWNoIFBDQQ0KcGNhIDwtIHByY29tcCh0dCwgc2NhbGUgPSBUUlVFKQ0KcHJpbnQocGNhKQ0KDQpgYGANCktp4buDbSB0cmEgYuG6sW5nIGzhu4duaCBzdW1tYXJ5DQpgYGB7cn0NCnN1bW1hcnkocGNhKQ0KDQpgYGANCkPDsyB0aOG7gyB0aOG6pXkgcuG6sW5nIFBDMSBnaeG6o2kgdGjDrWNoIDk3Ljk5ICUgcGjGsMahbmcgc2FpOg0KVuG6veG6vSBiaeG7g3UgxJHhu5MgIGLhurFuZyBow6BtIGZ2aXpfZWlnKCkgdHJvbmcgdGjGsCB2aeG7h24gZmFjdG9leHRyYQ0KDQpgYGB7cn0NCmxpYnJhcnkoZmFjdG9leHRyYSkNCmZ2aXpfZWlnKHBjYSkNCiNOaMawIHbhuq15IFBDMSBnaeG6o2kgdGjDrWNoIGfhuqduIDEwMCUgcGjGsMahbmcgc2FpDQpmdml6X3BjYV9pbmQocGNhLCBjb2wuaW5kID0gImNvczIiLCBncmFkaWVudC5jb2xzID0gYygicmVkIiwiYmx1ZSIsICJncmVlbjEiKSwgcmVwZWwgPSBUUlVFKQ0KI05oxrAgduG6rXkgY29tcG9uZW50IDEgZ2nhuqNpIHRow61jaCA5OCUsIGNvbXBvbmVudCAyIGdp4bqjaSB0aMOtY2ggMS4xICUuIA0KDQojYmnhu4N1IMSR4buTIDM6DQpmdml6X3BjYV92YXIocGNhLCBjb2wudmFyID0gImNvbnRyaWIiLCBncmFkaWVudC5jb2xzID0gYygicmVkIiwgImJsdWUiLCAiYmxhY2siKSwgcmVwZWwgPSBUUlVFKQ0KI1Bo4bqnbiB0csSDbSBj4bunYSBjb250cmlidXRpb24gY+G7p2EgbeG7l2kgbeG7mXQgY29tcG9uZW50DQoNCiNUw7NtIGzhuqFpIFBDQSBnacO6cCBjaG8gMyBiaeG6v24gZ2nhuqNtIDEgYmnhur9uLCBjw7MgdGjhu4MgZ2nhuqNpIHRow61jaCDEkcaw4bujYyAlIHBoxrDGoW5nIHNhaSwgZ2nDunAgY2hvIHBow6F0IGhp4buHbiBuZ2/huqFpIHZpIGhp4buHdSBxdeG6oy4NCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpgYGANCg0K