Notes Theme: - PCA: united (default di RMarkdown)

Library:

> # install.packages("knitr")
> # install.packages("rmarkdown")
> # install.packages("prettydoc")
> # install.packages("equatiomatic")

1 PENDAHULUAN

1.1 Latar Belakang

Analisis multivariat adalah pendekatan statistik yang digunakan untuk memahami hubungan kompleks antara banyak variabel dalam satu set data. Saat bekerja dengan data yang memiliki banyak dimensi atau atribut, seperti data dalam ilmu ekonomi, ilmu sosial, atau analisis bisnis, penting untuk mengidentifikasi pola-pola yang mendasari, mengurangi kompleksitas data, dan memahami kontribusi masing-masing variabel terhadap variasi total. Dalam konteks ini, Analisis Komponen Utama (PCA) muncul sebagai alat yang sangat berguna.

1.2 Tinjauan Pustaka

1.2.1 Analisis PCA

PCA (Principal Component Analysis) adalah salah satu teknik paling umum dalam analisis multivariat yang bertujuan untuk mengurangi dimensi data dengan memproyeksikan variabel-variabel asli ke dalam sistem koordinat baru yang disebut komponen utama. Dengan demikian, PCA membantu mengidentifikasi dimensi-dimensi yang paling penting dalam data dan mengurangi kerumitan analisis multidimensi, memungkinkan kita untuk mengungkap pola-pola yang mendasari data dengan lebih mudah dan efisien. Teknik ini memiliki beragam aplikasi, termasuk dalam analisis data eksploratori, pengelompokan data, dan pengurangan dimensi dalam machine learning.

1.3 Data

Data yang diambil merupakan dataset cereal yang diperoleh dari kaggle. Dataset ini berisikan produk-produk sereal disertai dengan masing-masing kalori, protein, lemak, sodium, fiber, carbo, dan gula, potassium, vitamin, shelf, berat, cups, dan rating (13 variabel).

2 SOURCE CODE

2.1 Library yang Dibutuhkan

> # Library
> library(factoextra)
> library(ggcorrplot)

2.2 Import Data

> # Setting directory
> setwd("F:/College/anmul/praktikum")
> # Mengeksplor data
> data.cereal <- read.csv("cereal.csv")
> str(data.cereal)
'data.frame':   77 obs. of  16 variables:
 $ name    : chr  "100% Bran" "100% Natural Bran" "All-Bran" "All-Bran with Extra Fiber" ...
 $ mfr     : chr  "N" "Q" "K" "K" ...
 $ type    : chr  "C" "C" "C" "C" ...
 $ calories: int  70 120 70 50 110 110 110 130 90 90 ...
 $ protein : int  4 3 4 4 2 2 2 3 2 3 ...
 $ fat     : int  1 5 1 0 2 2 0 2 1 0 ...
 $ sodium  : int  130 15 260 140 200 180 125 210 200 210 ...
 $ fiber   : num  10 2 9 14 1 1.5 1 2 4 5 ...
 $ carbo   : num  5 8 7 8 14 10.5 11 18 15 13 ...
 $ sugars  : int  6 8 5 0 8 10 14 8 6 5 ...
 $ potass  : int  280 135 320 330 -1 70 30 100 125 190 ...
 $ vitamins: int  25 0 25 25 25 25 25 25 25 25 ...
 $ shelf   : int  3 3 3 3 3 1 2 3 1 3 ...
 $ weight  : num  1 1 1 1 1 1 1 1.33 1 1 ...
 $ cups    : num  0.33 1 0.33 0.5 0.75 0.75 1 0.75 0.67 0.67 ...
 $ rating  : num  68.4 34 59.4 93.7 34.4 ...
> colSums(is.na(data.cereal)) # Memeriksa missing values
    name      mfr     type calories  protein      fat   sodium    fiber 
       0        0        0        0        0        0        0        0 
   carbo   sugars   potass vitamins    shelf   weight     cups   rating 
       0        0        0        0        0        0        0        0 
> View(data.cereal)
> # Normalisasi data
> data.cereal <- data.cereal[,-c(1:3)]
> View(data.cereal)

2.3 Analisis Korelasi

> cor(data.cereal)
            calories      protein          fat       sodium       fiber
