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
  1. Tentukan berapa banyak komponen utama yang dihasilkan untuk menjelaskan variasi data. Jelaskan interpretasinya.

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.

  1. Buat scatter plot data dalam ruang dua dimensi menggunakan komponen utama pertama dan kedua. Apa pola atau kluster yang terlihat?

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)")

  1. Jelaskan hubungan antara hasil PCA yang diperoleh dengan variabel/cabang lomba serta sampel/atlet yang diperoleh.

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.

  1. Komponen utama mana yang paling berkaitan dengan performa atlet di cabang tertentu.

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.

  1. Jelaskan berdasarkan analisis, urutan atlet yang memiliki performa terbaik

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.