Principal Component Analysis (PCA)

Author

Muhammad Syafiq

Dataset

library(psych)
library(FactoMineR)
library(factoextra)
library(corrplot)

data <- data.frame(
  Tinggi = c(120,130,128,150,145,160,155,170,165,175),
  Diameter = c(2.1,2.4,2.3,2.8,2.7,3.0,3.1,3.2,3.2,3.4),
  Daun = c(10,12,11,15,14,16,17,18,17,19),
  Nitrogen = c(2.1,2.3,2.2,2.7,2.8,3.0,3.1,3.2,3.3,3.5),
  Fosfor = c(0.21,0.25,0.24,0.30,0.31,0.35,0.36,0.38,0.39,0.40)
)

head(data)
  Tinggi Diameter Daun Nitrogen Fosfor
1    120      2.1   10      2.1   0.21
2    130      2.4   12      2.3   0.25
3    128      2.3   11      2.2   0.24
4    150      2.8   15      2.7   0.30
5    145      2.7   14      2.8   0.31
6    160      3.0   16      3.0   0.35

Mengapa Perlu Korelasi?
PCA bertujuan meringkas informasi dari variabel-variabel yang saling berkorelasi
Apabila seluruh variabel tidak berkorelasi, maka PCA tidak memberikan manfaat yang berarti karena setiap variabel sudah membawa informasi yang berbeda.

Oleh karena itu, sebelum melakukan PCA perlu dilakukan:
1. Pemeriksaan matriks korelasi.
2. Uji KMO.
3. Uji Bartlett.

Korelasi

Mengetahui hubungan antar variabel. Variabel yang memiliki korelasi cukup tinggi menunjukkan adanya informasi yang saling tumpang tindih (redundansi), sehingga PCA dapat digunakan untuk mereduksi dimensi.

cor(data)
            Tinggi  Diameter      Daun  Nitrogen    Fosfor
Tinggi   1.0000000 0.9881955 0.9863588 0.9791041 0.9819278
Diameter 0.9881955 1.0000000 0.9958455 0.9903280 0.9925485
Daun     0.9863588 0.9958455 1.0000000 0.9816959 0.9822125
Nitrogen 0.9791041 0.9903280 0.9816959 1.0000000 0.9940158
Fosfor   0.9819278 0.9925485 0.9822125 0.9940158 1.0000000
corrplot(
  cor(data),
  method = "color",
  type = "upper",
  addCoef.col = "white"
)

Uji KMO

Mengukur kecukupan sampel (*sampling adequacy*) sebelum dilakukan PCA. Semakin besar nilai KMO, semakin baik struktur korelasi data untuk dianalisis menggunakan PCA.

KMO(data)
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = data)
Overall MSA =  0.85
MSA for each item = 
  Tinggi Diameter     Daun Nitrogen   Fosfor 
    0.98     0.78     0.79     0.92     0.80 

|Nilai KMO|Interpretasi|
|>0.90|Sangat Baik|
|0.80–0.89|Baik|
|0.70–0.79|Cukup|
|0.60–0.69|Layak|
|0.50–0.59|Kurang Layak|
|<0.50|Tidak Layak|

Uji Bartlett

Menguji apakah terdapat korelasi yang signifikan antar variabel.
Hipotesis:
H₀ : Tidak terdapat korelasi antar variabel.
H₁ : Terdapat korelasi antar variabel.

cortest.bartlett(
  cor(data),
  n = nrow(data)
)
$chisq
[1] 115.0644

$p.value
[1] 5.060934e-20

$df
[1] 10

|p-value|Keputusan|
|<0,05|Layak dilakukan PCA|
|≥0,05|Tidak disarankan menggunakan PCA|

Setelah data dinyatakan layak dilakukan PCA melalui uji Korelasi, KMO, dan Bartlett, langkah berikutnya adalah melakukan Principal Component Analysis (PCA).

PCA

pca <- prcomp(
  data,
  center = TRUE,
  scale. = TRUE
)

Keterangan
- center = TRUE : setiap variabel dikurangi nilai rata-ratanya sehingga memiliki rata-rata nol.
- scale. = TRUE : setiap variabel dinormalisasi sehingga memiliki simpangan baku satu.

Karena setiap variabel memiliki satuan yang berbeda (cm, mm, %, dll.), maka PCA hampir selalu menggunakan data yang telah distandarisasi.

Eigenvalue, Proportion, dan Cumulative

Menentukan jumlah Principal Component (PC) yang akan digunakan.

library(factoextra)

eig <- get_eigenvalue(pca)

eig
       eigenvalue variance.percent cumulative.variance.percent
Dim.1 4.948914311      98.97828623                    98.97829
Dim.2 0.028026937       0.56053873                    99.53882
Dim.3 0.015356370       0.30712741                    99.84595
Dim.4 0.006131783       0.12263565                    99.96859
Dim.5 0.001570599       0.03141198                   100.00000

Eigenvalue
Eigenvalue menunjukkan besarnya variasi yang dapat dijelaskan oleh setiap Principal Component.
Semakin besar eigenvalue, semakin penting komponen tersebut.