calories  1.00000000  0.019066068  0.498609814  0.300649227 -0.29341275
protein   0.01906607  1.000000000  0.208430990 -0.054674348  0.50033004
fat       0.49860981  0.208430990  1.000000000 -0.005407464  0.01671924
sodium    0.30064923 -0.054674348 -0.005407464  1.000000000 -0.07067501
fiber    -0.29341275  0.500330043  0.016719237 -0.070675009  1.00000000
carbo     0.25068091 -0.130863648 -0.318043492  0.355983473 -0.35608274
sugars    0.56234029 -0.329141777  0.270819175  0.101451381 -0.14120539
potass   -0.06660886  0.549407400  0.193278602 -0.032603467  0.90337367
vitamins  0.26535630  0.007335371 -0.031156266  0.361476688 -0.03224268
shelf     0.09723437  0.133864789  0.263691089 -0.069719015  0.29753906
weight    0.69609108  0.216158486  0.214625033  0.308576451  0.24722563
cups      0.08719955 -0.244469158 -0.175892142  0.119664615 -0.51306093
rating   -0.68937603  0.470618465 -0.409283660 -0.401295204  0.58416042
               carbo      sugars      potass     vitamins       shelf
calories  0.25068091  0.56234029 -0.06660886  0.265356298  0.09723437
protein  -0.13086365 -0.32914178  0.54940740  0.007335371  0.13386479
fat      -0.31804349  0.27081918  0.19327860 -0.031156266  0.26369109
sodium    0.35598347  0.10145138 -0.03260347  0.361476688 -0.06971902
fiber    -0.35608274 -0.14120539  0.90337367 -0.032242679  0.29753906
carbo     1.00000000 -0.33166538 -0.34968522  0.258147549 -0.10179030
sugars   -0.33166538  1.00000000  0.02169581  0.125137260  0.10043789
potass   -0.34968522  0.02169581  1.00000000  0.020698687  0.36066341
vitamins  0.25814755  0.12513726  0.02069869  1.000000000  0.29926167
shelf    -0.10179030  0.10043789  0.36066341  0.299261665  1.00000000
weight    0.13513642  0.45064760  0.41630315  0.320324059  0.19076197
cups      0.36393247 -0.03235762 -0.49519495  0.128404543 -0.33526876
rating    0.05205466 -0.75967466  0.38016537 -0.240543611  0.02515882
             weight        cups      rating
calories  0.6960911  0.08719955 -0.68937603
protein   0.2161585 -0.24446916  0.47061846
fat       0.2146250 -0.17589214 -0.40928366
sodium    0.3085765  0.11966461 -0.40129520
fiber     0.2472256 -0.51306093  0.58416042
carbo     0.1351364  0.36393247  0.05205466
sugars    0.4506476 -0.03235762 -0.75967466
potass    0.4163032 -0.49519495  0.38016537
vitamins  0.3203241  0.12840454 -0.24054361
shelf     0.1907620 -0.33526876  0.02515882
weight    1.0000000 -0.19958272 -0.29812398
cups     -0.1995827  1.00000000 -0.20316006
rating   -0.2981240 -0.20316006  1.00000000
> ggcorrplot(cor(data.cereal))

> library(rmarkdown)
> paged_table(as.data.frame(x))
Error in as.data.frame(x): object 'x' not found

2.4 Analisis PCA

> pca <- prcomp(data.cereal, center = TRUE,scale. = TRUE)
> pca$rotation
                 PC1        PC2         PC3          PC4         PC5
calories  0.33325770  0.3540139 -0.07308253  0.310355769  0.10011713
protein  -0.30350996  0.1840913 -0.21402139  0.487982044  0.18592601
fat       0.06117068  0.3334252  0.27702228  0.364438411  0.44961181
sodium    0.21498742  0.1289957 -0.39268086 -0.023246751 -0.30711733
fiber    -0.42768885  0.2366169 -0.10160606 -0.093597811 -0.24394397
carbo     0.19454080 -0.1558489 -0.55656859  0.111598513  0.12697220
sugars    0.26823424  0.3185932  0.31783521 -0.203435176 -0.29985232
potass   -0.35969408  0.3494167 -0.08431129 -0.007793219 -0.18777422
vitamins  0.15038361  0.1745444 -0.40671499 -0.438602292  0.22243824
shelf    -0.11360533  0.2795025 -0.04010916 -0.483363806  0.57904983
weight    0.09400496  0.4417863 -0.24306975  0.119565685 -0.25454786
cups      0.27161796 -0.2508459 -0.14300053  0.160753010  0.08103983
rating   -0.45456749 -0.2059514 -0.20769280  0.058186320  0.04467135
                 PC6         PC7         PC8         PC9        PC10
calories -0.26460458  0.01498978 -0.02281052  0.01334435 -0.19957001
protein   0.15170567 -0.22719127 -0.32251078  0.54173171 -0.15116767
fat       0.31169592  0.12818669  0.14648175 -0.45797475  0.01304935
sodium    0.62270867  0.38210484  0.17939260  0.23312260  0.04240406
fiber     0.07240825 -0.08258368  0.24298629 -0.22599391 -0.09908523
carbo    -0.35737318  0.27484150  0.19065854 -0.16580913 -0.41780268
sugars   -0.14064192 -0.22842387  0.04051536  0.22755181 -0.47283223
potass    0.04174594 -0.13336127  0.28351947 -0.18083652 -0.24633333
vitamins  0.22240340 -0.38321224 -0.47879609 -0.32410564 -0.07167993
shelf    -0.12424005  0.13697250  0.35305822  0.40528584  0.11986130
weight   -0.38496596 -0.05973177 -0.02919860 -0.04510871  0.65471082
cups      0.13621347 -0.67930809  0.55537769  0.05698475  0.13237275
rating   -0.18951565 -0.05255890  0.03489036 -0.06805101 -0.03241640
                PC11         PC12          PC13
