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:
- 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).
- 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:
Mengurangi dimensi variabel: PCA membantu mengurangi dimensi variabel dalam dataset yang kompleks, sehingga dapat mempercepat analisis data dan membuat hasil yang lebih mudah dipahami.
Meningkatkan efisiensi: Dengan menghilangkan variabel yang tidak penting dan mengidentifikasi hubungan antara variabel, PCA dapat meningkatkan efisiensi dan akurasi analisis data.
Meningkatkan pemahaman pola dalam data: PCA dapat membantu meningkatkan pemahaman pola dalam data yang kompleks, sehingga memungkinkan pengambilan keputusan yang lebih tepat dan efektif.
Dapat digunakan untuk berbagai jenis data: PCA dapat digunakan untuk berbagai jenis data, termasuk data numerik, data kategori, dan data ordinal.
Kekurangan:
Ketergantungan pada data: PCA sangat bergantung pada data yang dianalisis dan mungkin tidak memberikan hasil yang optimal jika data tidak berdistribusi normal.
Interpretasi yang sulit: Hasil PCA dapat sulit diinterpretasikan karena komponen utama tidak selalu memiliki arti yang jelas dalam konteks data asli.
Kerugian informasi: PCA dapat menyebabkan kerugian informasi yang signifikan jika komponen utama yang dihasilkan tidak dapat menjelaskan sebagian besar variasi dalam data.
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:
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.
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.
Incremental PCA: Incremental PCA digunakan untuk menghitung komponen utama dari dataset yang sangat besar dengan cara memproses bagian-bagian data secara bertahap.
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.
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.
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:
Variabel: Variabel adalah nilai yang diamati atau diukur dalam dataset. Dalam PCA, variabel ini dapat berupa atribut, fitur, atau dimensi dari dataset.
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.
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.
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.
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.
Proyeksi: Proyeksi menggambarkan representasi data dalam ruang baru yang dibentuk oleh komponen utama. Proyeksi ini sering digunakan untuk memvisualisasikan pola dalam data yang kompleks.
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.
Variance explained atau varian yang dijelaskan: Persentase varians data yang dapat dijelaskan oleh komponen utama.
Scree plot: Grafik yang menunjukkan varians yang dijelaskan oleh setiap komponen utama.
Algoritma PCA
Berikut adalah langkah-langkah algoritma PCA secara umum:
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.
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.
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.
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.
Mengurutkan eigenvalues: Urutkan eigenvalues dalam urutan menurun sehingga komponen utama dengan varians terbesar muncul pertama.
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.
Menghitung faktor beban: Hitung faktor beban (loadings) untuk setiap variabel, yang merupakan koefisien linear yang menghubungkan variabel dengan setiap komponen utama.
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.
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.
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.
Visualisasi data: Visualisasikan data dalam ruang dimensi yang lebih rendah untuk memahami pola dan hubungan yang terdapat dalam data.
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 detikLong.jump- hasil lompat jauh diukur dalam meterShot.put- hasil lempar lembing diukur dalam meterHigh.jump- hasil lompat tinggi diukur dalam meterX400m- hasil lomba 400 meter diukur dalam detikX110m.hurdle- hasil lomba gawang 110 meter diukur dalam detikDiscus- hasil lempar cakram diukur dalam meterPole.vault- hasil lompat tongkat diukur dalam meterJaveline- hasil lempar lembing diukur dalam meterX1500m- 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