Principal Component Analysis (PCA) adalah metode statistik yang digunakan untuk mengurangi dimensi dan untuk visualisasi. Salah satu penerapan yang paling penting adalah untuk mengubah sistem koordinat sehingga menjadi sistem koordinat baru yang tidak berkorelasi satu sama lain.

Dalam statistik dan ilmu data, jika variabel-variabel saling berkorelasi, maka tidak mudah untuk melakukan analisis statistik pada kumpulan data. Oleh karena itu, untuk contoh kerja pada bagian ini, kita akan menerapkan PCA pada kumpulan data “Default” dalam paket ISLR.

Perubahan koordinat oleh matriks BB disebut dengan transformasi linier. Kita dapat menggunakan fungsi inv() dari paket pracma

library(pracma)
## Warning: package 'pracma' was built under R version 4.2.3
B <- matrix(c(1, 0, 0, 1, 1, 0, 1, 1, 1), 3, 3, byrow = TRUE) 
v <- c(2, 4, 0)
inv(B) %*% v
##      [,1]
## [1,]    2
## [2,]    2
## [3,]   -4

Misalkan kita memiliki satu set 500 titik acak yang dihasilkan dari distribusi Gaussian bivariat (dua variabel) dengan mean (0,0) dan matriks “kovarian”

## library 
library(mvtnorm) 
## setting a seed to reproduce the same result 
set.seed(123) 
sigma <- matrix(c(4,2,2,3), ncol=2) 
x <- rmvnorm(n=500, mean=c(0,0), sigma=sigma)
plot(x)

Memutar 500 titik data yang dihasilkan dari distribusi Gaussian bivariat dengan mean (0,0) dan matriks “kovarian” yang ditunjukkan di atas sehingga kedua variabel ini berkorelasi.

pca<- princomp(x)
pca
## Call:
## princomp(x = x)
## 
## Standard deviations:
##   Comp.1   Comp.2 
## 2.241521 1.231119 
## 
##  2  variables and  500 observations.

Untuk melihat dasar R2 melalui PCA berdasarkan kumpulan data, kita dapat menggunakan fungsi pemuatan:

 pca$loadings
## 
## Loadings:
##      Comp.1 Comp.2
## [1,]  0.781  0.625
## [2,]  0.625 -0.781
## 
##                Comp.1 Comp.2
## SS loadings       1.0    1.0
## Proportion Var    0.5    0.5
## Cumulative Var    0.5    1.0

Sekarang kita kembali ke contoh di awal bagian ini. Perhatikan bahwa pada kumpulan data “Default”, setiap pengamatan dicatat sebagai sebuah baris matriks, sehingga untuk mengubah koordinat setiap pengamatan dalam kumpulan data, kita perlu mengubahnya.

Agar R dapat membaca kumpulan data dan memplotnya, kita harus memastikan bahwa kerangka data kembali ke koordinat aslinya. Dalam R, kerangka data diformat sedemikian rupa sehingga setiap baris mewakili sebuah pengamatan dalam kumpulan data dan setiap kolom mewakili sebuah variabel (atau satu koordinat vektor).

Pertama, kita mengunggah semua paket yang diperlukan:

## Library for the Credit data set 
library(ISLR)
## Libraries for Plotting our Results 
library(ggplot2) 
## Warning: package 'ggplot2' was built under R version 4.2.3
library(ggfortify) 
## Warning: package 'ggfortify' was built under R version 4.2.3
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.2.3
## for inv() function 
library(pracma)

Lalu, kita input Data Set “Default”

## Loading the data 
data(Credit)

Kolom pertama menunjukkan status “default” dan kolom kedua menunjukkan status “siswa”. Jadi, kita hanya mengambil kolom ketiga dan keempat:

credit.data <- Default[,3:4]

Pertama, kita menerjemahkan rata-rata dari semua titik data di kolom pertama dan rata-rata dari semua titik data di kolom kedua ke titik asal (0,0) menggunakan fungsi mean():

m1 <- mean(credit.data[,1]) 
m2 <- mean(credit.data[,2]) 
credit.data2 <- credit.data - c(m1, m2)

Kemudian kami menstandarkan semua titik data. Pada dasarnya, untuk membandingkan skala yang sama, kita menghitung z-skor dari setiap pengukuran dalam kumpulan data untuk kolom pertama dan kolom kedua.

Jika kita melakukannya, maka kita tidak perlu khawatir tentang skala pengukuran. Untuk melakukannya, kita menerapkan fungsi scale():

credit.data3 <- scale(credit.data2)

Kemudian kita menerapkan fungsi princomp() untuk menghitung komponen utama pertama dan kedua, yang menjadi dasar untuk R2:

pca<- princomp(data.frame(scale(credit.data3))) 
pca$loadings
## 
## Loadings:
##         Comp.1 Comp.2
## balance  0.707  0.707
## income   0.707 -0.707
## 
##                Comp.1 Comp.2
## SS loadings       1.0    1.0
## Proportion Var    0.5    0.5
## Cumulative Var    0.5    1.0
#store output as matrix
T <- pca$loadings
#transpose matrix
D <- inv(T) %*% t(scale(credit.data3))
#apply t function
credit.data4 <- t(D)
#calculate values 
s <- c(-1.96, 1.96) 
Non_Outlier_v1 <- mean(credit.data4[,1]) + s * sd(credit.data4[,1]) 
Non_Outlier_v2 <- mean(credit.data4[,2]) + s * sd(credit.data4[,2])
#print output
Non_Outlier_v1
## [1] -2.608577  2.608577
Non_Outlier_v2
## [1] -0.9372965  0.9372965

Hal ini masih belum terlihat berguna. Agar berguna, kita harus mengembalikan nilai-nilai ini ke koordinat aslinya. Karena z-scare adalah pengukuran dalam hal deviasi standar, yaitu mengukur deviasi standar dari rata-rata, kita memutar interval kepercayaan yang kita hitung dengan koordinat dalam hal komponen utama kembali ke koordinat asli dengan menggunakan kebalikan dari matriks T, dan kemudian kita mengalikan dengan deviasi standar dari kumpulan data menggunakan fungsi sd():

M <- rbind(Non_Outlier_v1, Non_Outlier_v2) 
mean(credit.data[,1]) + sd(credit.data[,1])*(T %*% M)[1,] 
## [1] -377.4492 2048.1990
mean(credit.data[,2]) + sd(credit.data[,2])*(T %*% M)[2,]
## [1] 17756.09 49277.88
summary(credit.data)
##     balance           income     
##  Min.   :   0.0   Min.   :  772  
##  1st Qu.: 481.7   1st Qu.:21340  
##  Median : 823.6   Median :34553  
##  Mean   : 835.4   Mean   :33517  
##  3rd Qu.:1166.3   3rd Qu.:43808  
##  Max.   :2654.3   Max.   :73554