Unsupervised Learning: Principal Component Analysis

Training on Machine Learning and Data Mining in the Data Science Capabilities

by: Rizki Ananda - IPB University

Pendahuluan

Pembelajaran mesin statistika (statistical machine learning) merupakan salah satu teknologi kunci untuk melakukan penambangan data (data mining) dan menganalisisnya untuk memperoleh keputusan dan generalisasi secara tepat.

Peran statistika: untuk melakukan inferensia dari sampel.
Peran computer science: untuk mendapatkan algoritma yang efisien dalam menyelesaikan masalah optimisasi yang mewakili dan mengevaluasi model untuk inferensia.

Pembelajaran statistika mengacu pada seperangkat metode dan sarana untuk memahami data. Metode dan sarana ini dapat diklasifikasi sebagai metode yang diawasi (supervised) dan tidak diawasi (unsupervised).

Metode supervised digunakan untuk membangun model statistika dengan tujuan memprediksi output (Y) berdasarkan satu atau lebih input (X1, X2, …, Xk).

Sedangkan metode unsupervised hanya ada input (X1, X2, …, Xk) namun tidak ada output (Y). Tujuannya adalah mempelajari hubungan dan struktur pada data X.

Unsupervised Learning

Unsupervised Learning (pembelajaran tanpa pengawasan) merupakan seperangkat alat statistik yang digunakan untuk skenario di mana hanya ada sejumlah fitur (variabel X) dan tidak ada target (variabel Y). Sehingga kita tidak dapat membuat prediksi karena tidak ada peubah respon yang terkait pada setiap amatan. Sebaliknya, kita tertarik untuk menemukan cara menarik untuk memvisualisasikan data atau untuk menemukan subkelompok pengamatan yang serupa/mirip.

Unsupervised learning cenderung lebih menantang karena tidak ada tujuan yang jelas untuk analisis dan seringkali subjektif. Dalam unsupervised learning, algoritma ditugaskan untuk menemukan pola, struktur, atau grup dalam data tanpa petunjuk eksplisit tentang apa yang harus dicari. Ini berbeda dengan supervised learning di mana model diberikan label target yang sudah diketahui dan diajari untuk memprediksi label tersebut.

Ada dua tugas utama dalam unsupervised learning:

  1. Dimensionality Reduction (Pereduksian Dimensi) yang bertujuan untuk mengurangi jumlah fitur atau atribut dalam data sambil mempertahankan sebanyak mungkin informasi yang relevan. Contoh: Principal Component Analysis (PCA).
  2. Clustering (Penggerombolan) yang bertujuan untuk mengelompokkan data ke dalam kelompok atau cluster berdasarkan kesamaan karakteristik atau atribut tertentu. Contoh: Hierarchical Clustering dan Non-hierarchical Clustering seperti K-Means.

Unsupervised learning adalah alat yang kuat dalam analisis data ketika kita tidak memiliki informasi label yang tersedia atau ketika kita ingin menjelajahi struktur dalam data secara mandiri. Unsupervised learning mempelajari pola dari unlabeled data. Digunakan untuk memahami dan memvisualisasikan data, mendeteksi anomali, information retrieval, dan data compression.

Reduksi Dimensi

Metode pereduksian dimensi adalah teknik yang digunakan dalam analisis data dan pembelajaran mesin untuk mengurangi jumlah fitur atau dimensi dari sebuah dataset. Reduksi dimensi dilakukan dengan pengurangan variabel input dengan mempertahankan sebanyak mungkin keragaman data asal agar informasi tetap relevan.

Tujuan utama dari pereduksian dimensi adalah untuk mengatasi masalah “curse of dimensionality”, di mana data yang memiliki banyak fitur akan menjadi sulit untuk dianalisis dan divisualisasi, menghasilkan kompleksitas yang berlebihan, dan memerlukan waktu komputasi yang tinggi. Reduksi dimensi juga dapat menghindari masalah overfitting yaitu model yang terlalu fit dengan data training. Selain itu juga dapat mengatasi masalah multikolinieritas (antarfitur memiliki korelasi yang tinggi).

Sehingga manfaat dari reduksi dimensi adalah:

  • Peningkatan efisiensi komputasi: Dengan mengurangi dimensi data, algoritma machine learning dapat berjalan lebih cepat dan memerlukan lebih sedikit sumber daya komputasi.

  • Peningkatan kualitas model: Dalam beberapa kasus, pengurangan dimensi dapat membantu dalam membangun model yang lebih baik dengan menghilangkan atribut yang tidak relevan atau saling berkorelasi.

  • Visualisasi yang lebih baik: Dengan mengurangi dimensi, data dapat dengan mudah divisualisasikan dalam ruang berdimensi rendah, yang dapat membantu dalam pemahaman pola atau struktur dalam data.

1-Dimensional Data

2-Dimensional Data

3-Dimensional Data

Principal Component Analysis

Pendahuluan

Principal Component Analysis (PCA) adalah teknik analisis multivariat yang digunakan untuk mengidentifikasi pola dan relasi antar variabel dalam sebuah dataset yang kompleks. PCA mengambil sekelompok variabel dan mentransformasikan mereka menjadi sejumlah komponen baru yang saling bebas secara linear yang disebut sebagai komponen utama (principal components). Setiap komponen utama merupakan kombinasi linier dari variabel asli dan diurutkan berdasarkan besarnya variansi yang dijelaskan oleh setiap komponen.

PCA berguna dalam mengekstraksi informasi penting dari dataset dengan mengurangi dimensi variabel yang ada tanpa mengorbankan banyak informasi. Selain itu, PCA juga dapat digunakan untuk mengidentifikasi korelasi antar variabel dan menghilangkan pengaruh variabel yang tidak penting. Hal ini dapat membantu mempercepat analisis data dan membuat hasil yang lebih mudah dipahami.

Konsep Dasar

Konsep dasar dari PCA adalah mengurangi dimensi variabel yang ada dalam sebuah dataset yang kompleks dengan mentransformasikan variabel-variabel tersebut ke dalam bentuk komponen utama yang saling bebas secara linear. PCA mengambil sebuah matriks data yang terdiri dari n observasi dan p variabel, kemudian melakukan transformasi linier pada data tersebut untuk menghasilkan sejumlah komponen utama baru yang dapat menggambarkan sebagian besar variabilitas dalam dataset.

