library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(FactoMineR)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(DataExplorer)
pelari <- read.csv("/Users/User/Library/CloudStorage/OneDrive-apps.ipb.ac.id/Kuliah/Data/pelari wanita.csv")
head(pelari)
## X1OOm X200m X400m X800m X1500m X3000m Marathon country
## 1 11.61 22.94 54.50 2.15 4.43 9.79 178.52 argentina
## 2 11.20 22.35 51.08 1.98 4.13 9.08 152.37 australia
## 3 11.43 23.09 50.62 1.99 4.22 9.34 159.37 austria
## 4 11.41 23.04 52.00 2.00 4.14 8.88 157.85 belgium
## 5 11.46 23.05 53.30 2.16 4.58 9.81 169.98 bermuda
## 6 11.31 23.17 52.80 2.10 4.49 9.77 168.75 brazil
glimpse(pelari)
## Rows: 55
## Columns: 8
## $ X1OOm <dbl> 11.61, 11.20, 11.43, 11.41, 11.46, 11.31, 12.14, 11.00, 12.00…
## $ X200m <dbl> 22.94, 22.35, 23.09, 23.04, 23.05, 23.17, 24.47, 22.25, 24.52…
## $ X400m <dbl> 54.50, 51.08, 50.62, 52.00, 53.30, 52.80, 55.00, 50.06, 54.90…
## $ X800m <dbl> 2.15, 1.98, 1.99, 2.00, 2.16, 2.10, 2.18, 2.00, 2.05, 2.08, 2…
## $ X1500m <dbl> 4.43, 4.13, 4.22, 4.14, 4.58, 4.49, 4.45, 4.06, 4.23, 4.33, 4…
## $ X3000m <dbl> 9.79, 9.08, 9.34, 8.88, 9.81, 9.77, 9.51, 8.81, 9.37, 9.31, 9…
## $ Marathon <dbl> 178.52, 152.37, 159.37, 157.85, 169.98, 168.75, 191.02, 149.4…
## $ country <chr> "argentina", "australia", "austria", "belgium", "bermuda", "b…
rownames(pelari) <- pelari$country
head(pelari)
## X1OOm X200m X400m X800m X1500m X3000m Marathon country
## argentina 11.61 22.94 54.50 2.15 4.43 9.79 178.52 argentina
## australia 11.20 22.35 51.08 1.98 4.13 9.08 152.37 australia
## austria 11.43 23.09 50.62 1.99 4.22 9.34 159.37 austria
## belgium 11.41 23.04 52.00 2.00 4.14 8.88 157.85 belgium
## bermuda 11.46 23.05 53.30 2.16 4.58 9.81 169.98 bermuda
## brazil 11.31 23.17 52.80 2.10 4.49 9.77 168.75 brazil
plot_intro(pelari,ggtheme = theme_classic())
plot_density(pelari,geom_density_args = list(fill="steelblue"),
ggtheme = theme_classic())
plot_correlation(pelari,type = "continuous",
cor_args = list(method="spearman"),
ggtheme = theme_classic())
pca_pelari_cov <- prcomp(x = pelari |> select(-country),
scale. = FALSE) # dengan kovarians
pca_pelari_cor <- prcomp(x = pelari |> select(-country),
scale. = TRUE) # dengan korelasi
# mengatur output angka dalam R
options(digits = 4,scipen = 100)
summary(pca_pelari_cov)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 30.510 2.01264 0.56452 0.33943 0.11954 0.07653 0.0293
## Proportion of Variance 0.995 0.00433 0.00034 0.00012 0.00002 0.00001 0.0000
## Cumulative Proportion 0.995 0.99951 0.99985 0.99998 0.99999 1.00000 1.0000
summary(pca_pelari_cor)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.409 0.8085 0.5476 0.3542 0.23198 0.19761 0.14981
## Proportion of Variance 0.829 0.0934 0.0428 0.0179 0.00769 0.00558 0.00321
## Cumulative Proportion 0.829 0.9228 0.9656 0.9835 0.99122 0.99679 1.00000
pca_pelari_cov$rotation
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## X1OOm 0.010210 0.12042 0.32610 -0.15007 -0.925339 0.0016557 0.0167811
## X200m 0.025063 0.31471 0.87989 -0.01399 0.353756 -0.0252781 0.0123378
## X400m 0.062211 0.93417 -0.32761 0.12178 -0.013367 0.0218349 -0.0253093
## X800m 0.002772 0.02557 -0.03711 -0.04868 0.015164 -0.2618195 0.9627106
## X1500m 0.009578 0.03855 -0.05536 -0.33973 0.034288 -0.8990650 -0.2654165
## X3000m 0.024340 0.08222 -0.08769 -0.91884 0.130442 0.3493052 0.0408423
## Marathon 0.997349 -0.06986 -0.00224 0.02011 -0.002138 0.0000938 -0.0000268
PC1 dimana keragamannya paling besar, kontribusi terbesarnya adalah dari variabel Marathon. Hal ini terjadi karena efek skala angkanya yang terbesar. Perbedaan skala ini yang diterapkan PCA dengan skala kovarians sebetulnya kurang tepat. Karena dalam PC1, hanya Marathon yang dapat menjelaskan keragamannya.
pca_pelari_cor$rotation
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## X1OOm 0.3684 0.4901 -0.28601 0.31939 0.23117 0.619825 0.05218
## X200m 0.3654 0.5366 -0.22982 -0.08330 0.04145 -0.710765 -0.10923
## X400m 0.3816 0.2465 0.51537 -0.34738 -0.57218 0.190946 0.20850
## X800m 0.3846 -0.1554 0.58453 -0.04208 0.62032 -0.019089 -0.31521
## X1500m 0.3891 -0.3604 0.01291 0.42954 0.03026 -0.231248 0.69256
## X3000m 0.3889 -0.3475 -0.15273 0.36312 -0.46335 0.009277 -0.59836
## Marathon 0.3670 -0.3692 -0.48437 -0.67250 0.13054 0.142281 0.06960
Eigenvctor dalam PC1 nilainya mirip2 sehingga pengaruh Marathon hampir sama dengan variabel lain.
nilai negatif pada eigenvector menandakan peubah asal memberikan kontribusi yang berkembalikan pada pembentukan komponen utama. Dalam konteks eigenvector negatif, semakin besar nilai peubah asal semakin kecil nilai pada komponen utama.
as_tibble(pca_pelari_cov$x) |>
glimpse()
## Rows: 55
## Columns: 7
## $ PC1 <dbl> 5.313, -21.020, -14.039, -15.483, -3.276, -4.535, 17.848, -24.008,…
## $ PC2 <dbl> 0.46645, -1.21095, -1.84400, -0.50744, -0.03373, -0.40348, 0.58414…
## $ PC3 <dbl> -1.02895, -0.41762, 0.41537, -0.03944, -0.57925, -0.34530, 0.32064…
## $ PC4 <dbl> -0.10340, -0.21350, -0.44355, 0.14699, -0.47016, -0.46470, 0.35699…
## $ PC5 <dbl> -0.216826, -0.050011, 0.027277, -0.049696, 0.003089, 0.184440, -0.…
## $ PC6 <dbl> 0.04842, 0.05175, 0.03133, -0.02883, -0.11210, -0.04376, -0.10093,…
## $ PC7 <dbl> 0.020491, -0.019444, 0.001359, -0.022406, 0.020563, -0.003295, 0.0…
as_tibble(pca_pelari_cor$x) |>
glimpse()
## Rows: 55
## Columns: 7
## $ PC1 <dbl> 0.5273, -2.0936, -1.3804, -1.5100, 0.3878, -0.1184, 1.6820, -2.608…
## $ PC2 <dbl> -0.67472, -0.53280, -0.27500, 0.09096, -0.97641, -0.91152, 0.58619…
## $ PC3 <dbl> 0.61559, -0.04317, -0.53231, -0.08346, 0.64887, 0.32214, 0.07583, …
## $ PC4 <dbl> 0.04553, 0.18738, 0.42624, -0.03942, 0.47446, 0.34097, -0.14512, 0…
## $ PC5 <dbl> -0.002558, -0.218356, -0.025504, -0.030326, 0.204322, -0.095961, 0…
## $ PC6 <dbl> 0.457908, 0.137967, -0.081683, 0.062877, -0.049426, -0.300448, 0.2…
## $ PC7 <dbl> -0.079963, -0.009815, -0.106173, 0.138491, 0.047829, -0.006724, 0.…
fviz_screeplot(pca_pelari_cov,choice = "eigenvalue",geom="line")
fviz_screeplot(pca_pelari_cor,choice = "eigenvalue",geom="line")
Banyaknya komponen utama bisa ditentukan dengan screeplot dengan melihat di komponen utama yang mana garisnya berbentuk seperti siku (elbow). Pada gambar diatas garis membentuk siku saat berada di komponen utama kedua (dimension kedua). Sehingga banyaknya komponen utama yang digunakan sebanyak dua (Komponen Utama 1 dan Komponen Utama 2)
summary(pca_pelari_cov)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 30.510 2.01264 0.56452 0.33943 0.11954 0.07653 0.0293
## Proportion of Variance 0.995 0.00433 0.00034 0.00012 0.00002 0.00001 0.0000
## Cumulative Proportion 0.995 0.99951 0.99985 0.99998 0.99999 1.00000 1.0000
summary(pca_pelari_cor)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.409 0.8085 0.5476 0.3542 0.23198 0.19761 0.14981
## Proportion of Variance 0.829 0.0934 0.0428 0.0179 0.00769 0.00558 0.00321
## Cumulative Proportion 0.829 0.9228 0.9656 0.9835 0.99122 0.99679 1.00000
Cumulative Percentage of variance menjelaskan seberapa besar keragaman yang dapat dijelaskan oleh komponen utama secara kumulatif. Misalnya saja dengan menggunakan dua komponen utama saja (PC1 dan PC2), sudah bisa menjelaskan sekitar 92% keragaman dari data. Biasanya nilai Cumulative Percentage of variance yang digunakan untuk memilih adalah 80%.
pca_pelari_cor$rotation[,1:2]
## PC1 PC2
## X1OOm 0.3684 0.4901
## X200m 0.3654 0.5366
## X400m 0.3816 0.2465
## X800m 0.3846 -0.1554
## X1500m 0.3891 -0.3604
## X3000m 0.3889 -0.3475
## Marathon 0.3670 -0.3692
PC1 memiliki eigenvector yang relatif sama yaitu berkisar di 0.3 untuk semua cabang lomba. eigenvector yang relatif sama ini menandakan bahwa kontribusi peubah asal untuk membangun komponen utama ini relatif sama. Artinya nilai-nilai yang ada di PC1 (score value) dapat menggambarkan waktu lari untuk semua cabang lomba. Oleh karena itu kita dapat dapat menggunakan PC1 untuk menentukan negara mana yang memiliki pelari tercepat untuk semua kategori lomba.
PC2 memiliki nilai positif untuk cabang lari jarak dekat (100m -400m) dan nilai negatif untuk cabang lari jarak jauh(800m-marathon). Hal ini berarti semakin besar score value pada PC2 maka waktu lari cabang jarak dekat semakin lambat namun waktu lari untuk cabang jarak jauh semakin cepat. Oleh karena itu, PC2 dapat digunakan untuk menentukan negara mana yang pada cabang lari jarak dekat waktunya mirip seperti cabang lari jarak jauh.
Note: Besaran eigenvector adalah besaran koefisien, yang menentukan seberapa besar kontribusi dalam menentukan PC yg baru. tanda negatif menunjukkan pengaruhnya berkebalikan.
fviz_pca_ind(X = pca_pelari_cor,repel = TRUE)
Berdasarkan grafik score value dapat diketahui bahwa negara yang memiliki catatan waktu pelari terlambat untuk semua cabang lomba adalah negara wsamoa. Hal ini dikarenakan wsamoa score value wsakoa untuk PC1 (Dim1) paling besar diantara yang lain. Walaupun negara wsamoa memiliki cabang lari terlama disemua cabang lomba, namun perbedaan waktu terkecil antara pelari jarak jauh dan jarak dekat adalah negara wsamoa (PC2 [Dim2]). Hal ini berarti pelari untuk lomba jarak dekat sangat lambat karena memiliki waktu yang hampir mirip seperti pelari jarak jauh. Sedangkan negara yang memiliki pelari tercepat untuk semua cabang lomba adalah gdr.
Interpretasi cookis: Koefisien + : dia terlambat (100-400m) Koefisien - : dia tercepat (Marathon, 800-3000m)
library(jpeg)
kucing <- readJPEG("/Users/User/Library/CloudStorage/OneDrive-apps.ipb.ac.id/Kuliah/Data/kucing.jpeg")
dim(kucing)
## [1] 2657 1771 3
r <- kucing[,,1]
g <- kucing[,,2]
b <- kucing[,,3]
cat.r.pca <- prcomp(r, center = FALSE)
cat.g.pca <- prcomp(g, center = FALSE)
cat.b.pca <- prcomp(b, center = FALSE)
rgb.pca <- list(cat.r.pca, cat.g.pca, cat.b.pca)
pca_image <- function(j,comp) {
compressed.img <- j$x[,1:comp] %*% t(j$rotation[,1:comp])}
res3 <- sapply(rgb.pca,pca_image,comp=3,
simplify = "array" )
res46 <- sapply(rgb.pca,pca_image,comp=46,
simplify = "array" )
res128 <- sapply(rgb.pca,pca_image,comp=128,
simplify = "array" )
res256 <- sapply(rgb.pca,pca_image,comp=256,
simplify = "array" )
res512 <- sapply(rgb.pca,pca_image,comp=512,
simplify = "array" )
writeJPEG(res3,"/Users/User/Library/CloudStorage/OneDrive-apps.ipb.ac.id/Kuliah/Data/res3.jpg")
writeJPEG(res256,"/Users/User/Library/CloudStorage/OneDrive-apps.ipb.ac.id/Kuliah/Data/res256.jpg")
writeJPEG(res512,"/Users/User/Library/CloudStorage/OneDrive-apps.ipb.ac.id/Kuliah/Data/res512.jpg")