Analisis Komponen Utama
Analisis Komponen Utama (AKU) merupakan salah satu analisis multivariat yang bertujuan untuk melihat/mengidentifikasi pola data dengan cara mereduksi dimensi (atau variabel) data menjadi dimensi yang lebih kecil dengan tetap mempertahankan informasi yang terdapat dalam data. Pada AKU, kita ingin mencari sebuah persamaan yang terdiri atas kombinasi linear dari berbagai variabel yang dapat menangkap varians atau keragaman data dengan maksimal. Persamaan linear inilah yang kemudian disebut dengan Komponen Utama (KU). Sifat dari KU ini adalah saling bebas antara satu KU dengan KU lainnya sehingga analisis komponen utama dapat mengatasi masalah multikolinearitas yang ada pada data.
Sebagai tambahan, AKU merupakan analisis yang dapat diterapkan pada data yang berskala numerik dan tidak membutuhkan variabel respons (Y) dalam penghitungannya.
Langkah-langkah Analisis Komponen Utama
Langkah -langkah ketika melakukan Analisis Komponen Utama adalah sebagai berikut :
Memilih variabel yang berskala numerik dan tidak memasukkan variabel respons (Y) jika ada.
Menstandardisasikan data ke dalam normal baku.
Hal ini dilakukan jika variabel yang digunakan memiliki satuan dan rentang yang berbeda. Misalkan tinggi badan yang diukur dengan satuan cm dengan upah yang diukur dengan satuan ribu. Jika kedua variabel tidak distandarisasi dan tetap mempertahankan satuannya, maka variabel upah akan lebih ‘mendominasi’ komponen utama yang terbentuk mengingat keragaman data pada variabel upah akan lebih besar dibanding dengan tinggi badan. Maka dari itu, perlu dilakukan standarisasi agar kedua variabel tersebut mempunyai bobot yang sama dalam pembentukan komponen utama.
Namun, bisa juga digunakan matriks korelasi (tanpa melakukan standardisasi data), karena matriks korelasi sudah mengatasi perbedaan satuan pada variabel.
Menghitung matriks ragam-peragam dari data yang sudah distandarisasi. Jika menggunakan matriks korelasi maka lanjut ke langkah selanjutnya.
Menghitung vektor eigen dan nilai eigen dari matriks ragam-peragam atau matriks korelasi.
Vektor eigen merupakan koeffisien dari masing-masing variabel yang digunakan untuk membentuk komponen utama atau loadings sedangkan nilai eigen menggambarkan seberapa besar varians yang dapat ditangkap oleh komponen utama.
Persiapan Data
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(ggplot2)
library(readxl)
library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
library(DT)
dataset <- read_excel("D:/Libraries/Document/Statistika S1/SIM RMarkdown/dataset.xlsx")
View(dataset)
Penjelasan dan informasi data secara singkat:
datatable(dataset)
summary(dataset)
## No Country Region Year
## Min. : 1.0 Length:2864 Length:2864 Min. :2000
## 1st Qu.: 716.8 Class :character Class :character 1st Qu.:2004
## Median :1432.5 Mode :character Mode :character Median :2008
## Mean :1432.5 Mean :2008
## 3rd Qu.:2148.2 3rd Qu.:2011
## Max. :2864.0 Max. :2015
## Infant_deaths Under_five_deaths Adult_mortality Alcohol_consumption
## Min. : 1.80 Min. : 2.300 Min. : 49.38 Min. : 0.000
## 1st Qu.: 8.10 1st Qu.: 9.675 1st Qu.:106.91 1st Qu.: 1.200
## Median : 19.60 Median : 23.100 Median :163.84 Median : 4.020
## Mean : 30.36 Mean : 42.938 Mean :192.25 Mean : 4.821
## 3rd Qu.: 47.35 3rd Qu.: 66.000 3rd Qu.:246.79 3rd Qu.: 7.777
## Max. :138.10 Max. :224.900 Max. :719.36 Max. :17.870
## Hepatitis_B Measles BMI Polio Diphtheria
## Min. :12.00 Min. :10.00 Min. :19.80 Min. : 8.0 Min. :16.00
## 1st Qu.:78.00 1st Qu.:64.00 1st Qu.:23.20 1st Qu.:81.0 1st Qu.:81.00
## Median :89.00 Median :83.00 Median :25.50 Median :93.0 Median :93.00
## Mean :84.29 Mean :77.34 Mean :25.03 Mean :86.5 Mean :86.27
## 3rd Qu.:96.00 3rd Qu.:93.00 3rd Qu.:26.40 3rd Qu.:97.0 3rd Qu.:97.00
## Max. :99.00 Max. :99.00 Max. :32.10 Max. :99.0 Max. :99.00
## Incidents_HIV GDP_per_capita Population_mln
## Min. : 0.0100 Min. : 148 Min. : 0.080
## 1st Qu.: 0.0800 1st Qu.: 1416 1st Qu.: 2.098
## Median : 0.1500 Median : 4217 Median : 7.850
## Mean : 0.8943 Mean : 11541 Mean : 36.676
## 3rd Qu.: 0.4600 3rd Qu.: 12557 3rd Qu.: 23.688
## Max. :21.6800 Max. :112418 Max. :1379.860
## Thinness_ten_nineteen_years Thinness_five_nine_years Schooling
## Min. : 0.100 Min. : 0.1 Min. : 1.100
## 1st Qu.: 1.600 1st Qu.: 1.6 1st Qu.: 5.100
## Median : 3.300 Median : 3.4 Median : 7.800
## Mean : 4.866 Mean : 4.9 Mean : 7.632
## 3rd Qu.: 7.200 3rd Qu.: 7.3 3rd Qu.:10.300
## Max. :27.700 Max. :28.6 Max. :14.100
## Economy_status_Developed Economy_status_Developing Life_expectancy
## Min. :0.0000 Min. :0.0000 Min. :39.40
## 1st Qu.:0.0000 1st Qu.:1.0000 1st Qu.:62.70
## Median :0.0000 Median :1.0000 Median :71.40
## Mean :0.2067 Mean :0.7933 Mean :68.86
## 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:75.40
## Max. :1.0000 Max. :1.0000 Max. :83.80
head(dataset)
## # A tibble: 6 × 22
## No Country Region Year Infant_deaths Under_five_deaths Adult_mortality
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 1 Turkiye Middle… 2015 11.1 13 106.
## 2 2 Spain Europe… 2015 2.7 3.3 57.9
## 3 3 India Asia 2007 51.5 67.9 201.
## 4 4 Guyana South … 2006 32.8 40.5 222.
## 5 5 Israel Middle… 2012 3.4 4.3 58.0
## 6 6 Costa Rica Centra… 2006 9.8 11.2 95.2
## # ℹ 15 more variables: Alcohol_consumption <dbl>, Hepatitis_B <dbl>,
## # Measles <dbl>, BMI <dbl>, Polio <dbl>, Diphtheria <dbl>,
## # Incidents_HIV <dbl>, GDP_per_capita <dbl>, Population_mln <dbl>,
## # Thinness_ten_nineteen_years <dbl>, Thinness_five_nine_years <dbl>,
## # Schooling <dbl>, Economy_status_Developed <dbl>,
## # Economy_status_Developing <dbl>, Life_expectancy <dbl>
sort(colnames(dataset))
## [1] "Adult_mortality" "Alcohol_consumption"
## [3] "BMI" "Country"
## [5] "Diphtheria" "Economy_status_Developed"
## [7] "Economy_status_Developing" "GDP_per_capita"
## [9] "Hepatitis_B" "Incidents_HIV"
## [11] "Infant_deaths" "Life_expectancy"
## [13] "Measles" "No"
## [15] "Polio" "Population_mln"
## [17] "Region" "Schooling"
## [19] "Thinness_five_nine_years" "Thinness_ten_nineteen_years"
## [21] "Under_five_deaths" "Year"
Mengkategorikan Data
Mengkategorikan data dengan variabel data berisi variabel independen dan variabel data_y berisi variabel dependen
data<-dataset[,5:21]
data_y<-dataset[,22]
Uji Homogenitas
Lalu dilakukan uji Bartlett atau dapat disebut juga sebagai uji homogenitas.
uji_bart <- function(x)
{
method <- "Bartlett's test of sphericity"
data.name <- deparse(substitute(x))
x <- subset(x, complete.cases(x))
n <- nrow(x)
p <- ncol(x)
chisq <- (1-n+(2*p+5)/6)*log(det(cor(x)))
df <- p*(p-1)/2
p.value <- pchisq(chisq, df, lower.tail=FALSE)
names(chisq) <- "Khi-squared"
names(df) <- "df"
return(structure(list(statistic=chisq, parameter=df, p.value=p.value,
method=method, data.name=data.name), class="htest"))
}
uji_bart(dataset[,5:21])
##
## Bartlett's test of sphericity
##
## data: dataset[, 5:21]
## Khi-squared = Inf, df = 136, p-value < 2.2e-16
Hipotesis dan Kesimpulan
Ho : Tidak terdapat multikolinearitas
H1 : Terdapat multikolinearitas pada salah satu variabel
Dengan menggunakan tingkat kepercayaan 95%, maka data yang ada menjelaskan bahwa pada salah satu variabel terdapat multikolinearitas, karena nilai p-value < 0.05.
Setelah dicoba melakukan uji asumsi diatas dan terdapat multikolinearitas maka kita bisa mereduksinya menggunakan analisis PCA.
Analisis PCA secara manual
Standarisasi Data
Karena beberapa variabel memiliki satuan yang berbeda, maka perlu
dilakukan standardisasi data. Di R untuk melakukan standardisasi ke
normal baku dapat menggunakan fungsi scale.
dataset_std <- scale(x = data)
Menghitung matriks ragam-peragam
Matriks ragam-peragam dihitung dari data yang telah distandardisasi.
Di R untuk menghitung matriks ragam-peragam dapat menggunakan fungsi
cov.
dataset_cov <- cov(dataset_std)
Menghitung vektor eigen dan nilai eigen
Untuk menghitung vektor eigen dan nilai eigen di R dapat menggunakan
fungsi eigen.
dataset_eigen <- eigen(dataset_cov)
dataset_eigen
## eigen() decomposition
## $values
## [1] 7.934817e+00 2.251283e+00 1.566277e+00 1.389290e+00 8.472015e-01
## [6] 6.382989e-01 6.133869e-01 5.113858e-01 3.234100e-01 3.177717e-01
## [11] 2.157779e-01 1.933025e-01 8.333218e-02 5.938836e-02 4.348219e-02
## [16] 1.159439e-02 2.775557e-17
##
## $vectors
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] -0.32432608 -0.13690466 -0.0817022131 0.07314720 0.09227974 0.19867215
## [2,] -0.31714894 -0.17035130 -0.0853077710 0.10307479 0.10349303 0.20961923
## [3,] -0.27259904 -0.09554603 -0.2349050625 0.39852664 -0.12782460 0.07048539
## [4,] 0.21587664 -0.30163048 0.0330660006 0.27296073 -0.13366870 0.21094915
## [5,] 0.19297082 0.38155416 -0.0542386039 0.27403793 0.16519527 0.27734541
## [6,] 0.21963475 0.11947773 -0.0751839661 0.10753252 0.07522709 0.02722574
## [7,] 0.24750099 0.07347081 -0.2964183084 -0.17744020 -0.27542134 -0.39053948
## [8,] 0.26551657 0.33637887 0.0344232599 0.23227848 0.05965591 0.10825407
## [9,] 0.26204521 0.33846828 0.0456322277 0.25109027 0.08358004 0.15816024
## [10,] -0.12489621 -0.04756175 -0.2556027227 0.62892459 -0.31510665 -0.34874944
## [11,] 0.22983027 -0.25056144 0.1763195698 0.04639400 0.12877673 -0.36316320
## [12,] -0.03462737 0.06420592 0.5053379157 -0.03916064 -0.75668455 0.29390911
## [13,] -0.23726054 0.18605594 0.4334430941 0.16718986 0.15231308 -0.31125535
## [14,] -0.23546369 0.18561268 0.4377360348 0.17004432 0.13537021 -0.32130685
## [15,] 0.30607403 -0.08472170 0.0004022149 0.03777143 -0.21221329 -0.21679865
## [16,] 0.23704265 -0.39607282 0.2222322984 0.17032770 0.16157232 0.08120694
## [17,] -0.23704265 0.39607282 -0.2222322984 -0.17032770 -0.16157232 -0.08120694
## [,7] [,8] [,9] [,10] [,11]
## [1,] -0.07699298 0.16572281 -0.020256335 -0.158343673 0.25250050
## [2,] -0.08312949 0.18942410 -0.044169642 -0.176488843 0.24467963
## [3,] -0.01051128 -0.03096659 -0.018194234 0.021999446 0.01773776
## [4,] -0.04791247 -0.56384090 -0.492653412 -0.125916553 0.28968678
## [5,] 0.10930874 0.16932825 -0.131859731 -0.663460886 -0.35005254
## [6,] -0.94470683 0.09147080 0.059909235 0.068180348 0.01043454
## [7,] 0.02177733 -0.03205854 0.267976421 -0.498379075 0.50291481
## [8,] 0.14426788 0.03105577 0.063546994 0.319955972 0.34212450
## [9,] 0.17748564 0.06260164 0.041887828 0.245054335 0.26978476
## [10,] 0.05463976 0.14890824 0.142363223 0.122819077 -0.16216740
## [11,] 0.04584124 0.60803286 -0.536013272 0.009301033 0.14386802
## [12,] -0.07221148 0.25576972 0.038183778 -0.066236326 0.03512691
## [13,] -0.09838406 -0.16964249 0.021593187 -0.157112935 0.10643925
## [14,] -0.04831360 -0.21712982 0.004916768 -0.116198202 0.04997718
## [15,] -0.03315413 -0.19908755 -0.143370795 -0.002954468 -0.40467408
## [16,] 0.04545994 0.03141076 0.403694742 -0.083822559 -0.02147151
## [17,] -0.04545994 -0.03141076 -0.403694742 0.083822559 0.02147151
## [,12] [,13] [,14] [,15] [,16]
## [1,] 0.314784654 -0.31813928 -0.010442451 0.021762239 0.701813108
## [2,] 0.272108091 -0.29000008 0.016331379 -0.045328417 -0.708251716
## [3,] 0.274920528 0.77530224 -0.045305252 0.010311805 0.014721325
## [4,] -0.231257976 -0.08849186 0.008312864 0.004664727 0.018805778
## [5,] -0.084368180 0.02185830 -0.004062035 -0.077856779 0.023056395
## [6,] -0.043037794 0.02635478 -0.042066790 0.018416126 0.005419143
## [7,] 0.061224723 0.07155065 -0.036985042 0.024623529 -0.012566586
## [8,] 0.169351015 -0.03292150 0.082910142 -0.680910069 0.020520283
## [9,] 0.158226890 -0.05837784 -0.075096342 0.716533450 -0.046142190
## [10,] -0.294839975 -0.35452953 0.028137140 0.001817401 0.010747274
## [11,] -0.013804947 0.14543653 -0.026216524 -0.004638254 0.027087960
## [12,] -0.006862412 0.03080205 -0.008055107 -0.006943905 -0.001934967
## [13,] 0.034144542 0.06014659 0.697192647 0.085873208 0.003575108
## [14,] 0.069818337 -0.03453600 -0.700295282 -0.075198162 -0.019355470
## [15,] 0.733519704 -0.19599180 0.060357160 0.001722467 -0.022538319
## [16,] 0.007488360 0.04452225 -0.008861868 -0.009295625 0.011180988
## [17,] -0.007488360 -0.04452225 0.008861868 0.009295625 -0.011180988
## [,17]
## [1,] -3.300171e-15
## [2,] 3.519124e-15
## [3,] -3.078448e-16
## [4,] -2.233579e-16
## [5,] -2.528100e-16
## [6,] 8.564912e-17
## [7,] 2.353264e-16
## [8,] -3.276166e-16
## [9,] 4.964400e-16
## [10,] 1.732039e-17
## [11,] -2.073044e-16
## [12,] 9.581649e-17
## [13,] -1.969056e-16
## [14,] 2.113815e-16
## [15,] 1.361543e-17
## [16,] 7.071068e-01
## [17,] 7.071068e-01
Output yang dihasilkan dari fungsi eigen terdiri atas
:
valuesyaitu nilai eigen yang sudah diurutkan dari yang tertinggi ke yang terendah. Nilai ini bisa digunakan untuk melihat seberapa besar varians yang dapat dijelaskan oleh komponen utama.vectorsyaitu vektor eigen. Nilai ini merupakan nilai loadings yang digunakan untuk membuat persamaan komponen utama.
Analisis PCA dengan fungsi prcomp
Selain penghitungan manual diatas, R telah menyediakan fungsi
prcomp yang bisa digunakan untuk melakukan Analisis
Komponen Utama. Fungsi ini hanya digunakan untuk raw data, dimana
standarisasi data sudah bisa dilakukan dengan memasukkan argument TRUE
pada parameter scale. dan center.
dataset_pca <- prcomp(x = data, scale. = TRUE, center = TRUE)
Menentukan Jumlah Komponen Utama
Terdapat beberapa pendekatan ketika ingin menentukan jumlah komponen utama. Salah satu pendekatan melalui nilai eigen
round(dataset_pca$sdev^2,2)
## [1] 7.93 2.25 1.57 1.39 0.85 0.64 0.61 0.51 0.32 0.32 0.22 0.19 0.08 0.06 0.04
## [16] 0.01 0.00
Didapatkan hasil dari eigen value yang bernilai lebih dari 1 ada empat faktor. Maka jumlah faktor utama yang digunakan adalah empat PCA
Persamaan Komponen Utama
Persamaan komponen utama dibentuk berdasarkan komponen loadings atau vektor eigen .
dataset_pca$rotation[,1:4]
## PC1 PC2 PC3 PC4
## Infant_deaths 0.32432608 0.13690466 0.0817022131 0.07314720
## Under_five_deaths 0.31714894 0.17035130 0.0853077710 0.10307479
## Adult_mortality 0.27259904 0.09554603 0.2349050625 0.39852664
## Alcohol_consumption -0.21587664 0.30163048 -0.0330660006 0.27296073
## Hepatitis_B -0.19297082 -0.38155416 0.0542386039 0.27403793
## Measles -0.21963475 -0.11947773 0.0751839661 0.10753252
## BMI -0.24750099 -0.07347081 0.2964183084 -0.17744020
## Polio -0.26551657 -0.33637887 -0.0344232599 0.23227848
## Diphtheria -0.26204521 -0.33846828 -0.0456322277 0.25109027
## Incidents_HIV 0.12489621 0.04756175 0.2556027227 0.62892459
## GDP_per_capita -0.22983027 0.25056144 -0.1763195698 0.04639400
## Population_mln 0.03462737 -0.06420592 -0.5053379157 -0.03916064
## Thinness_ten_nineteen_years 0.23726054 -0.18605594 -0.4334430941 0.16718986
## Thinness_five_nine_years 0.23546369 -0.18561268 -0.4377360348 0.17004432
## Schooling -0.30607403 0.08472170 -0.0004022149 0.03777143
## Economy_status_Developed -0.23704265 0.39607282 -0.2222322984 0.17032770
## Economy_status_Developing 0.23704265 -0.39607282 0.2222322984 -0.17032770
Bulatkan sehingga terdapat dua angka dibelakang koma agar lebih mudah dianalisis
round(dataset_pca$rotation[,1:4],2)
## PC1 PC2 PC3 PC4
## Infant_deaths 0.32 0.14 0.08 0.07
## Under_five_deaths 0.32 0.17 0.09 0.10
## Adult_mortality 0.27 0.10 0.23 0.40
## Alcohol_consumption -0.22 0.30 -0.03 0.27
## Hepatitis_B -0.19 -0.38 0.05 0.27
## Measles -0.22 -0.12 0.08 0.11
## BMI -0.25 -0.07 0.30 -0.18
## Polio -0.27 -0.34 -0.03 0.23
## Diphtheria -0.26 -0.34 -0.05 0.25
## Incidents_HIV 0.12 0.05 0.26 0.63
## GDP_per_capita -0.23 0.25 -0.18 0.05
## Population_mln 0.03 -0.06 -0.51 -0.04
## Thinness_ten_nineteen_years 0.24 -0.19 -0.43 0.17
## Thinness_five_nine_years 0.24 -0.19 -0.44 0.17
## Schooling -0.31 0.08 0.00 0.04
## Economy_status_Developed -0.24 0.40 -0.22 0.17
## Economy_status_Developing 0.24 -0.40 0.22 -0.17
Interpretasi dari persamaan diatas adalah semakin besar koefisien suatu variabel pada komponen utama, semakin besar pula hubungan pengaruh variabel tersebut dengan komponen utama yang bersesuaian.
Kita dapat menentukan variabel yang mewakili setiap komponen utama (PCA) dengan melihat bobot variabel pada setiap komponen tersebut. Berikut adalah variabel yang mewakili setiap PCA:
PCA 1: Variabel yang paling kuat mempengaruhi PCA 1 adalah “Infant_deaths” dan “Under_five_deaths”. Kedua variabel ini memiliki bobot yang signifikan pada komponen utama ini (0.32 dan 0.32). Variabel ini mewakili PCA 1 yang mungkin berhubungan dengan kematian bayi dan anak di bawah lima tahun.
PCA 2: Variabel yang paling kuat mempengaruhi PCA 2 adalah “Hepatitis_B” dan “Polio”. Kedua variabel ini memiliki bobot yang signifikan pada komponen utama ini (-0.38 dan -0.34). Variabel ini mewakili PCA 2 yang mungkin berhubungan dengan cakupan imunisasi Hepatitis B dan Polio.
PCA 3: Variabel yang paling kuat mempengaruhi PCA 3 adalah “Adult_mortality” dan “Thinness_ten_nineteen_years”. Kedua variabel ini memiliki bobot yang signifikan pada komponen utama ini (0.23 dan -0.43). Variabel ini mewakili PCA 3 yang mungkin berhubungan dengan tingkat kematian dewasa dan prevalensi kekurusan pada remaja usia 10-19 tahun.
PCA 4: Variabel yang paling kuat mempengaruhi PCA 4 adalah “Incidents_HIV”. Variabel ini memiliki bobot yang signifikan pada komponen utama ini (0.63). Variabel ini mewakili PCA 4 yang mungkin berhubungan dengan kejadian HIV.
Variabel-variabel ini dipilih berdasarkan bobot (koefisien) terbesar pada setiap komponen utama. Variabel-variabel ini dianggap mewakili komponen utama tersebut karena memiliki kontribusi paling signifikan terhadap variasi dalam data yang dijelaskan oleh komponen utama tersebut.
Perlu dicatat bahwa setiap variabel juga dapat memberikan kontribusi kecil pada komponen utama lainnya, namun variabel dengan bobot terbesar dianggap sebagai representasi utama atau mewakili PCA tersebut.
Rekonstruksi Data
Setelah didapatkan persamaan komponen utamanya, maka kita dapat
‘merekonstruksi’ data dengan memasukkan nilai variabel pada komponen
utama yang dibuat. Di R cukup dengan mengakses atribut x
pada objek dataset_pca. Dapat dilihat bahwasanya kita dapat
mereduksi data yang berawal dari 17 variabel independen menjadi 4
variabel namun tetap menggambarkan keragaman data. Nilai ini juga dapat
digunakan untuk keperluan analisis selanjutnya
pca_fix=dataset_pca$x[,1:4]
head(pca_fix)
## PC1 PC2 PC3 PC4
## [1,] -0.9435965 -1.772967 0.0460039 -0.80507616
## [2,] -3.8681952 1.263536 -0.5920816 0.50806786
## [3,] 5.8460292 -1.202885 -8.9022912 -0.14800268
## [4,] 0.1073581 -0.923062 0.3625539 0.31116600
## [5,] -3.7569970 1.009678 -0.4567929 -0.09027207
## [6,] -1.1617961 -0.846231 0.7666029 -1.00501140
Visualisasi data hasil rekontruksi
fviz_pca(dataset_pca)