Secara matematis, PCA bekerja dengan melakukan dekomposisi nilai singular (singular value decomposition/SVD) pada matriks data, sehingga menghasilkan matriks faktor komponen utama. Komponen utama ini diurutkan berdasarkan besarnya variansi yang dijelaskan oleh setiap komponen, dan dapat digunakan untuk merepresentasikan data dalam ruang yang lebih sederhana dan efisien.

Dalam praktiknya, PCA digunakan untuk mempercepat analisis data dengan menghilangkan variabel-variabel yang tidak penting dan mengidentifikasi hubungan antara variabel-variabel yang ada. Dalam hal ini, PCA membantu memperjelas struktur dalam data yang kompleks dan memungkinkan peneliti untuk membuat kesimpulan yang lebih tepat dan efektif.

Secara umum, PCA dapat digunakan untuk berbagai jenis data, termasuk data numerik, data kategorik, dan data ordinal. PCA juga dapat digunakan untuk mengekstraksi fitur penting dari data dalam aplikasi machine learning dan deep learning.

Kelebihan dan Kekurangan

Berikut adalah beberapa kelebihan dan kekurangan PCA:

Kelebihan:

  1. Mengurangi dimensi variabel: PCA membantu mengurangi dimensi variabel dalam dataset yang kompleks, sehingga dapat mempercepat analisis data dan membuat hasil yang lebih mudah dipahami.

  2. Meningkatkan efisiensi: Dengan menghilangkan variabel yang tidak penting dan mengidentifikasi hubungan antara variabel, PCA dapat meningkatkan efisiensi dan akurasi analisis data.

  3. Meningkatkan pemahaman pola dalam data: PCA dapat membantu meningkatkan pemahaman pola dalam data yang kompleks, sehingga memungkinkan pengambilan keputusan yang lebih tepat dan efektif.

  4. Dapat digunakan untuk berbagai jenis data: PCA dapat digunakan untuk berbagai jenis data, termasuk data numerik, data kategori, dan data ordinal.

Kekurangan:

  1. Ketergantungan pada data: PCA sangat bergantung pada data yang dianalisis dan mungkin tidak memberikan hasil yang optimal jika data tidak berdistribusi normal.

  2. Interpretasi yang sulit: Hasil PCA dapat sulit diinterpretasikan karena komponen utama tidak selalu memiliki arti yang jelas dalam konteks data asli.

  3. Kerugian informasi: PCA dapat menyebabkan kerugian informasi yang signifikan jika komponen utama yang dihasilkan tidak dapat menjelaskan sebagian besar variasi dalam data.

  4. Sensitif terhadap skala: PCA sensitif terhadap skala variabel yang diukur, sehingga perlu dilakukan normalisasi skala variabel untuk menghindari efek yang merugikan.

Dalam prakteknya, kelebihan dan kekurangan PCA harus dipertimbangkan dengan cermat untuk memutuskan apakah teknik ini tepat untuk digunakan pada dataset tertentu.

Jenis PCA

Ada beberapa jenis PCA yang dapat digunakan tergantung pada tujuan dan jenis data yang dianalisis, di antaranya:

  1. Principal Component Analysis Standar: Ini adalah metode PCA paling umum yang digunakan untuk mengurangi dimensi variabel pada data numerik. PCA Standar mengasumsikan data berdistribusi normal dan memiliki kovarians diagonal.

  2. Sparse PCA: Sparse PCA bertujuan untuk menghasilkan komponen utama yang lebih jarang (sparse), sehingga hanya beberapa variabel yang terlibat dalam setiap komponen utama. Ini berguna ketika ada banyak variabel dalam data yang mungkin tidak berkontribusi signifikan terhadap variansi total.

  3. Incremental PCA: Incremental PCA digunakan untuk menghitung komponen utama dari dataset yang sangat besar dengan cara memproses bagian-bagian data secara bertahap.

  4. Kernel PCA: Kernel PCA digunakan untuk mengurangi dimensi variabel pada data non-linear atau data yang tidak berdistribusi normal. Ini menciptakan fungsi kernel yang mentransformasikan data ke dalam ruang fitur baru yang mungkin non-linear.

  5. Probabilistic PCA: Probabilistic PCA (pPCA) digunakan ketika data mengandung kebisingan atau data yang tidak berdistribusi normal. Ini mengasumsikan bahwa data dihasilkan dari distribusi normal multivariat dan mengoptimalkan likelihood model ini untuk mendapatkan komponen utama.

  6. Robust PCA: Robust PCA digunakan ketika data mengandung outlier atau noise yang tinggi. Ini mencoba mengisolasi data asli dari noise dan outlier dengan mengoptimalkan fungsi kerugian yang sesuai.

Setiap jenis PCA memiliki kelebihan dan kekurangan tersendiri, dan pemilihan jenis PCA yang tepat tergantung pada sifat data yang dianalisis dan tujuan analisis data.

Terminologi pada PCA

Berikut adalah beberapa terminologi yang sering digunakan pada PCA:

  1. Variabel: Variabel adalah nilai yang diamati atau diukur dalam dataset. Dalam PCA, variabel ini dapat berupa atribut, fitur, atau dimensi dari dataset.

  2. Komponen Utama (Principal Component): Komponen utama merupakan hasil dari transformasi linier pada data yang menghasilkan sebuah vektor baru yang merepresentasikan kombinasi linier dari variabel-variabel asli. Setiap komponen utama ditempatkan secara berurutan dan menggambarkan sebagian besar variasi dalam data. Komponen utama biasanya diurutkan berdasarkan besarnya variansi yang dijelaskan oleh masing-masing komponen.

  3. Variansi (variance): Variansi menggambarkan seberapa jauh titik data tersebar dari nilai rata-rata dalam dataset. Variansi ini merupakan ukuran penting dalam PCA, karena setiap komponen utama menggambarkan sebagian dari total variansi dalam data.

  4. Faktor Beban (Loadings): Faktor beban menggambarkan seberapa kuat variabel berkontribusi pada setiap komponen utama. Faktor beban ini sering digunakan untuk menginterpretasikan arti dari setiap komponen utama.

  5. Skor: Skor adalah nilai numerik yang dihasilkan dari proyeksi data pada setiap komponen utama. Skor ini dapat digunakan untuk membandingkan dan memvisualisasikan data dalam ruang dimensi yang lebih rendah.

  6. Proyeksi: Proyeksi menggambarkan representasi data dalam ruang baru yang dibentuk oleh komponen utama. Proyeksi ini sering digunakan untuk memvisualisasikan pola dalam data yang kompleks.

  7. Eigenvalue: Eigenvalue merupakan besarnya variansi yang dijelaskan oleh masing-masing komponen utama. Semakin besar eigenvalue suatu komponen, maka semakin banyak variansi dalam data yang dijelaskan oleh komponen tersebut.

  8. Variance explained atau varian yang dijelaskan: Persentase varians data yang dapat dijelaskan oleh komponen utama.

  9. Scree plot: Grafik yang menunjukkan varians yang dijelaskan oleh setiap komponen utama.

