options(repos = c(CRAN = "https://cloud.r-project.org"))
install.packages("tidyverse", repos = "https://cloud.r-project.org")
## Installing package into 'C:/Users/WINDOWS/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'tidyverse' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\WINDOWS\AppData\Local\Temp\Rtmp4ySr3z\downloaded_packages
# Menginstal Packages
install.packages("tidyverse")
## Installing package into 'C:/Users/WINDOWS/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'tidyverse' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\WINDOWS\AppData\Local\Temp\Rtmp4ySr3z\downloaded_packages
install.packages("FactoMineR")
## Installing package into 'C:/Users/WINDOWS/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'FactoMineR' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\WINDOWS\AppData\Local\Temp\Rtmp4ySr3z\downloaded_packages
install.packages("factoextra")
## Installing package into 'C:/Users/WINDOWS/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'factoextra' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\WINDOWS\AppData\Local\Temp\Rtmp4ySr3z\downloaded_packages
install.packages("ggplot2")
## Installing package into 'C:/Users/WINDOWS/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'ggplot2' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\WINDOWS\AppData\Local\Temp\Rtmp4ySr3z\downloaded_packages
# Membaca data
data <- read.csv("decathlon-3.csv", header = TRUE, sep = ",")
# Melihat struktur data
head(data)
## Athlets X100m Long.jump Shot.put High.jump X400m X110m.hurdle Discus
## 1 SEBRLE 11.04 7.58 14.83 2.07 49.81 14.69 43.75
## 2 CLAY 10.76 7.40 14.26 1.86 49.37 14.05 50.72
## 3 KARPOV 11.02 7.30 14.77 2.04 48.37 14.09 48.95
## 4 BERNARD 11.02 7.23 14.25 1.92 48.93 14.99 40.87
## 5 YURKOV 11.34 7.09 15.19 2.10 50.42 15.31 46.26
## 6 WARNERS 11.11 7.60 14.31 1.98 48.68 14.23 41.10
## Pole.vault Javeline X1500m Rank Points Competition
## 1 5.02 63.19 291.7 1 8217 Decastar
## 2 4.92 60.15 301.5 2 8122 Decastar
## 3 4.92 50.31 300.2 3 8099 Decastar
## 4 5.32 62.77 280.1 4 8067 Decastar
## 5 4.72 63.44 276.4 5 8036 Decastar
## 6 4.92 51.77 278.1 6 8030 Decastar
Dari hasil PCA, jumlah komponen utama dipilih berdasarkan variansi yang dijelaskan. Umumnya, berfokus pada komponen yang mampu menjelaskan total variansi ≥ 80%. Berdasarkan scree plot, bisa menentukan jumlah komponen signifikan untuk analisis.
# Import data
data <- read.csv("decathlon-3.csv", header = TRUE, sep = ",")
# Hapus kolom non-numerik
data_numeric <- data[, sapply(data, is.numeric)]
# Periksa data
str(data_numeric)
## 'data.frame': 41 obs. of 12 variables:
## $ X100m : num 11 10.8 11 11 11.3 ...
## $ Long.jump : num 7.58 7.4 7.3 7.23 7.09 7.6 7.3 7.31 6.81 7.56 ...
## $ Shot.put : num 14.8 14.3 14.8 14.2 15.2 ...
## $ High.jump : num 2.07 1.86 2.04 1.92 2.1 1.98 2.01 2.13 1.95 1.86 ...
## $ X400m : num 49.8 49.4 48.4 48.9 50.4 ...
## $ X110m.hurdle: num 14.7 14.1 14.1 15 15.3 ...
## $ Discus : num 43.8 50.7 49 40.9 46.3 ...
## $ Pole.vault : num 5.02 4.92 4.92 5.32 4.72 4.92 4.42 4.42 4.92 4.82 ...
## $ Javeline : num 63.2 60.1 50.3 62.8 63.4 ...
## $ X1500m : num 292 302 300 280 276 ...
## $ Rank : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Points : int 8217 8122 8099 8067 8036 8030 8004 7995 7802 7733 ...
# PCA
library(FactoMineR)
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
# PCA Analysis (menghilangkan kolom pertama jika itu adalah ID atau variabel =non-numerik)
pca_result <- PCA(data_numeric, scale.unit = TRUE, graph = FALSE)
# Menampilkan hasil kontribusi komponen utama
summary(pca_result)
##
## Call:
## PCA(X = data_numeric, scale.unit = TRUE, graph = FALSE)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
## Variance 4.759 1.740 1.415 1.132 0.862 0.607 0.510
## % of var. 39.657 14.501 11.791 9.431 7.183 5.061 4.254
## Cumulative % of var. 39.657 54.158 65.949 75.380 82.563 87.624 91.878
## Dim.8 Dim.9 Dim.10 Dim.11 Dim.12
## Variance 0.411 0.235 0.187 0.141 0.000
## % of var. 3.426 1.960 1.561 1.175 0.000
## Cumulative % of var. 95.303 97.264 98.825 100.000 100.000
##
## Individuals (the 10 first)
## Dist Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3
## 1 | 2.833 | 1.505 1.161 0.282 | 0.704 0.694 0.062 | 0.942
## 2 | 3.754 | 1.557 1.243 0.172 | 0.555 0.432 0.022 | 2.189
## 3 | 3.602 | 1.600 1.312 0.197 | 0.463 0.300 0.016 | 2.057
## 4 | 2.957 | 0.082 0.003 0.001 | -0.978 1.340 0.109 | 0.972
## 5 | 3.154 | -0.039 0.001 0.000 | 2.051 5.894 0.423 | -1.072
## 6 | 2.552 | 0.631 0.204 0.061 | -1.719 4.142 0.454 | 0.826
## 7 | 2.645 | 0.422 0.091 0.025 | -1.091 1.667 0.170 | -1.225
## 8 | 2.615 | 0.576 0.170 0.048 | 0.249 0.087 0.009 | -0.377
## 9 | 3.811 | -1.687 1.458 0.196 | 0.455 0.290 0.014 | -0.581
## 10 | 2.921 | -1.506 1.162 0.266 | 0.405 0.230 0.019 | 0.930
## ctr cos2
## 1 1.529 0.111 |
## 2 8.261 0.340 |
## 3 7.294 0.326 |
## 4 1.630 0.108 |
## 5 1.980 0.115 |
## 6 1.176 0.105 |
## 7 2.588 0.214 |
## 8 0.245 0.021 |
## 9 0.582 0.023 |
## 10 1.491 0.101 |
##
## Variables (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr
## X100m | -0.708 10.538 0.501 | 0.158 1.428 0.025 | -0.154 1.685
## Long.jump | 0.756 12.007 0.571 | -0.333 6.369 0.111 | 0.182 2.347
## Shot.put | 0.612 7.862 0.374 | 0.612 21.542 0.375 | -0.020 0.028
## High.jump | 0.588 7.263 0.346 | 0.360 7.436 0.129 | -0.239 4.041
## X400m | -0.695 10.158 0.483 | 0.555 17.675 0.308 | 0.131 1.222
## X110m.hurdle | -0.703 10.398 0.495 | 0.205 2.415 0.042 | -0.081 0.464
## Discus | 0.529 5.889 0.280 | 0.619 21.995 0.383 | 0.055 0.211
## Pole.vault | 0.145 0.441 0.021 | -0.202 2.336 0.041 | 0.704 35.050
## Javeline | 0.319 2.138 0.102 | 0.322 5.955 0.104 | -0.390 10.776
## X1500m | -0.105 0.231 0.011 | 0.469 12.647 0.220 | 0.782 43.199
## cos2
## X100m 0.024 |
## Long.jump 0.033 |
## Shot.put 0.000 |
## High.jump 0.057 |
## X400m 0.017 |
## X110m.hurdle 0.007 |
## Discus 0.003 |
## Pole.vault 0.496 |
## Javeline 0.152 |
## X1500m 0.611 |
# Scree plot
fviz_eig(pca_result, addlabels = TRUE, ylim = c(0, 100))
Berdasarkan scree plot yang ditampilkan:
Jumlah Komponen Utama yang Signifikan:
Dimensi 1 (PC1) menjelaskan 39,7% dari variasi data. Dimensi 2 (PC2) menambah 14,5%, sehingga dua dimensi pertama menjelaskan sekitar 54,2% dari total variasi. Dimensi 3 (PC3) menambah 11,8%, menjadikan total tiga dimensi pertama menjelaskan sekitar 66% dari total variasi. Dimensi 4 (PC4) menambah 9,4%, sehingga empat dimensi pertama menjelaskan sekitar 75,4% dari total variasi. Untuk analisis yang efisien, dimensi yang dipilih biasanya mencakup 80%-90% variasi total. Berdasarkan grafik ini:
Sekitar 5-6 dimensi cukup untuk menjelaskan variasi data dengan baik (di atas 80%). Kriteria Penentuan Dimensi:
Elbow Rule: Pada scree plot, terlihat “elbow” atau titik di mana penurunan variansi yang dijelaskan menjadi kurang signifikan. Dalam hal ini, “elbow” berada di sekitar Dimensi 3 atau 4. Cumulative Variance: Jika tujuan analisis adalah mencakup 80%-90% variasi, maka 5 atau 6 dimensi dapat dipertimbangkan. Interpretasi:
Dimensi 1 (PC1) memuat informasi dominan tentang variabel yang paling penting, seperti Points dan Rank (berdasarkan grafik sebelumnya). Dimensi 2 (PC2) menambahkan informasi terkait variabel seperti Discus, Shot.put, atau High Jump. Dimensi tambahan (PC3, PC4, dst.) mengandung variansi yang lebih kecil, tetapi mungkin relevan untuk detail spesifik atau outlier dalam data.
Scatter plot menggunakan PC1 dan PC2 membantu melihat pola atau kluster antar atlet. Atlet yang berada dekat satu sama lain cenderung memiliki performa yang mirip, sementara yang berjauhan menunjukkan perbedaan yang signifikan.
# Scatter plot menggunakan komponen utama pertama dan kedua
# Pastikan library sudah di-load
library(FactoMineR)
library(factoextra)
# PCA Analysis (menggunakan data numerik yang sudah disiapkan sebelumnya)
pca_result <- PCA(data_numeric, scale.unit = TRUE, graph = FALSE)
# Scatter plot (individu)
fviz_pca_ind(pca_result,
geom.ind = "point", # Gunakan titik untuk individu
col.ind = "cos2", # Warna berdasarkan kualitas representasi
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE, # Hindari overlapping label
title = "Scatter Plot Komponen Utama (PC1 vs PC2)")
Variabel yang memiliki panah panjang di plot PCA menunjukkan kontribusi besar terhadap komponen utama tertentu. Sudut antar panah menggambarkan korelasi antar cabang lomba, apakah saling mendukung atau berlawanan.
# Plot variabel/cabang lomba dalam ruang PCA
fviz_pca_var(pca_result,
col.var = "contrib", # Warna berdasarkan kontribusi
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
Grafik PCA (Principal Component Analysis) pada “Variables - PCA”
menggambarkan hubungan antara variabel (cabang lomba) dengan dua dimensi
utama (Dim-1 dan Dim-2), serta kontribusi masing-masing variabel
terhadap dimensi tersebut.
Penjelasan Hubungan: Dim-1 (39.7%): Dimensi ini menjelaskan mayoritas variabilitas data. Variabel yang berkontribusi besar terhadap Dim-1 meliputi Points, Long Jump, dan Rank. Variabel ini berada di arah yang sama pada grafik, menunjukkan hubungan kuat antara performa keseluruhan (Points) dan hasil di cabang Long Jump serta peringkat (Rank). Dim-2 (14.5%): Dimensi ini menjelaskan variasi tambahan dalam data. Variabel seperti Discus, Shot-put, dan High Jump lebih banyak berkontribusi pada Dim-2. Hal ini menunjukkan bahwa Dim-2 dapat mencerminkan kemampuan atlet di cabang-cabang tertentu yang lebih teknis atau spesifik. Hubungan antar Variabel: Variabel yang memiliki sudut kecil atau arah yang sama (misalnya, Points dan Long Jump) menunjukkan korelasi positif yang tinggi. Variabel yang membentuk sudut 90 derajat (misalnya, Pole Vault terhadap Points) menunjukkan hubungan yang lemah atau tidak berkorelasi. Variabel yang berlawanan arah menunjukkan hubungan negatif. Hubungan dengan Atlet: Atlet dengan skor tinggi pada Dim-1 cenderung memiliki performa baik dalam cabang yang berkontribusi tinggi terhadap Dim-1 (seperti Points dan Long Jump). Atlet dengan skor tinggi pada Dim-2 cenderung unggul dalam cabang seperti Discus, Shot-put, atau High Jump.
Komponen utama dengan kontribusi tertinggi pada cabang tertentu bisa dilihat dari hasil PCA. Cabang yang memiliki pengaruh besar pada PC1 umumnya mencerminkan performa keseluruhan, sedangkan cabang lain mungkin lebih terwakili di PC2 atau PC3.
# Kontribusi variabel pada masing-masing komponen utama
pca_result$var$contrib
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## X100m 10.5382802 1.427857e+00 1.68455054 3.751302060 30.6611523
## Long.jump 12.0072309 6.369260e+00 2.34725764 0.004605831 0.2615179
## Shot.put 7.8615458 2.154206e+01 0.02806556 1.056834544 0.6166385
## High.jump 7.2626467 7.436236e+00 4.04138977 0.662462192 18.8425779
## X400m 10.1582977 1.767542e+01 1.22207996 0.695168032 0.6447135
## X110m.hurdle 10.3979678 2.415117e+00 0.46428810 14.767777108 1.4438507
## Discus 5.8889946 2.199468e+01 0.21097770 6.593926298 1.0997592
## Pole.vault 0.4408398 2.336074e+00 35.05034400 30.656386097 1.2009404
## Javeline 2.1378946 5.955215e+00 10.77628204 31.667171084 21.5978461
## X1500m 0.2312995 1.264716e+01 43.19875598 3.209553198 1.5257759
## Rank 12.8233634 2.007797e-01 0.69608472 5.417624866 21.8561189
## Points 20.2516390 1.397489e-04 0.27992400 1.517188690 0.2491087
# Visualisasi kontribusi
fviz_contrib(pca_result, choice = "var", axes = 1, top = 10)
Berdasarkan grafik “Contribution of variables to Dim-1,” kontribusi
setiap variabel terhadap Dimensi-1 (PC1) menunjukkan seberapa besar
masing-masing variabel berperan dalam menentukan performa atlet. Berikut
adalah analisisnya:
Points (20%) memiliki kontribusi tertinggi, yang menunjukkan bahwa skor atau poin total sangat memengaruhi performa atlet secara keseluruhan dalam Dimensi-1. Rank (~15%) juga memberikan kontribusi besar, menandakan bahwa posisi peringkat sangat terkait dengan performa. Long Jump, X100m, X110m.hurdle, dan X400m memiliki kontribusi sedang (~10-12%), yang menunjukkan bahwa cabang ini juga penting dalam menentukan performa. Shot-put, High Jump, Discus, dan Javelin memiliki kontribusi lebih kecil (di bawah 10%), sehingga cabang ini memberikan pengaruh yang lebih rendah terhadap Dimensi-1.
Atlet diurutkan berdasarkan nilai PC1. Semakin tinggi nilai PC1 seorang atlet, semakin baik performanya secara keseluruhan. Untuk performa pada cabang spesifik, bisa dilihat dari nilai pada komponen lain yang relevan.
# Tambahkan skor PC1 ke dataset asli
data$PC1 <- pca_result$ind$coord[, 1] # Koordinat individu pada PC1
# Urutkan atlet berdasarkan PC1 secara menurun
best_performance <- data[order(-data$PC1), c("Athlets", "PC1", "Rank")]
# Tampilkan hasil
print("Urutan atlet berdasarkan performa terbaik (PC1 tertinggi):")
## [1] "Urutan atlet berdasarkan performa terbaik (PC1 tertinggi):"
print(best_performance)
## Athlets PC1 Rank
## 16 Karpov 5.09199700 3
## 14 Sebrle 5.08924055 1
## 15 Clay 4.77479107 2
## 17 Macey 2.72408149 4
## 18 Warners 2.53714224 5
## 22 Bernard 1.91316327 9
## 3 KARPOV 1.59996822 3
## 2 CLAY 1.55741711 2
## 1 SEBRLE 1.50509908 1
## 19 Zsivoczky 1.45638727 6
## 20 Hernu 1.29890178 7
## 21 Nool 0.85291112 8
## 6 WARNERS 0.63094174 6
## 24 Pogorelov 0.57892167 11
## 8 McMULLEN 0.57569349 8
## 27 Smith 0.52034350 14
## 7 ZSIVOCZKY 0.42150828 7
## 23 Schwarzl 0.34087848 10
## 25 Schoenbeck 0.20769358 12
## 28 Averyanov 0.13461368 15
## 29 Ojaniemi 0.11709159 16
## 4 BERNARD 0.08242073 4
## 26 Barras 0.06046006 13
## 5 YURKOV -0.03923536 5
## 30 Smirnov -0.61182447 17
## 32 Drews -0.62435402 19
## 31 Qi -0.72528295 18
## 35 Gomez -0.90226700 22
## 34 Terek -1.09373498 21
## 33 Parkhomenko -1.31495535 20
## 11 BARRAS -1.44501275 11
## 10 HERNU -1.50583543 10
## 9 MARTINEAU -1.68662213 9
## 39 Korkizoglou -2.13225417 26
## 36 Turi -2.18374543 23
## 12 NOOL -2.31106165 12
## 38 Karlivans -2.80911521 25
## 37 Lorenzo -3.05075874 24
## 40 Uldal -3.49140420 27
## 41 Casarsa -3.96250824 28
## 13 BOURGUIGNON -4.18169494 13
# Visualisasi peringkat atlet berdasarkan PC1
library(ggplot2)
ggplot(best_performance, aes(x = reorder(Athlets, -PC1), y = PC1, fill = Rank)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(title = "Urutan Atlet Berdasarkan PC1",
x = "Atlet",
y = "Skor PC1") +
theme_minimal()
Berdasarkan grafik “Urutan Atlet Berdasarkan PC1,” performa atlet
diurutkan berdasarkan skor PC1. Atlet dengan skor PC1 tertinggi dianggap
memiliki performa terbaik, sedangkan skor yang rendah menunjukkan
performa yang lebih rendah.
Atlet dengan performa terbaik: Atlet yang berada di bagian bawah grafik dengan nilai positif tertinggi (misalnya, “Karpov” dan “Clay”). Atlet dengan performa terendah: Atlet di bagian atas grafik dengan nilai negatif terendah (seperti “BOURGUIGNON” dan “Casarsa”). Kesimpulan:
Karpov memiliki performa terbaik dengan skor PC1 tertinggi. BOURGUIGNON memiliki performa terendah dengan skor PC1 paling negatif.