calories  0.28043868  0.640419468 -2.288634e-01
protein  -0.03161281 -0.154300238  1.889853e-01
fat       0.05426156 -0.342665063 -8.977980e-02
sodium    0.08437340 -0.028669463 -2.409229e-01
fiber     0.59848142  0.070600095  4.328289e-01
carbo    -0.09599574 -0.296433152  2.465290e-01
sugars    0.11830639 -0.449901336 -1.699277e-01
potass   -0.66867383  0.222146469 -1.278002e-01
vitamins  0.01591208 -0.003684911 -6.034371e-02
shelf     0.02296900  0.020642042 -1.633608e-09
weight   -0.06087022 -0.266099498 -3.411092e-09
cups      0.03401393  0.007559801  1.692284e-09
rating    0.27592100 -0.178577824 -7.408338e-01
> summary(pca)
Importance of components:
                          PC1    PC2    PC3     PC4     PC5     PC6     PC7
Standard deviation     1.9000 1.7716 1.3479 1.03068 0.98540 0.84803 0.81930
Proportion of Variance 0.2777 0.2414 0.1398 0.08171 0.07469 0.05532 0.05163
Cumulative Proportion  0.2777 0.5191 0.6589 0.74057 0.81526 0.87058 0.92221
                          PC8     PC9    PC10    PC11    PC12      PC13
Standard deviation     0.6707 0.55076 0.36151 0.27035 0.23294 1.473e-08
Proportion of Variance 0.0346 0.02333 0.01005 0.00562 0.00417 0.000e+00
Cumulative Proportion  0.9568 0.98015 0.99020 0.99583 1.00000 1.000e+00
> # Menghitung nilai eigen
> eigen<-eigen(cor(data.cereal))
> eigen$values
 [1] 3.609848e+00 3.138480e+00 1.816736e+00 1.062295e+00 9.710043e-01
 [6] 7.191575e-01 6.712514e-01 4.498496e-01 3.033414e-01 1.306890e-01
[11] 7.308893e-02 5.425909e-02 3.075128e-16

-Hasil pada pca$rotation merupakan koefisien linear yang menghubungkan variabel dengan setiap komponen utama.

-Eigenvalues merepresentasikan jumlah variansi yang dijelaskan oleh masing-masing komponen utama.

2.5 Plot

> # Scree Plot
> fviz_eig(pca, addlabels = TRUE)

> # Kombinasi biplot dan cos2
> fviz_pca_var(pca, col.var = "cos2",
+              gradient.cols = c("black", "orange", "green"),
+              repel = TRUE)

  • Scree Plot

    Scree plot digunakan untuk memvisualisasikan pentingnya setiap komponen utama dan dapat digunakan untuk menentukan jumlah komponen utama yang dapat digunakan. Plot ini menunjukkan eigenvalue dalam kurva menurun, dari yang tertinggi hingga yang terendah.

  • Kombinasi Biplot dan Cos2

    Biplot dapat memvisualisasikan kemiripan dan perbedaan antara sampel, dan juga menunjukkan dampak setiap variabel pada masing-masing komponen utama. Sedangkan Cos2 untuk menentukan sejauh mana setiap variabel direpresentasikan dalam suatu komponen tertentu. Kualitas representasi tersebut disebut Cos2 dan berkaitan dengan kosinus kuadrat.

    Dua hal tersebut dapat digabungkan untuk membuat satu biplot tunggal, dimana variabel dengan skor Cos2 yang serupa akan memiliki warna yang mirip.

3 HASIL DAN PEMBAHASAN

3.1 Visualisasi Matriks Korelasi

> ggcorrplot(cor(data.cereal))

-Semakin mendekati nilai 1, dua variabel tersebut semakin berkorelasi positif (berbanding lurus).

-Semakin mendekati nilai 0, dua variabel tersebut semakin tidak berkorelasi.

-Semakin mendekati nilai 1, dua variabel tersebut semakin berkorelasi negatif (berbanding terbalik).