Algoritma PCA

Berikut adalah langkah-langkah algoritma PCA secara umum:

  1. Matriks data: PCA dimulai dengan mempersiapkan matriks data yang terdiri dari n observasi (sampel) dan p variabel atau atribut yang diukur pada setiap observasi. Matriks data tersebut akan menjadi input dari PCA.

  2. Standarisasi data: Lakukan normalisasi data untuk memastikan bahwa semua variabel memiliki skala yang sama dan memiliki kontribusi yang setara dalam PCA (mean 0 dan variance 1). Standarisasi data dilakukan dengan mengurangi nilai rata-rata dari setiap variabel dan membagi dengan standar deviasi dari setiap variabel.

  3. Menghitung matriks kovarians: Setelah data telah distandarisasi, matriks kovarians atau matriks korelasi akan dihitung. Matriks kovarians digunakan jika variabel-variabel dalam data memiliki satuan yang sama, sedangkan matriks korelasi digunakan jika variabel-variabel memiliki satuan yang berbeda.

  4. Menghitung eigenvalues dan eigenvectors: Hitung eigenvalues dan eigenvectors dari matriks kovarians. Eigenvectors merepresentasikan arah dari komponen utama dan eigenvalues merepresentasikan jumlah varians yang dijelaskan oleh masing-masing komponen utama.

  5. Mengurutkan eigenvalues: Urutkan eigenvalues dalam urutan menurun sehingga komponen utama dengan varians terbesar muncul pertama.

  6. Memilih komponen utama: Setelah eigenvalue dan eigenvector dihitung, komponen utama akan ditentukan dengan mengurutkan eigenvector berdasarkan nilai eigen yang tertinggi. Komponen utama pertama adalah eigenvector dengan nilai eigen tertinggi, komponen utama kedua adalah eigenvector dengan nilai eigen tertinggi kedua, dan seterusnya.

  7. Menghitung faktor beban: Hitung faktor beban (loadings) untuk setiap variabel, yang merupakan koefisien linear yang menghubungkan variabel dengan setiap komponen utama.

  8. Menghitung varians yang dijelaskan: Setelah nilai muatan dihitung, proses selanjutnya adalah menghitung varians yang dijelaskan oleh setiap komponen utama. Varians yang dijelaskan menunjukkan seberapa besar variasi data yang dapat dijelaskan oleh setiap komponen utama.

  9. Scree Plot: Scree plot adalah grafik yang menunjukkan varians yang dijelaskan oleh setiap komponen utama. Grafik ini digunakan untuk menentukan jumlah komponen utama yang akan dipertahankan dalam analisis. Jumlah komponen utama yang dipertahankan biasanya didasarkan pada titik di mana penurunan signifikan dari varian yang dijelaskan terlihat pada scree plot.

  10. Transformasi data: Setelah komponen utama dan varians yang dijelaskan telah ditentukan, data dapat diproyeksikan ke dalam ruang yang lebih rendah menggunakan komponen utama yang dipilih. Transformasi data ke dalam ruang dimensi yang lebih rendah dengan mengalikan data asli dengan matriks komponen utama.

  11. Visualisasi data: Visualisasikan data dalam ruang dimensi yang lebih rendah untuk memahami pola dan hubungan yang terdapat dalam data.

  12. Interpretasi hasil: Interpretasikan hasil untuk memahami makna komponen utama dan faktor beban yang terkait dengan data yang dianalisis.

Principal Componet

Principal component merupakan kombinasi linear dari variabel asal.

Misal \(X_{nxp}\) adalah matriks variable asal sebanyak p variabel.
Misal \(Z_i\) adalah principal component ke-i.
Misal \(\sum\) merupakan matriks variance-covariance.