Proportion (Variance Percent)

Variance Percent menunjukkan persentase variasi data yang dapat dijelaskan oleh setiap komponen.

Cumulative

Cumulative menunjukkan total variasi yang berhasil dijelaskan secara bertahap.

Menentukan Jumlah Komponen
Beberapa pedoman yang umum digunakan adalah:
1. Eigenvalue > 1 (Kaiser Criterion)
2. Cumulative Variance ≥70%
3. Scree Plot

fviz_eig(
  pca,
  addlabels = TRUE,
  ylim = c(0,100)
)

Grafik ini disebut Scree Plot.
Scree Plot membantu menentukan jumlah Principal Component yang dipertahankan.

Factor Loading

Menentukan variabel mana yang paling berkontribusi terhadap setiap Principal Component.

var <- get_pca_var(pca)

var$coord
             Dim.1       Dim.2       Dim.3        Dim.4         Dim.5
Tinggi   0.9921916 -0.08581421  0.09023818 -0.006981201 -0.0004278133
Diameter 0.9985031 -0.01274961 -0.03871537  0.017898078 -0.0317761517
Daun     0.9943188 -0.07421489 -0.07329664 -0.008296554  0.0195211795
Nitrogen 0.9941241  0.09330483  0.00406935 -0.054723512 -0.0005862211
Fosfor   0.9952433  0.07928850  0.01804448  0.051953909  0.0133892492

|Nilai Loading|Interpretasi|
|>0,70|Sangat kuat|
|0,50–0,70|Kuat|
|0,30–0,49|Sedang|
|<0,30|Lemah|

Dalam PCA, tanda positif (+) atau negatif (-) bukan menunjukkan baik atau buruk, tetapi hanya menunjukkan arah hubungan.

Individual PCA (Score Plot)

Score Plot digunakan untuk melihat posisi setiap objek penelitian berdasarkan Principal Component yang terbentuk.

fviz_pca_ind(
  pca,
  repel = TRUE
)

Semakin dekat posisi dua titik, semakin mirip karakteristik kedua objek tersebut.
Sebaliknya, semakin jauh posisi dua titik, semakin besar perbedaan karakteristiknya.

Variable PCA (Loading Plot)

Loading Plot digunakan untuk melihat hubungan antar variabel.
Pada grafik ini, setiap panah mewakili satu variabel.

fviz_pca_var(
  pca,
  repel = TRUE
)

Cara Membaca Loading Plot
Hubungan antar variabel dapat dilihat berdasarkan sudut antar panah.

Sudut kecil (<90°)
Menunjukkan korelasi positif.

Sudut sekitar 90°
Menunjukkan hubungan yang sangat lemah atau hampir tidak berkorelasi.

Sudut mendekati 180°
Menunjukkan korelasi negatif.

Panjang Panah
Semakin panjang panah, semakin baik variabel tersebut dijelaskan oleh Principal Component.
Sebaliknya, panah yang pendek menunjukkan bahwa variabel kurang terwakili oleh dua komponen pertama.

Biplot PCA

Biplot merupakan gabungan antara
- Score Plot
- Loading Plot
Dalam satu grafik akan ditampilkan
- titik = objek penelitian
- panah = variabel
Biplot merupakan visualisasi PCA yang paling banyak digunakan dalam publikasi ilmiah.

fviz_pca_biplot(
  pca,
  repel = TRUE
)

Cara Membaca Biplot
1. Hubungan Antar Variabel
Dilihat dari sudut antar panah.
- Sudut kecil → korelasi positif.
- Sudut 90° → tidak berkorelasi.
- Sudut 180° → korelasi negatif.


2. Hubungan Antar Objek
Dilihat dari jarak antar titik.
Semakin dekat

semakin mirip.
Semakin jauh

semakin berbeda.

3. Hubungan Objek dengan Variabel
Objek yang berada searah dengan suatu panah cenderung memiliki nilai tinggi pada variabel tersebut.

ANOVA

- Main Plot : 5 dosis Hg
- Sub Plot : 25 varietas padi
- Ulangan : 3 kali

Perlu dipahami bahwa ANOVA memiliki beberapa asumsi.

1. Residual berdistribusi normal.
2. Residual memiliki ragam yang homogen.
3. Observasi saling independen.

Perhatikan bahwa yang diuji adalah residual, bukan data mentah.

Selain p-value perlu melihat

- Histogram
- QQ Plot

Untuk rancangan Split Plot, analisis yang lebih tepat adalah menggunakan struktur galat sesuai rancangan.

model <- aov(
Respon ~ Hg*Varietas +
Error(Ulangan/Hg),
data=data
)

atau

library(lme4)
model <- lmer(
Respon ~ Hg*Varietas +
(1|Ulangan) +
(1|Ulangan:Hg),
data=data
)

Kapan Menggunakan Linear Mixed Model?

Linear Mixed Model (LMM) disarankan apabila

- terdapat efek acak,
- rancangan bertingkat,
- data tidak seimbang,
- terdapat pelanggaran asumsi ringan.

Opsi lain: Generalized Linear Mixed Model atau pendekatan non parametrik