3.2 Penentuan Banyaknya Komponen Utama

  • Proporsi Kumulatif Varians

    > 
    > summary(pca)
    Importance of components:
                              PC1    PC2    PC3     PC4     PC5     PC6     PC7
    Standard deviation     1.9000 1.7716 1.3479 1.03068 0.98540 0.84803 0.81930
    Proportion of Variance 0.2777 0.2414 0.1398 0.08171 0.07469 0.05532 0.05163
    Cumulative Proportion  0.2777 0.5191 0.6589 0.74057 0.81526 0.87058 0.92221
                              PC8     PC9    PC10    PC11    PC12      PC13
    Standard deviation     0.6707 0.55076 0.36151 0.27035 0.23294 1.473e-08
    Proportion of Variance 0.0346 0.02333 0.01005 0.00562 0.00417 0.000e+00
    Cumulative Proportion  0.9568 0.98015 0.99020 0.99583 1.00000 1.000e+00

    Dari proporsi kumulatif varians, akan diguakan 4 komponen utama karena telah mewakili total keragaman data sebanyak 74%. Proposi keragaman dianggap cukup mewakili total keragaman data jika nilai Proporsi kumulatif variansnya minimal 70%-80%.

  • Nilai Eigen

    > 
    > eigen$values
     [1] 3.609848e+00 3.138480e+00 1.816736e+00 1.062295e+00 9.710043e-01
     [6] 7.191575e-01 6.712514e-01 4.498496e-01 3.033414e-01 1.306890e-01
    [11] 7.308893e-02 5.425909e-02 3.075128e-16

    Penentuan banyaknya komponen utama dapat menggunakan nilai eigen dengan memilih komponen utama yang memiliki nilai eigen ≥1. Pada hasil di atas, 4 komponen utama pertama memiliki nilai eigen ≥1, sehingga digunakan 4 komponen utama.

  • Scree Plot

    > fviz_eig(pca, addlabels = TRUE)

    Pada scree plot, banyaknya komponen utama yang diambil adalah titik dimana sebelum titik tersebut terdapat penurunan yang tajam, dan setelah titik tersebut penurunannya tidak tajam. Dari hasil di atas, titik yang berada pada situasi tersebut adalah titik ke-4. Artinya diambil 4 komponen utama untuk digunakan.

3.3 Kombinasi Linier Komponen Utama

> pca$rotation[,1:4]
                 PC1        PC2         PC3          PC4
calories  0.33325770  0.3540139 -0.07308253  0.310355769
protein  -0.30350996  0.1840913 -0.21402139  0.487982044
fat       0.06117068  0.3334252  0.27702228  0.364438411
sodium    0.21498742  0.1289957 -0.39268086 -0.023246751
fiber    -0.42768885  0.2366169 -0.10160606 -0.093597811
carbo     0.19454080 -0.1558489 -0.55656859  0.111598513
sugars    0.26823424  0.3185932  0.31783521 -0.203435176
potass   -0.35969408  0.3494167 -0.08431129 -0.007793219
vitamins  0.15038361  0.1745444 -0.40671499 -0.438602292
shelf    -0.11360533  0.2795025 -0.04010916 -0.483363806
weight    0.09400496  0.4417863 -0.24306975  0.119565685
cups      0.27161796 -0.2508459 -0.14300053  0.160753010
rating   -0.45456749 -0.2059514 -0.20769280  0.058186320

Nilai masing-masing komponen utama merupakan kombinasi linier dari setiap variabel, dimana koefisiennya seperti pada hasil di atas.

Misalnya untuk komponen utama ke-1:

PC1 = 0.33calories - 0.30protein + 0.06fat + 0.21sodium - 0.43fiber + 0.19carbo + 0.27sugars - 0.36potass + 0.15vitamins - 0.11shelf + 0.09weight + 0.27cups - 0.45ratings

dan begitu seterusnya hingga komponen utama ke-4.

3.4 Plot

> fviz_pca_var(pca, col.var = "cos2",
+              gradient.cols = c("black", "orange", "green"),
+              repel = TRUE)

  • Variabel-variabel yang dikelompokkan bersama masing-masingnya berkorelasi secara positif, seperti variabel fat, weight, vitamins, sugars, calories, dan sodium.

  • Semakin jauh jarak antara variabel dengan asalnya (titik 0.0), semakin baik variabel tersebut direpresentasikan. Contohnya calories, weight, sugars, dan fat memiliki magnitudo yang lebih tinggi dibandingkan dengan vitamins dan sodium. Artinya calories, weight, sugars, dan fat direpresentasikan lebih baik daripada vitamins dan sodium.

  • Variabel yang berkorelasi negatif ditampilkan di sisi yang berlawanan dengan asal biplot.

  • Fiber, potass, calories, dan rating memiliki nilai Cos2 yang tinggi mendekati 1. Protein, weight, sugars dan cup memiliki nilai Cos2 yang sedang di sekitar 0,5. Sedangkan shelf, fat, vitamins, sodium, dan carbo memiliki nilai Cos2 yang rendah mendekati 0.