Principal Component didapatkan dengan menemukan suatu nilai \(a_i\) yang memaksimumkan \(Var(Z_i)=a_i'\sum a_i\).

Masalah optimisasi di atas bisa diselesaikan dengan menggunakan metode dekomposisi nilai eigen misal dengan metode singular value decomposition (svd).
Sehingga didapatkan \(a_i\) adalah vektor eigen \(e_i\) dan \(Var(Z_i)=\lambda_i\) (nilai eigen).
Di mana \(\lambda_1 > \lambda_2 > ... > \lambda_p\) merupakan loading factor.

Antar Principal Componen saling tidak berkorelasi atau bersifat ortogonal.

Principal Component merupakan hasil rotasi dari variabel asal.

Penentuan banyaknya principal component didasarkan pada nilai Cumulative Proportion of Variance (Kumulatif Proporsi Keragaman). Proportion of Vaeriance bisa dihitung dari masing-masing Principal Component.

\[ \sf PropVar= \frac {Keragaman Principal Componen ke-i}{Total Keragaman Variabel Asal} \] \[ PropVar=\frac {\lambda_i}{s_1^2+s_2^2+\dots+s_p^2}=\frac {\lambda_i}{\lambda_1+\lambda_2+\dots+\lambda_p} \] Banyaknya Principal Component dipilih dengan menentukan batas minimum Cumulative Proportion of Variance misal 0.7, 0.8, atau 0.9.

Selain itu kita juga bisa melihat dengan menggunakan scree plot berdasarkan Cumulative Proportion of Variance.

Contoh:

Memaksimumkan Varians

Misal diketahui informasi berikut:

Person Height (cm)
Alex 145
Ben 160
Chris 185

Manakah yang Alex, Ben, dan Chirs?

Selanjutnya jika diketahui,

Person Height (cm)
Daniel 172
Elsa 173
Fernandez 171

Manakah yang Daniel, Elsa, dan Fernandez?

Ilustrasi 1

Tujuan utama dari proyek ini adalah untuk mempresentasikan dan menerapkan metode unsupervised learning untuk Principal Component Analysis (PCA) - metode statistik untuk mengurangi dimensi. PCA digunakan untuk mengekstrak informasi yang signifikan dari tabel data multivariat dan mengekspresikan informasi ini sebagai satu set variabel baru yang disebut komponen utama. Tujuan dari PCA adalah untuk mengidentifikasi arah yang dapat divisualisasikan secara grafis dengan kerugian informasi minimal.

Dalam analisis ini, akan digunakan dataset decathlon2 dari package factoextra. Metodologi proyek akan difokuskan pada: statistik deskriptif dan explanatory data analysis dari dataset; menghitung PCA dengan prcomp(); mengekstrak eigenvalue dari komponen utama; mengekstrak hasil untuk individu dan variabel; k-means clustering berdasarkan hasil PCA. Analisis akan didukung oleh visualisasi yang diperlukan. Hasil dari proyek ini adalah untuk membedakan atlet dengan performa terbaik, rata-rata, dan terburuk dalam disiplin olahraga yang disebutkan.

Data

Data yang digunakan pada ilustrasi kali ini adalah dataset demo decathlon2 dari package factoextra. Data ini menjelaskan kinerja atlet selama dua acara olahraga (Desctar dan OlympicG). Ini berisi 27 individu (atlet) yang dijelaskan oleh 13 variabel (cabang olahraga). Untuk analisis lebih lanjut, akan dipilih individu aktif (baris 1:23) dan variabel aktif (kolom 1:10) dari dataset decathlon2, oleh karena itu akan dibuat dataset baru decathlon2.active untuk melakukan analisis komponen utama. Dataset decathlon2.active terdiri dari 23 observasi dan 10 variabel (ditampilkan di bawah).

data(decathlon2)
decathlon2.active <- decathlon2[1:23, 1:10]
head(decathlon2.active)

Explanatory Data Analysis

Untuk menyediakan model, diperlukan ringkasan data. Deskripsi variabel (cabang olahraga) adalah sebagai berikut:

  • X100m - hasil lomba 100 meter diukur dalam detik

  • Long.jump - hasil lompat jauh diukur dalam meter

  • Shot.put - hasil lempar lembing diukur dalam meter

  • High.jump - hasil lompat tinggi diukur dalam meter

  • X400m - hasil lomba 400 meter diukur dalam detik

  • X110m.hurdle - hasil lomba gawang 110 meter diukur dalam detik

  • Discus - hasil lempar cakram diukur dalam meter

  • Pole.vault - hasil lompat tongkat diukur dalam meter

  • Javeline - hasil lempar lembing diukur dalam meter

  • X1500m - hasil lomba 1500 meter diukur dalam detik

Statistik ringkasan dan histogram di bawah ini menunjukkan distribusi observasi dalam semua variabel numerik. Sumbu horizontal mewakili nilai observasi, sedangkan sumbu vertikal “count” menunjukkan jumlah observasi tertentu untuk setiap nilai.

summary(decathlon2.active)
##      X100m         Long.jump        Shot.put       High.jump    
##  Min.   :10.44   Min.   :6.800   Min.   :12.68   Min.   :1.860  
##  1st Qu.:10.84   1st Qu.:7.165   1st Qu.:14.17   1st Qu.:1.940  
##  Median :10.97   Median :7.310   Median :14.65   Median :2.010  
##  Mean   :11.00   Mean   :7.350   Mean   :14.62   Mean   :2.007  
##  3rd Qu.:11.23   3rd Qu.:7.525   3rd Qu.:15.14   3rd Qu.:2.095  
##  Max.   :11.64   Max.   :7.960   Max.   :16.36   Max.   :2.150  
##      X400m        X110m.hurdle       Discus        Pole.vault   
##  Min.   :46.81   Min.   :13.97   Min.   :37.92   Min.   :4.400  
##  1st Qu.:48.95   1st Qu.:14.17   1st Qu.:43.74   1st Qu.:4.610  
##  Median :49.40   Median :14.37   Median :44.75   Median :4.820  
##  Mean   :49.43   Mean   :14.53   Mean   :45.16   Mean   :4.797  
##  3rd Qu.:50.02   3rd Qu.:14.94   3rd Qu.:46.93   3rd Qu.:5.000  
##  Max.   :51.16   Max.   :15.67   Max.   :51.65   Max.   :5.320  
##     Javeline         X1500m     
##  Min.   :52.33   Min.   :262.1  
##  1st Qu.:55.40   1st Qu.:268.8  
##  Median :57.44   Median :278.1  
##  Mean   :59.11   Mean   :277.9  
##  3rd Qu.:62.98   3rd Qu.:283.6  
##  Max.   :70.52   Max.   :301.5
par(mfrow = c(2, 5))
hist1 <- hist(decathlon2.active$X100m, breaks=10, col = "gray", main = "100 metres", 
     xlab = "seconds", ylab = "count")
hist2 <- hist(decathlon2.active$Long.jump, breaks=10, col = "gray", main = "Long jump", 
     xlab = "metres", ylab = "count")
hist3 <- hist(decathlon2.active$Shot.put, breaks=10, col = "gray", main = "Shot put", 
     xlab = "metres", ylab = "count")
hist4 <- hist(decathlon2.active$High.jump, breaks=10, col = "gray", main = "High jump", 
     xlab = "metres", ylab = "count")
hist5 <- hist(decathlon2.active$X400m, breaks=10, col = "gray", main = "400 metres", 
     xlab = "seconds", ylab = "count")
hist6 <- hist(decathlon2.active$X110m.hurdle, breaks=10, col = "gray", main = "110m hurdle", 
     xlab = "seconds", ylab = "count")
hist7 <- hist(decathlon2.active$Discus, breaks=10, col = "gray", main = "Discus", 
     xlab = "metres", ylab = "count")
hist8 <- hist(decathlon2.active$Pole.vault, breaks=10, col = "gray", main = "Pole vault", 
     xlab = "metres", ylab = "count")
hist9 <- hist(decathlon2.active$Javeline, breaks=10, col = "gray", main = "Javeline", 
     xlab = "metres", ylab = "count")
hist10 <- hist(decathlon2.active$X1500m, breaks=10, col = "gray", main = "1500 metres", 
     xlab = "seconds", ylab = "count")

Histogram untuk hasil lomba 100 meter dan 400 meter menunjukkan skewness negatif. Ekor sebelah kiri menunjukkan bahwa sebagian besar observasi terkonsentrasi pada hasil waktu yang lebih tinggi. Histogram untuk hasil lomba gawang 110 meter, lempar lembing, dan 1500 meter menunjukkan skewness positif. Ekor sebelah kanan mengimplikasikan bahwa observasi terpusat di sekitar nilai yang lebih rendah (hasil waktu yang lebih pendek dalam hal lomba dan hasil jarak yang lebih pendek dalam lempar lembing). Variabel lain memiliki distribusi simetris (terpusat di sekitar median) atau observasi didistribusikan sepanjang sumbu x.

Visualisasi dan Interpretasi

Langkah pertama dari analisis ini difokuskan pada perhitungan PCA menggunakan fungsi prcomp(). Perintah ini memungkinkan untuk: menyesuaikan data dengan pusat 0 dengan menggeser variabel; menyesuaikan varian menjadi 1 unit; standarisasi data yang dibutuhkan karena variabel diukur dalam skala yang berbeda. Selain itu, eigenvalues diekstraksi dengan menggunakan fungsi get_eigenvalue(). Eigenvalues mengukur jumlah variasi yang dipegang oleh setiap komponen utama (PC). Mereka dievaluasi untuk menentukan jumlah komponen utama yang harus dipertimbangkan.

res.pca <- prcomp(decathlon2.active, scale = TRUE)
print(res.pca)
## Standard deviations (1, .., p=10):
##  [1] 2.0308159 1.3559244 1.1131668 0.9052294 0.8375875 0.6502944 0.5500742
##  [8] 0.5238988 0.3939758 0.3492435
## 
## Rotation (n x k) = (10 x 10):
##                       PC1         PC2         PC3         PC4        PC5
## X100m        -0.418859080  0.13230683 -0.27089959  0.03708806 -0.2321476
## Long.jump     0.391064807 -0.20713320  0.17117519 -0.12746997  0.2783669
## Shot.put      0.361388111 -0.06298590 -0.46497777  0.14191803 -0.2970589
## High.jump     0.300413236  0.34309742 -0.29652805  0.15968342  0.4807859
## X400m        -0.345478567 -0.21400770 -0.25470839  0.47592968  0.1240569
## X110m.hurdle -0.376265119  0.01824645 -0.40325254 -0.01866477  0.2676975
## Discus        0.365965721 -0.03662510 -0.15857927  0.43636361 -0.4873988
## Pole.vault   -0.106985591 -0.59549862 -0.08449563 -0.37447391 -0.2646712
## Javeline      0.210864329 -0.28475723 -0.54270782 -0.36646463  0.2361698
## X1500m        0.002106782 -0.57855748  0.19715884  0.49491281  0.3142987
##                       PC6         PC7         PC8         PC9        PC10
## X100m         0.054398099 -0.16604375 -0.19988005 -0.76924639  0.12718339
## Long.jump    -0.051865558 -0.28056361 -0.75850657 -0.13094589  0.08509665
## Shot.put     -0.368739186 -0.01797323  0.04649571  0.12129309  0.62263702
## High.jump    -0.437716883  0.05118848  0.16111045 -0.28463225 -0.38244596
## X400m        -0.075796432  0.52012255 -0.44579641  0.20854176 -0.09784197
## X110m.hurdle  0.004048005 -0.67276768 -0.01592804  0.41058421 -0.04475363
## Discus        0.305315353 -0.25946615 -0.07550934  0.03391600 -0.49418361
## Pole.vault   -0.503563524 -0.01889413  0.06282691 -0.06540692 -0.39288155
## Javeline      0.556821016  0.24281145  0.10086127 -0.10268134 -0.01103627
## X1500m        0.064663250 -0.20245828  0.37119711 -0.25950868  0.17991689
summary(res.pca)
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5     PC6     PC7
## Standard deviation     2.0308 1.3559 1.1132 0.90523 0.83759 0.65029 0.55007
## Proportion of Variance 0.4124 0.1839 0.1239 0.08194 0.07016 0.04229 0.03026
## Cumulative Proportion  0.4124 0.5963 0.7202 0.80213 0.87229 0.91458 0.94483
##                            PC8     PC9   PC10
## Standard deviation     0.52390 0.39398 0.3492
## Proportion of Variance 0.02745 0.01552 0.0122
## Cumulative Proportion  0.97228 0.98780 1.0000
eig.val<-get_eigenvalue(res.pca)
eig.val
fviz_eig(res.pca, col.var="blue")

Berdasarkan tingkat pentingnya komponen, terlihat bahwa dua PC pertama memiliki nilai tertinggi untuk proporsi variasi. Pernyataan ini juga dibuktikan oleh pengukuran eigenvalues. Eigenvalues besar untuk PC pertama dan kecil untuk PC selanjutnya, yang berarti bahwa PC pertama sesuai dengan arah dengan jumlah variasi maksimum dalam kumpulan data. Jumlah dari semua eigenvalues memberikan varians total sebesar 10. Dalam hal plot pencar, eigenvalue pertama menjelaskan 41,24% variasi, sedangkan yang kedua 18,385%. Oleh karena itu, 59,627% variasi dijelaskan oleh kedua eigenvalues pertama bersama-sama, yang merupakan indikator yang tepat untuk analisis lebih lanjut.

PCA Results for Variables

Hasil PCA dapat dinilai dengan mempertimbangkan variabel (cabang olahraga) dan individu (atlet). Pertama-tama, akan dilakukan ekstraksi hasil untuk variabel. Untuk tujuan itu, get_pca_var() digunakan untuk menyediakan daftar matriks yang berisi semua hasil untuk variabel yang aktif (koordinat, korelasi antara variabel dan sumbu, kosinus kuadrat, dan kontribusi).

var <- get_pca_var(res.pca)
var
## Principal Component Analysis Results for variables
##  ===================================================
##   Name       Description                                    
## 1 "$coord"   "Coordinates for the variables"                
## 2 "$cor"     "Correlations between variables and dimensions"
## 3 "$cos2"    "Cos2 for the variables"                       
## 4 "$contrib" "contributions of the variables"

Cos2 adalah cosine kuadrat (koordinat kuadrat) dan berkaitan dengan kualitas representasi variabel. Cos2 dari variabel pada semua dimensi menggunakan package corrplot ditampilkan di bawah ini, serta diagram batang dari cos2 variabel menggunakan fungsi fviz_cos2().

head(var$cos2)
##                  Dim.1        Dim.2      Dim.3        Dim.4      Dim.5
## X100m        0.7235641 0.0321836641 0.09093628 0.0011271597 0.03780845
## Long.jump    0.6307229 0.0788806285 0.03630798 0.0133147506 0.05436203
## Shot.put     0.5386279 0.0072938636 0.26790749 0.0165041211 0.06190783
## High.jump    0.3722025 0.2164242070 0.10895622 0.0208947375 0.16216747
## X400m        0.4922473 0.0842034209 0.08039091 0.1856106269 0.01079698
## X110m.hurdle 0.5838873 0.0006121077 0.20149984 0.0002854712 0.05027463
##                     Dim.6        Dim.7        Dim.8       Dim.9       Dim.10
## X100m        1.251375e-03 0.0083423353 1.096563e-02 0.091848077 0.0019729565
## Long.jump    1.137570e-03 0.0238179990 1.579114e-01 0.002661478 0.0008832459
## Shot.put     5.749878e-02 0.0000977451 5.933633e-04 0.002283554 0.0472853495
## High.jump    8.102269e-02 0.0007928428 7.124302e-03 0.012574981 0.0178400831
## X400m        2.429504e-03 0.0818566479 5.454664e-02 0.006750333 0.0011676349
## X110m.hurdle 6.929502e-06 0.1369534023 6.963371e-05 0.026166378 0.0002442942
library("corrplot")
corrplot(var$cos2, is.corr=FALSE)

fviz_cos2(res.pca, choice = "var", axes = 1:2)

Selain itu, kualitas representasi variabel dapat ditampilkan pada peta faktor, di mana nilai cos2 berbeda oleh warna gradien. Variabel dengan nilai cos2 rendah akan diwarnai “darkorchid4”, nilai cos2 sedang - “gold”, nilai cos2 tinggi - “darkorange”. Variabel yang berkolerasi positif dikelompokkan bersama-sama, sedangkan variabel yang berkolerasi negatif ditempatkan di sisi berlawanan dari asal plot. Jarak antara variabel dan asal mengukur kualitas variabel pada peta faktor. Variabel yang jauh dari asal direpresentasikan dengan baik pada peta faktor.

fviz_pca_var(res.pca,
             col.var = "cos2", # Color by the quality of representation
             gradient.cols = c("darkorchid4", "gold", "darkorange"),
             repel = TRUE
             )

X100m, Long.jump dan Pole.vault memiliki nilai cos2 yang sangat tinggi, yang menunjukkan representasi variabel yang baik pada komponen utama. Dalam hal ini, variabel ditempatkan dekat dengan lingkaran pada lingkaran korelasi. Javeline memiliki cos2 terendah, yang menunjukkan bahwa variabel tersebut tidak sepenuhnya direpresentasikan oleh PC. Dalam hal ini, variabel tersebut dekat dengan pusat lingkaran - variabel tersebut kurang penting untuk komponen pertama.

Contrib adalah kontribusi variabel. Fungsi fviz_contrib() digunakan untuk menggambar diagram batang kontribusi variabel untuk dimensi paling signifikan, yaitu PC1 dan PC2.

# Contributions of variables to PC1
a<-fviz_contrib(res.pca, choice = "var", axes = 1)
# Contributions of variables to PC2
b<-fviz_contrib(res.pca, choice = "var", axes = 2)
grid.arrange(a,b, ncol=2, top='Contribution of the variables to the first two PCs')

Garis putus-putus merah pada grafik di atas menunjukkan kontribusi rata-rata yang diharapkan. Untuk suatu komponen tertentu, variabel dengan kontribusi yang melebihi batas ini dianggap penting dalam memberikan kontribusi pada komponen tersebut. Dapat dilihat bahwa variabel X100m, Long.jump, dan Pole.vault memberikan kontribusi paling banyak pada kedua dimensi.

PCA Results for Individuals

Hasilnya, untuk individu (atlet) akan diekstraksi menggunakan fungsi get_pca_ind(). Sama seperti variabel, ini memberikan daftar matriks yang berisi semua hasil untuk individu (koordinat, korelasi antara individu dan sumbu, kosinus persegi, dan kontribusi). Untuk individu, analisis akan difokuskan pada cos2 dan kontribusi individu ke dua komponen utama pertama (PC1 dan PC2).

ind <- get_pca_ind(res.pca)
ind
## Principal Component Analysis Results for individuals
##  ===================================================
##   Name       Description                       
## 1 "$coord"   "Coordinates for the individuals" 
## 2 "$cos2"    "Cos2 for the individuals"        
## 3 "$contrib" "contributions of the individuals"
fviz_pca_ind(res.pca,
             col.ind = "cos2", # Color by the quality of representation
             gradient.cols = c("darkorchid4", "gold", "darkorange"),
             repel = TRUE
             )

BOURGUIGNON, Macey, Karpov dan Clay memiliki nilai cos2 yang sangat tinggi, yang mengimplikasikan representasi yang baik dari individu-individu tersebut pada komponen utama - mereka ditempatkan dekat dengan lingkaran korelasi. YURKOV, Pogorelov, Barras dan McMULLEN memiliki nilai cos2 yang paling rendah, yang menunjukkan bahwa mereka tidak direpresentasikan dengan baik oleh komponen utama - mereka dekat dengan pusat lingkaran.

# Total contribution on PC1 and PC2
fviz_contrib(res.pca, choice = "ind", axes = 1:2)

Berdasarkan posisi garis putus-putus merah (kontribusi rata-rata), individu BOURGUIGNON, Karpov, dan Clay memberikan kontribusi terbesar untuk kedua dimensi.

Ringkasan analisis PCA di atas untuk variabel (cabang olahraga) dan individu (atlet) ditampilkan dalam plot korelasi (autoplot) dari package ggfortify dengan referensi dimensi 1 dan 2.

autoplot(res.pca, loadings=TRUE, loadings.colour='darkorchid4', loadings.label=TRUE, loadings.label.size=3)

Final Results and Analysis

Tujuan dari proyek ini adalah untuk membedakan atlet-atlet mana yang mendapatkan hasil terbaik di antara seluruh kelompok. Sejauh ini, Principal Component Analysis (PCA) telah dilakukan untuk variabel (cabang olahraga) dan individu (atlet) dengan menggunakan perhitungan prcomp(), ekstraksi eigenvalue, cosinus kuadrat, dan kontribusi. Mengingat PC yang dihitung, berikutnya akan dirangkum ke dalam kelompok-kelompok melalui metode pengelompokan k-means. Untuk tujuan itu, akan digunakan fungsi eclust() dengan asumsi 4 kelompok dan autoplot() untuk observasi 2D.

kmeans<-eclust(decathlon2.active, k=4)

autoplot(res.pca, data=kmeans, colour="cluster")

Klaster yang terdekat dengan asal (biru) menunjukkan atlet dengan hasil terbaik dalam cabang olahraga. Klaster ungu menunjukkan atlet dengan hasil rata-rata, sedangkan klaster lainnya (hijau dan merah) sesuai dengan atlet terburuk.

Ilustrasi 2

The objective of this study is to understand how the variation in food consumption among a number of industrialized countries is related to culture and tradition and hence find the similarities and dissimilarities among the countries. Hence data have been collected on 20 variables and 16 countries. The data show how many percent of households use 20 food items regularly.

Library yang digunakan:

library(FactoMineR)
library(factoextra)
foods <- read.csv("D:\\SSD IPB 2021\\#DIGITALENT KOMINFO\\Modul 3\\europe-foods.csv", header=TRUE, sep=";")
head(foods)
summary(foods)
##    Country           GrainCoffee      InstCoffee         Tea       
##  Length:16          Min.   :27.00   Min.   :10.00   Min.   :40.00  
##  Class :character   1st Qu.:71.50   1st Qu.:17.00   1st Qu.:62.50  
##  Mode  :character   Median :89.00   Median :39.00   Median :84.50  
##                     Mean   :78.56   Mean   :39.25   Mean   :78.50  
##                     3rd Qu.:96.00   3rd Qu.:54.25   3rd Qu.:92.25  
##                     Max.   :98.00   Max.   :86.00   Max.   :99.00  
##      Sweat            Bisc           PaSoup          TiSoup     
##  Min.   : 0.00   Min.   : 0.00   Min.   :27.00   Min.   : 1.00  
##  1st Qu.: 9.25   1st Qu.:49.00   1st Qu.:36.25   1st Qu.: 3.75  
##  Median :17.00   Median :62.00   Median :47.00   Median :11.50  
##  Mean   :16.88   Mean   :56.88   Mean   :49.00   Mean   :18.31  
##  3rd Qu.:25.75   3rd Qu.:74.50   3rd Qu.:58.00   3rd Qu.:20.00  
##  Max.   :35.00   Max.   :91.00   Max.   :75.00   Max.   :76.00  
##     InPotat         FroFish          FroVeg          Apples     
##  Min.   : 2.00   Min.   : 4.00   Min.   : 2.00   Min.   :22.00  
##  1st Qu.: 6.50   1st Qu.:13.75   1st Qu.: 6.50   1st Qu.:56.75  
##  Median :10.00   Median :19.50   Median :13.00   Median :71.50  
##  Mean   :12.75   Mean   :21.88   Mean   :15.88   Mean   :66.81  
##  3rd Qu.:17.00   3rd Qu.:26.25   3rd Qu.:21.50   3rd Qu.:81.00  
##  Max.   :39.00   Max.   :54.00   Max.   :45.00   Max.   :87.00  
##       Orag          TiFruit           Jam            Garlic     
##  Min.   :42.00   Min.   : 8.00   Min.   :16.00   Min.   : 5.00  
##  1st Qu.:65.25   1st Qu.:28.00   1st Qu.:40.25   1st Qu.:11.00  
##  Median :72.00   Median :43.00   Median :54.00   Median :25.50  
##  Mean   :70.50   Mean   :41.94   Mean   :55.19   Mean   :42.31  
##  3rd Qu.:77.25   3rd Qu.:50.75   3rd Qu.:72.00   3rd Qu.:81.50  
##  Max.   :94.00   Max.   :89.00   Max.   :91.00   Max.   :91.00  
##      Butter        Margarine        OliveOil          Youg      
##  Min.   :31.00   Min.   :24.00   Min.   :13.00   Min.   : 0.00  
##  1st Qu.:64.50   1st Qu.:47.75   1st Qu.:29.50   1st Qu.: 4.50  
##  Median :83.00   Median :79.00   Median :52.50   Median :12.00  
##  Mean   :75.81   Mean   :69.12   Mean   :54.19   Mean   :19.25  
##  3rd Qu.:94.00   3rd Qu.:94.00   3rd Qu.:83.25   3rd Qu.:30.25  
##  Max.   :97.00   Max.   :97.00   Max.   :94.00   Max.   :57.00  
##    CrispBread   
##  Min.   : 3.00  
##  1st Qu.:10.50  
##  Median :21.00  
##  Mean   :27.75  
##  3rd Qu.:31.00  
##  Max.   :93.00
data <- foods[,2:21]
head(data)
res.pca <- PCA(data,  graph = FALSE)

Extract and visualize eigenvalues/variances

# Extract eigenvalues/variances
get_eig(res.pca)
##         eigenvalue variance.percent cumulative.variance.percent
## Dim.1  6.089489044      30.44744522                    30.44745
## Dim.2  4.200788913      21.00394456                    51.45139
## Dim.3  2.741558869      13.70779434                    65.15918
## Dim.4  1.655275376       8.27637688                    73.43556
## Dim.5  1.313907255       6.56953627                    80.00510
## Dim.6  1.059286909       5.29643454                    85.30153
## Dim.7  0.932493918       4.66246959                    89.96400
## Dim.8  0.608434287       3.04217144                    93.00617
## Dim.9  0.498367970       2.49183985                    95.49801
## Dim.10 0.347698236       1.73849118                    97.23650
## Dim.11 0.238676726       1.19338363                    98.42989
## Dim.12 0.187997926       0.93998963                    99.36988
## Dim.13 0.088138254       0.44069127                    99.81057
## Dim.14 0.034159048       0.17079524                    99.98136
## Dim.15 0.003727269       0.01863635                   100.00000
# Visualize eigenvalues/variances
fviz_screeplot(res.pca, addlabels = TRUE, ylim = c(0, 50))

Extract and visualize results for variables

#Extract the results for variables
var <- get_pca_var(res.pca)
var
## Principal Component Analysis Results for variables
##  ===================================================
##   Name       Description                                    
## 1 "$coord"   "Coordinates for the variables"                
## 2 "$cor"     "Correlations between variables and dimensions"
## 3 "$cos2"    "Cos2 for the variables"                       
## 4 "$contrib" "contributions of the variables"
# Coordinates of variables 
head(var$coord)
##                  Dim.1       Dim.2       Dim.3       Dim.4       Dim.5
## GrainCoffee 0.08462531 -0.37497189  0.77654661 -0.32214968 -0.15882230
## InstCoffee  0.43220397  0.77221047 -0.11468668  0.16274093 -0.01383729
## Tea         0.73632709 -0.09367762 -0.37061761 -0.05946702 -0.11048959
## Sweat       0.84654514 -0.22357573  0.07440975 -0.18022163 -0.18248437
## Bisc        0.20154338  0.64940032 -0.12289819 -0.48598295  0.33164409
## PaSoup      0.42609867  0.65974980 -0.02080453  0.26826895 -0.17614700
# Contribution of variables
head(var$contrib)
##                  Dim.1      Dim.2       Dim.3      Dim.4      Dim.5
## GrainCoffee  0.1176033  3.3470837 21.99568419  6.2696768 1.91980992
## InstCoffee   3.0675854 14.1951671  0.47976484  1.6000123 0.01457261
## Tea          8.9034987  0.2089011  5.01019382  0.2136397 0.92913331
## Sweat       11.7684532  1.1899219  0.20195850  1.9622014 2.53446686
## Bisc         0.6670467 10.0390851  0.55092616 14.2682860 8.37104769
## PaSoup       2.9815322 10.3616202  0.01578768  4.3478100 2.36148822
# Graph of variables: default plot 
fviz_pca_var(res.pca, col.var = "black")

# Control variable colors using their contributions
fviz_pca_var(res.pca, col.var="contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

# Avoid text overlapping

Variable contributions to the principal axes

# Contributions of variables to PC1 
fviz_contrib(res.pca, choice = "var", axes = 1, top = 10)

# Contributions of variables to PC2 
fviz_contrib(res.pca, choice = "var", axes = 2, top = 10)

Extract and visualize results for individuals

# Extract the results for individuals 
ind <- get_pca_ind(res.pca) 
ind
## Principal Component Analysis Results for individuals
##  ===================================================
##   Name       Description                       
## 1 "$coord"   "Coordinates for the individuals" 
## 2 "$cos2"    "Cos2 for the individuals"        
## 3 "$contrib" "contributions of the individuals"
# Coordinates of individuals 
head(ind$coord)
##        Dim.1     Dim.2     Dim.3       Dim.4      Dim.5
## 1  1.4757722 0.2019389 0.6443602  0.06082328  0.4715228
## 2 -3.7332198 0.3338226 0.3429038  0.71477204  0.4226966
## 3 -0.7447707 2.3602125 1.9564916  0.49491904 -0.1247544
## 4  2.8456819 1.8755691 0.4051942 -0.82210461 -3.3841151
## 5 -0.8865086 0.9712989 0.7476744 -0.82236313  0.9776365
## 6  1.5379975 2.1282605 2.6854238 -1.07808030  1.2653338
# Graph of individuals 
# 1. Use repel = TRUE to avoid overplotting 
# 2. Control automatically the color of individuals using the cos2 
    # cos2 = the quality of the individuals on the factor map 
    # Use points only 
# 3. Use gradient color 
fviz_pca_ind(res.pca, col.ind = "cos2", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

# Avoid text overlapping (slow if many points) )
# Biplot of individuals and variables 
fviz_pca_biplot(res.pca, repel = TRUE)

Referensi

Dito, G. A. 2022. Reduksi Dimensi [Slide Kuliah STA1582 Pembelajaran Mesin Statistik IPB University]

Kurnia, A. 2022. Statistical Machine Learning [Slide Kuliah STA1582 Pembelajaran Mesin Statistik IPB University]

Chaitanyanarava. 2020. A Complete Guide On Dimensionality Reduction. [diakses 2023 Sep 10]; https://medium.com/analytics-vidhya/a-complete-guide-on-dimensionality-reduction-62d9698013d2

Peixeiro, M. 2019. The Complete Guide to Unsupervised Learning. [diakses 2023 Sep 10]; https://towardsdatascience.com/the-complete-guide-to-unsupervised-learning-ecf8b676f2af

Sadik, K. 2022. Konsep Dasar Pembelajaran Mesin Statistika [Slide Kuliah STA1582 Pembelajaran Mesin Statistika IPB University]

Szczęsna, K. 2022. Principal Component Analysis (PCA). [diakses 2023 Sep 10]; https://rpubs.com/KarolinaSzczesna/862710