25/2/2024
Analisis Faktor memiliki kegunaan untuk mengidentifikasi sejumlah kecil faktor yang dapat mewakili hubungan antar sejumlah banyak variabel yang saling berhubungan. Analisis ini melayani kebutuhan reduksi data melalui identifikasi struktur dalam sekumpulan variabel tersebut dengan mempertahankan sebanyak mungkin informasi awal yang dikandung tanpa menghilangkan data. Pengurangan dilakukan dengan melihat interdependensi beberapa variable yang dapat dijadikan satu yang disebut faktor sehingga ditemukan variable-variabel atau faktor-faktor yang dominan atau penting untuk dianalisis lebih lanjut, misalnya dengan dikorelasikan dengan variable tergantung/terikat.
Analisis faktor dapat dilakukan dengan PCA (Principal Component Analysis) dan CFA (Common Factor Analysis). Perbedaan nya adalah pada PCA, variabel-variabel yang ada dikelompokkan ke dalam faktor-faktor di mana peneliti tidak atau belum memiliki teori atau hipotesis yang meyusun faktor tersebut. PCA mencoba untuk menemukan hubungan antarvariabel baru atau faktor yang saling independen satu sama lain. Sementara pada CFA, pembentukan faktor dilakukan secara sengaja berdasarkan teori dan konsep yang telah ada.
Pada metode ini pengelompokkkan faktor dilakukan dengan prinsip optimal: jumlah komponen paling optimal, pilihan paling optimal untuk setiap variabel untuk setiap komponen, dan weight paling optimal. Secara diagramatis, PCA ditunjukkan gambar di bawah. Y merupakan variabel dan C merupakan komponen. 4 variabel yang ada dikelompokkan menjadi sebuah komponen. Setiap variabel memiliki kontribusi dengan berat masing-masing terhadap komponen C yang ditunjukkan dengan W dan arah panah yang menuju C.
Dalam metode ini telah ada teori yang mendasari terbentuknya faktor. Paling sering digunakan dalam psikologi. Contohnya social anxiety. Social anxiety tidak dapat diukur secara langsung (latent), namun menggunakan indikator tertentu seperti ketidaknyamanan dalam grup, ketidaknyamanan berbincang dengan orang asing. Social anxiety ini merupakan faktor (F) yang menyebabkan terjadinya variabel terukur berupa ketidaknyamanan dalam grup (Y1) dan ketidaknyamanan berbincang dengan orang asing (Y2). Hubungan antara F dan setiap Y dibobotkan, CFA dilakukan untuk mencari bobot optimal. Dalam CFA ini terdapat error yang ditunjukkan dengan u. Model ini memiliki bentuk seperti seperangkat persamaan regresi. Contoh dalam PWK adalah IPM.
Persamaan: Y1 = b1*F + u1 atau X=Af+e
Data yang digunakan adalah data fasilitas Kabupaten Subang. Sama seperti kota atau kabupaten lainnya, Kabupaten Subang memiliki derajat atau tingkatan kabupaten tersendiri. Tingkatan derajat tersebut dipengaruhi oleh faktor-faktor yang berada di dalamnya. Untuk mengetahui faktor-faktor apa saja yang mempengaruhi derajat Kabupaten Subang maka diperlukan analisis faktor untuk menganalisisnya. Berikut merupakan data yang digunakan pada praktikum ini.
Data ini juga dapat diunduh pada link ini: Data
data <- read.csv("data.csv")
head(data)
## kecamatan jm_pg_list_per_desa jm_rs jm_puskes jm_sar_pel_kes
## 1 SAGALAHERANG 13 0 6 9
## 2 JALANCAGAK 17 0 15 14
## 3 CISALAK 13 0 5 6
## 4 TANJUNGSIANG 11 0 6 8
## 5 CIJAMBE 9 0 7 4
## 6 CIBOGO 7 0 3 2
## jm_bl_pengobat jm_tk jm_pasar jm_kantorpos jm_toko jm_koperasi jm_masjid
## 1 0 9 2 1 110 1 82
## 2 1 8 6 1 0 1 119
## 3 1 5 3 1 38 1 89
## 4 0 7 8 1 0 1 80
## 5 0 2 1 0 0 1 67
## 6 0 1 1 0 0 1 42
## jm_gereja jm_pt_asuhan jm_sar_olga jm_unit_usaha jm_perusaha_dgng
## 1 0 4 44 58 13
## 2 0 4 44 541 18
## 3 0 4 36 653 13
## 4 0 3 40 493 12
## 5 0 2 27 398 19
## 6 9 0 20 27 16
Nama-nama kolom yang membutuhkan penjelasan:
jm_pg_list_per_desa: Jumlah pengguna listrik per desa
jm_rs: Jumlah rumah sakit
jm_sar_pel_kes: Jumlah sarana pelayanan kesehatan
jm_bl_pengobat: Jumlah balai pengobatan
jm_pt_asuhan: Jumlah panti asuhan
jm_sar_olga: Jumlah sarana olahraga
jm_perusaha_dgng: Jumlah perusahaan dagang
Hal pertama yang dilakukan adalah melakukan normalisasi data. Mengapa? mari kita lihat persebaran data numerik pada dataset berikut ini.
summary(data)
## kecamatan jm_pg_list_per_desa jm_rs jm_puskes
## Length:22 Min. : 7.00 Min. :0.0000 Min. : 3.000
## Class :character 1st Qu.: 9.00 1st Qu.:0.0000 1st Qu.: 5.000
## Mode :character Median :11.00 Median :0.0000 Median : 6.000
## Mean :11.50 Mean :0.1364 Mean : 6.773
## 3rd Qu.:13.75 3rd Qu.:0.0000 3rd Qu.: 8.000
## Max. :18.00 Max. :2.0000 Max. :15.000
## jm_sar_pel_kes jm_bl_pengobat jm_tk jm_pasar
## Min. : 2.000 Min. :0.0000 Min. : 1.000 Min. : 1.000
## 1st Qu.: 4.000 1st Qu.:0.0000 1st Qu.: 2.000 1st Qu.: 1.000
## Median : 5.500 Median :1.0000 Median : 3.500 Median : 2.000
## Mean : 6.182 Mean :0.7727 Mean : 4.591 Mean : 3.227
## 3rd Qu.: 8.000 3rd Qu.:1.0000 3rd Qu.: 6.750 3rd Qu.: 4.000
## Max. :14.000 Max. :3.0000 Max. :15.000 Max. :14.000
## jm_kantorpos jm_toko jm_koperasi jm_masjid
## Min. :0.0000 Min. : 0.0 Min. :1.000 Min. : 25.00
## 1st Qu.:1.0000 1st Qu.: 0.0 1st Qu.:1.000 1st Qu.: 48.00
## Median :1.0000 Median : 0.0 Median :1.000 Median : 61.00
## Mean :0.8182 Mean :163.8 Mean :1.773 Mean : 62.50
## 3rd Qu.:1.0000 3rd Qu.:159.8 3rd Qu.:1.750 3rd Qu.: 77.25
## Max. :1.0000 Max. :998.0 Max. :9.000 Max. :119.00
## jm_gereja jm_pt_asuhan jm_sar_olga jm_unit_usaha
## Min. :0.0000 Min. :0.000 Min. :20.00 Min. : 0.0
## 1st Qu.:0.0000 1st Qu.:0.000 1st Qu.:32.25 1st Qu.: 75.5
## Median :0.0000 Median :1.000 Median :42.50 Median :285.0
## Mean :0.9545 Mean :1.682 Mean :44.27 Mean :290.5
## 3rd Qu.:1.0000 3rd Qu.:3.000 3rd Qu.:50.50 3rd Qu.:475.0
## Max. :9.0000 Max. :9.000 Max. :74.00 Max. :718.0
## jm_perusaha_dgng
## Min. : 8.00
## 1st Qu.: 13.00
## Median : 16.50
## Mean : 20.41
## 3rd Qu.: 18.75
## Max. :112.00
Bisa terlihat untuk kolom-kolom numerik jumlah fasilitas memiliki range persebaran yang berbeda-beda. Maka dari itu, normalisasi data diperlukan untuk menyamakan range kolom-kolom tersebut. Pertama pilih terlebih dahulu seluruh data numerik, yaitu seluruh data kecuali nama kecamatan.
numerical_data <- data[,-1]
head(numerical_data)
## jm_pg_list_per_desa jm_rs jm_puskes jm_sar_pel_kes jm_bl_pengobat jm_tk
## 1 13 0 6 9 0 9
## 2 17 0 15 14 1 8
## 3 13 0 5 6 1 5
## 4 11 0 6 8 0 7
## 5 9 0 7 4 0 2
## 6 7 0 3 2 0 1
## jm_pasar jm_kantorpos jm_toko jm_koperasi jm_masjid jm_gereja jm_pt_asuhan
## 1 2 1 110 1 82 0 4
## 2 6 1 0 1 119 0 4
## 3 3 1 38 1 89 0 4
## 4 8 1 0 1 80 0 3
## 5 1 0 0 1 67 0 2
## 6 1 0 0 1 42 9 0
## jm_sar_olga jm_unit_usaha jm_perusaha_dgng
## 1 44 58 13
## 2 44 541 18
## 3 36 653 13
## 4 40 493 12
## 5 27 398 19
## 6 20 27 16
Lalu, normalisasi data menggunakan fungsi scale()
data_normalized <- as.data.frame(scale(numerical_data)) # menggunakan as.data.frame() agar output tetap dalam bentuk dataframe, bukan matriks head(data_normalized)
head(data_normalized)
## jm_pg_list_per_desa jm_rs jm_puskes jm_sar_pel_kes jm_bl_pengobat
## 1 0.4517783 -0.2916479 -0.30379755 0.91948602 -0.8890670
## 2 1.6565206 -0.2916479 3.23455041 2.55083219 0.2614903
## 3 0.4517783 -0.2916479 -0.69694733 -0.05932168 0.2614903
## 4 -0.1505928 -0.2916479 -0.30379755 0.59321679 -0.8890670
## 5 -0.7529639 -0.2916479 0.08935222 -0.71186015 -0.8890670
## 6 -1.3553350 -0.2916479 -1.48324687 -1.36439861 -0.8890670
## jm_tk jm_pasar jm_kantorpos jm_toko jm_koperasi jm_masjid
## 1 1.3171370 -0.39982297 0.4605662 -0.1901853 -0.423653 0.8707613
## 2 1.0184049 0.90330374 0.4605662 -0.5792372 -0.423653 2.5229752
## 3 0.1222086 -0.07404129 0.4605662 -0.4448374 -0.423653 1.1833423
## 4 0.7196728 1.55486709 0.4605662 -0.5792372 -0.423653 0.7814525
## 5 -0.7739877 -0.72560464 -2.0725478 -0.5792372 -0.423653 0.2009449
## 6 -1.0727198 -0.72560464 -2.0725478 -0.5792372 -0.423653 -0.9154158
## jm_gereja jm_pt_asuhan jm_sar_olga jm_unit_usaha jm_perusaha_dgng
## 1 -0.4637909 1.0378462 -0.0169881 -1.0565958 -0.35250343
## 2 -0.4637909 1.0378462 -0.0169881 1.1379678 -0.11461768
## 3 -0.4637909 1.0378462 -0.5153056 1.6468521 -0.35250343
## 4 -0.4637909 0.5901479 -0.2661469 0.9198745 -0.40008058
## 5 -0.4637909 0.1424495 -1.0759128 0.4882315 -0.06704053
## 6 3.9090944 -0.7529473 -1.5119406 -1.1974477 -0.20977198
Ini adalah proses besar yang harus dijalani dalam melakukan PCA.
# library yang dibutuhkan untuk melakukan analisis ini, install melalui console
library(factoextra) # untuk melakukan visualisasi
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(psych)
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
# Calculate Correlation Matrix
cor_matrix <- cor(data_normalized)
cor_matrix
## jm_pg_list_per_desa jm_rs jm_puskes jm_sar_pel_kes
## jm_pg_list_per_desa 1.00000000 0.10736017 0.62306759 0.5334526
## jm_rs 0.10736017 1.00000000 0.14742169 0.5135389
## jm_puskes 0.62306759 0.14742169 1.00000000 0.7568643
## jm_sar_pel_kes 0.53345259 0.51353892 0.75686431 1.0000000
## jm_bl_pengobat 0.09075819 0.43143127 0.25554350 0.4273937
## jm_tk 0.45201122 0.61540390 0.35208517 0.7594839
## jm_pasar 0.26399151 0.74050240 0.31188553 0.7293233
## jm_kantorpos 0.47229456 0.14071951 0.43112260 0.5008953
## jm_toko 0.21261758 0.54200154 0.13652542 0.3936604
## jm_koperasi -0.11401629 -0.01776644 -0.05272038 -0.2307621
## jm_masjid 0.56198731 -0.02501314 0.56304210 0.6549277
## jm_gereja -0.28919350 0.05623205 -0.23857089 -0.1571539
## jm_pt_asuhan 0.27289106 0.63627114 0.41412469 0.7948496
## jm_sar_olga 0.54942211 0.45157121 0.45172461 0.5641230
## jm_unit_usaha 0.49277942 0.03626241 0.33095623 0.3376306
## jm_perusaha_dgng 0.03923567 0.87593592 0.13899151 0.5147440
## jm_bl_pengobat jm_tk jm_pasar jm_kantorpos
## jm_pg_list_per_desa 0.09075819 0.4520112 0.26399151 0.472294564
## jm_rs 0.43143127 0.6154039 0.74050240 0.140719509
## jm_puskes 0.25554350 0.3520852 0.31188553 0.431122600
## jm_sar_pel_kes 0.42739375 0.7594839 0.72932326 0.500895256
## jm_bl_pengobat 1.00000000 0.5066351 0.57360426 0.428972993
## jm_tk 0.50663515 1.0000000 0.85293191 0.445516275
## jm_pasar 0.57360426 0.8529319 1.00000000 0.350102724
## jm_kantorpos 0.42897299 0.4455163 0.35010272 1.000000000
## jm_toko 0.76248887 0.6370066 0.66056800 0.279480723
## jm_koperasi -0.09421053 -0.1329399 -0.13492554 0.006012109
## jm_masjid -0.00366982 0.4665723 0.33424830 0.409367696
## jm_gereja 0.18029270 -0.1134156 0.02432588 -0.303698880
## jm_pt_asuhan 0.37796494 0.8160571 0.76809035 0.255288720
## jm_sar_olga 0.56775837 0.4957281 0.54079099 0.443989071
## jm_unit_usaha 0.28421853 0.4458421 0.45522361 0.185347502
## jm_perusaha_dgng 0.64396797 0.7178706 0.80373991 0.147126292
## jm_toko jm_koperasi jm_masjid jm_gereja
## jm_pg_list_per_desa 0.21261758 -0.114016292 0.56198731 -0.28919350
## jm_rs 0.54200154 -0.017766440 -0.02501314 0.05623205
## jm_puskes 0.13652542 -0.052720382 0.56304210 -0.23857089
## jm_sar_pel_kes 0.39366041 -0.230762089 0.65492769 -0.15715391
## jm_bl_pengobat 0.76248887 -0.094210529 -0.00366982 0.18029270
## jm_tk 0.63700656 -0.132939871 0.46657229 -0.11341558
## jm_pasar 0.66056800 -0.134925538 0.33424830 0.02432588
## jm_kantorpos 0.27948072 0.006012109 0.40936770 -0.30369888
## jm_toko 1.00000000 0.030274212 0.02364894 0.23958437
## jm_koperasi 0.03027421 1.000000000 -0.36081945 -0.11704792
## jm_masjid 0.02364894 -0.360819453 1.00000000 -0.20611695
## jm_gereja 0.23958437 -0.117047918 -0.20611695 1.00000000
## jm_pt_asuhan 0.45643726 -0.217295588 0.52121257 -0.07580450
## jm_sar_olga 0.76422209 0.124184537 0.16384421 0.02345216
## jm_unit_usaha 0.39284854 -0.158630168 0.54411851 -0.12661867
## jm_perusaha_dgng 0.74720258 -0.045901940 0.02412860 0.15676258
## jm_pt_asuhan jm_sar_olga jm_unit_usaha jm_perusaha_dgng
## jm_pg_list_per_desa 0.2728911 0.54942211 0.49277942 0.03923567
## jm_rs 0.6362711 0.45157121 0.03626241 0.87593592
## jm_puskes 0.4141247 0.45172461 0.33095623 0.13899151
## jm_sar_pel_kes 0.7948496 0.56412302 0.33763055 0.51474405
## jm_bl_pengobat 0.3779649 0.56775837 0.28421853 0.64396797
## jm_tk 0.8160571 0.49572815 0.44584214 0.71787058
## jm_pasar 0.7680904 0.54079099 0.45522361 0.80373991
## jm_kantorpos 0.2552887 0.44398907 0.18534750 0.14712629
## jm_toko 0.4564373 0.76422209 0.39284854 0.74720258
## jm_koperasi -0.2172956 0.12418454 -0.15863017 -0.04590194
## jm_masjid 0.5212126 0.16384421 0.54411851 0.02412860
## jm_gereja -0.0758045 0.02345216 -0.12661867 0.15676258
## jm_pt_asuhan 1.0000000 0.38631332 0.38134023 0.69769723
## jm_sar_olga 0.3863133 1.00000000 0.38920280 0.46126427
## jm_unit_usaha 0.3813402 0.38920280 1.00000000 0.12975561
## jm_perusaha_dgng 0.6976972 0.46126427 0.12975561 1.00000000
Untuk mempermudah membaca matriks, gunakan script di bawah ini untuk menampilkan cor_matrix dalam bentuk table interakti menggunakan fungsi kable()
# ini libray yang dibutuhkan untuk melihat table dengan fungsi kable(). Lakukan instalasi pada console
library(knitr)
library(kableExtra)
# Gunakan kable() dan kable_styling() dari kableExtra untuk memformat tabel
kable(cor_matrix, "html") %>% # yang diganti cor_matrix
kable_styling(full_width = F, position = "center", bootstrap_options = c("striped", "hover"))
Visualisasi matriks korelasi.
# install.packages("ggcorrplot") lakukan instalasi melalui console
library(ggcorrplot)
# melakukan visualisasi dengan corrplot
ggcorrplot(cor_matrix)
Setelah itu menghitung matriks kovarian.
cov_matrix <- cov(data_normalized)
cov_matrix
## jm_pg_list_per_desa jm_rs jm_puskes jm_sar_pel_kes
## jm_pg_list_per_desa 1.00000000 0.10736017 0.62306759 0.5334526
## jm_rs 0.10736017 1.00000000 0.14742169 0.5135389
## jm_puskes 0.62306759 0.14742169 1.00000000 0.7568643
## jm_sar_pel_kes 0.53345259 0.51353892 0.75686431 1.0000000
## jm_bl_pengobat 0.09075819 0.43143127 0.25554350 0.4273937
## jm_tk 0.45201122 0.61540390 0.35208517 0.7594839
## jm_pasar 0.26399151 0.74050240 0.31188553 0.7293233
## jm_kantorpos 0.47229456 0.14071951 0.43112260 0.5008953
## jm_toko 0.21261758 0.54200154 0.13652542 0.3936604
## jm_koperasi -0.11401629 -0.01776644 -0.05272038 -0.2307621
## jm_masjid 0.56198731 -0.02501314 0.56304210 0.6549277
## jm_gereja -0.28919350 0.05623205 -0.23857089 -0.1571539
## jm_pt_asuhan 0.27289106 0.63627114 0.41412469 0.7948496
## jm_sar_olga 0.54942211 0.45157121 0.45172461 0.5641230
## jm_unit_usaha 0.49277942 0.03626241 0.33095623 0.3376306
## jm_perusaha_dgng 0.03923567 0.87593592 0.13899151 0.5147440
## jm_bl_pengobat jm_tk jm_pasar jm_kantorpos
## jm_pg_list_per_desa 0.09075819 0.4520112 0.26399151 0.472294564
## jm_rs 0.43143127 0.6154039 0.74050240 0.140719509
## jm_puskes 0.25554350 0.3520852 0.31188553 0.431122600
## jm_sar_pel_kes 0.42739375 0.7594839 0.72932326 0.500895256
## jm_bl_pengobat 1.00000000 0.5066351 0.57360426 0.428972993
## jm_tk 0.50663515 1.0000000 0.85293191 0.445516275
## jm_pasar 0.57360426 0.8529319 1.00000000 0.350102724
## jm_kantorpos 0.42897299 0.4455163 0.35010272 1.000000000
## jm_toko 0.76248887 0.6370066 0.66056800 0.279480723
## jm_koperasi -0.09421053 -0.1329399 -0.13492554 0.006012109
## jm_masjid -0.00366982 0.4665723 0.33424830 0.409367696
## jm_gereja 0.18029270 -0.1134156 0.02432588 -0.303698880
## jm_pt_asuhan 0.37796494 0.8160571 0.76809035 0.255288720
## jm_sar_olga 0.56775837 0.4957281 0.54079099 0.443989071
## jm_unit_usaha 0.28421853 0.4458421 0.45522361 0.185347502
## jm_perusaha_dgng 0.64396797 0.7178706 0.80373991 0.147126292
## jm_toko jm_koperasi jm_masjid jm_gereja
## jm_pg_list_per_desa 0.21261758 -0.114016292 0.56198731 -0.28919350
## jm_rs 0.54200154 -0.017766440 -0.02501314 0.05623205
## jm_puskes 0.13652542 -0.052720382 0.56304210 -0.23857089
## jm_sar_pel_kes 0.39366041 -0.230762089 0.65492769 -0.15715391
## jm_bl_pengobat 0.76248887 -0.094210529 -0.00366982 0.18029270
## jm_tk 0.63700656 -0.132939871 0.46657229 -0.11341558
## jm_pasar 0.66056800 -0.134925538 0.33424830 0.02432588
## jm_kantorpos 0.27948072 0.006012109 0.40936770 -0.30369888
## jm_toko 1.00000000 0.030274212 0.02364894 0.23958437
## jm_koperasi 0.03027421 1.000000000 -0.36081945 -0.11704792
## jm_masjid 0.02364894 -0.360819453 1.00000000 -0.20611695
## jm_gereja 0.23958437 -0.117047918 -0.20611695 1.00000000
## jm_pt_asuhan 0.45643726 -0.217295588 0.52121257 -0.07580450
## jm_sar_olga 0.76422209 0.124184537 0.16384421 0.02345216
## jm_unit_usaha 0.39284854 -0.158630168 0.54411851 -0.12661867
## jm_perusaha_dgng 0.74720258 -0.045901940 0.02412860 0.15676258
## jm_pt_asuhan jm_sar_olga jm_unit_usaha jm_perusaha_dgng
## jm_pg_list_per_desa 0.2728911 0.54942211 0.49277942 0.03923567
## jm_rs 0.6362711 0.45157121 0.03626241 0.87593592
## jm_puskes 0.4141247 0.45172461 0.33095623 0.13899151
## jm_sar_pel_kes 0.7948496 0.56412302 0.33763055 0.51474405
## jm_bl_pengobat 0.3779649 0.56775837 0.28421853 0.64396797
## jm_tk 0.8160571 0.49572815 0.44584214 0.71787058
## jm_pasar 0.7680904 0.54079099 0.45522361 0.80373991
## jm_kantorpos 0.2552887 0.44398907 0.18534750 0.14712629
## jm_toko 0.4564373 0.76422209 0.39284854 0.74720258
## jm_koperasi -0.2172956 0.12418454 -0.15863017 -0.04590194
## jm_masjid 0.5212126 0.16384421 0.54411851 0.02412860
## jm_gereja -0.0758045 0.02345216 -0.12661867 0.15676258
## jm_pt_asuhan 1.0000000 0.38631332 0.38134023 0.69769723
## jm_sar_olga 0.3863133 1.00000000 0.38920280 0.46126427
## jm_unit_usaha 0.3813402 0.38920280 1.00000000 0.12975561
## jm_perusaha_dgng 0.6976972 0.46126427 0.12975561 1.00000000
Untuk mempermudah membaca matriks, gunakan script di bawah ini untuk menampilkan cov_matrix dalam bentuk table interakti menggunakan fungsi kable()
# Gunakan kable() dan kable_styling() dari kableExtra untuk memformat tabel
kable(cov_matrix, "html") %>%
kable_styling(full_width = F, position = "center", bootstrap_options = c("striped", "hover"))
Lalu, berikut adalah cara untuk menampilkan visualisasi matriks kovarian yang berbeda dengan library ggcorrplot yang digunakan khusus untuk plot korelasi (cukup ikuti saja)
# library yang dibutuhkan, lakukan instalasi dengan concole
library(ggplot2)
library(reshape2)
# Convert the covariance matrix into a long format for ggplot2
cov_matrix_long <- melt(cov_matrix)
# Create the heatmap
ggplot(cov_matrix_long, aes(Var1, Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(min(cov_matrix_long$value), max(cov_matrix_long$value)), name="Covariance") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), axis.title = element_blank()) +
labs(fill = "Covariance")
Coba visualisasikan kovarians data yang tidak dinormalisasi. Apa perbedaannya?
Lalu, melakukan uji KMO. Uji Kaiser-Meyer-Olkin (KMO) adalah ukuran yang digunakan untuk mengevaluasi kesesuaian data untuk analisis faktor. Uji KMO mengukur sejauh mana variabel di dalam set data berkorelasi dan oleh karena itu, apakah akan memberikan hasil yang reliable jika digunakan untuk analisis faktor atau PCA.
kmo_result <- KMO(data_normalized)
kmo_result
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = data_normalized)
## Overall MSA = 0.52
## MSA for each item =
## jm_pg_list_per_desa jm_rs jm_puskes jm_sar_pel_kes
## 0.54 0.61 0.47 0.54
## jm_bl_pengobat jm_tk jm_pasar jm_kantorpos
## 0.48 0.69 0.60 0.38
## jm_toko jm_koperasi jm_masjid jm_gereja
## 0.61 0.26 0.41 0.26
## jm_pt_asuhan jm_sar_olga jm_unit_usaha jm_perusaha_dgng
## 0.67 0.58 0.29 0.50
Hasil nilai KMO melebihi angka 0.5, maka data ini dapat dianalisis lebih lanjut melalui PCA (maupun CFA).
pca_result <- prcomp(data_normalized, scale = TRUE)
# *-1 untuk seluruh factor loading karena pada R negative menjadi default dalam hasil factor loading
pca_result$rotation <- -1*pca_result$rotation # pastikan command ini dirun berbarengan dengan prcomp
summary(pca_result)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.6484 1.6506 1.21572 1.09145 0.92806 0.87203 0.7430
## Proportion of Variance 0.4384 0.1703 0.09237 0.07445 0.05383 0.04753 0.0345
## Cumulative Proportion 0.4384 0.6087 0.70104 0.77549 0.82932 0.87685 0.9113
## PC8 PC9 PC10 PC11 PC12 PC13 PC14
## Standard deviation 0.69032 0.50184 0.47988 0.40952 0.36546 0.29309 0.2228
## Proportion of Variance 0.02978 0.01574 0.01439 0.01048 0.00835 0.00537 0.0031
## Cumulative Proportion 0.94113 0.95687 0.97127 0.98175 0.99010 0.99547 0.9986
## PC15 PC16
## Standard deviation 0.12119 0.09059
## Proportion of Variance 0.00092 0.00051
## Cumulative Proportion 0.99949 1.00000
Perhatikan juga bahwa vektor eigen dalam R menunjuk ke arah negatif secara default, jadi kita akan mengalikannya dengan -1 untuk membalikkan tandanya.
Fungsi prcomp ini menghasilkan nilai loading factor setiap component. Hasil di atas belum menampilkan informasi yang paling lengkap. Ikuti script di bawah ini untuk menampilkan informasi lain, terutama eigenvalue.
# Mendapatkan summary dari hasil PCA
pca_summary <- summary(pca_result)
# Eigenvalues dari hasil PCA
eigenvalues <- pca_result$sdev^2
# Proportion of variance
prop_variance <- pca_summary$importance[2,]
# Cumulative proportion
cumulative_prop <- pca_summary$importance[3,]
# Membuat data frame yang berisi informasi yang diinginkan
pca_data <- data.frame(
Eigenvalue = eigenvalues,
SD = pca_result$sdev,
Proportion_of_Variance = prop_variance,
Cumulative_Proportion = cumulative_prop
)
# Menampilkan data frame
pca_data
## Eigenvalue SD Proportion_of_Variance Cumulative_Proportion
## PC1 7.014242435 2.64844151 0.43839 0.43839
## PC2 2.724346436 1.65055943 0.17027 0.60866
## PC3 1.477977806 1.21572111 0.09237 0.70104
## PC4 1.191258929 1.09144809 0.07445 0.77549
## PC5 0.861298693 0.92806179 0.05383 0.82932
## PC6 0.760441278 0.87203284 0.04753 0.87685
## PC7 0.552052599 0.74300242 0.03450 0.91135
## PC8 0.476536304 0.69031609 0.02978 0.94113
## PC9 0.251839402 0.50183603 0.01574 0.95687
## PC10 0.230281994 0.47987706 0.01439 0.97127
## PC11 0.167708521 0.40952231 0.01048 0.98175
## PC12 0.133559364 0.36545775 0.00835 0.99010
## PC13 0.085901485 0.29308955 0.00537 0.99547
## PC14 0.049661151 0.22284782 0.00310 0.99857
## PC15 0.014686518 0.12118795 0.00092 0.99949
## PC16 0.008207085 0.09059296 0.00051 1.00000
Eigenvalues (Nilai Eigen): Nilai eigen dalam konteks PCA adalah ukuran varians yang dijelaskan oleh masing-masing komponen utama dalam data. Dalam analisis multivariat, nilai eigen menunjukkan berapa banyak varians dari variabel asli yang dapat dijelaskan oleh sebuah komponen utama. Sebagai contoh, nilai eigen yang besar menunjukkan bahwa komponen utama tersebut menjelaskan sebagian besar varians, dan biasanya komponen tersebut dianggap penting dalam menganalisis data.
Standard Deviation (Deviasi Standar): Deviasi standar dari komponen utama adalah akar kuadrat dari nilai eigen yang bersangkutan. Ini mengukur seberapa jauh nilai-nilai individu dalam komponen tersebut menyimpang dari rata-rata komponen. Dalam konteks PCA, deviasi standar ini memberikan informasi tentang penyebaran data di sepanjang sumbu komponen tersebut.
Proportion of Variance (Proporsi Varians): Proporsi varians menunjukkan persentase total varians dalam semua variabel yang dijelaskan oleh setiap komponen utama. Angka ini dihitung dengan membagi nilai eigen setiap komponen dengan jumlah total nilai eigen dari semua komponen. Proporsi varians membantu dalam menentukan pentingnya setiap komponen utama dalam menjelaskan struktur data.
Cumulative Proportion (Proporsi Kumulatif): Proporsi kumulatif adalah penjumlahan berurutan dari proporsi varians yang dijelaskan oleh komponen utama. Ini memberikan informasi tentang berapa banyak varians yang dijelaskan oleh semua komponen utama hingga titik tertentu dalam urutan. Sebagai contoh, jika dua komponen pertama memiliki proporsi varians 0.5 dan 0.3, proporsi kumulatif setelah dua komponen tersebut akan menjadi 0.8, yang menunjukkan bahwa kedua komponen tersebut bersama-sama menjelaskan 80% dari total varians.
Masing-masing ukuran ini memberikan insight yang berbeda-beda ke dalam data yang sedang dianalisis dan membantu dalam pengambilan keputusan tentang berapa banyak komponen utama yang harus dipertahankan dalam analisis lebih lanjut. Nilai eigen dan proporsi varians sering digunakan untuk menentukan komponen mana yang paling signifikan, sementara proporsi kumulatif digunakan untuk menentukan jumlah komponen yang dibutuhkan untuk menjelaskan sebagian besar varians dalam data.
Fokus pada nilai cumulative proportion, proportion % of variance dan eigenvalue untuk mengatahui berapa component yang signifikan menjelaskan variansi data. Dari cumulative proportion, kita bisa mengetahui bahwa 80an% variansi pada data sudah bisa direpresentasikan dengan 5 komponen. Untuk melihatnya lebih jelas, mari kita gunakan screeplot.
fviz_eig(pca_result, addlabels = TRUE)
Dari screeplot tersebut, kita bisa melihat proporsi varians setiap komponennya. Namun, untuk menentukan berapa komponen optimum yang bisa dihasilkan dari PCA ini kita akan menggunakan kriteria Kaiser untuk menentukannya. Kriteria Kaiser ini menggunakan eigenvalue sebagai patokannya. Jumlah komponen dipilih dengan melihat jumlah eigenvalue yang lebih dari 1.
Untuk memudahkannya, mari visualisasikan dalam screepolt dengan tambahan garis pada nilai 1 (y-axis). Ini merupakan kriteria Kasier yang disebut sebelumnya.
plot(eigenvalues, type = "b", main = "Scree Plot", xlab = "Principal Component", ylab = "Eigenvalue",
pch = 19, col = "blue")
abline(h = 1, col = "red", lty = 2)
Berdasarkan screeplit di atas, jumlah komponen yang cukup untuk merepresentasikan varians pada data adalah 4 komponen (berada di atas garis y=1). Dengan menggunakan 4 komponen ini, maka terdapat 77,55% variansi yang direpresentasikan oleh hasil PCA.
Maka dari itu kita akan berfokus pada 4 komponen tersebut.
# Memilih komponen
selected_components <- which(eigenvalues > 1)
# Mengekstrak loadings untuk komponen terpilih
selected_loadings <- pca_result$rotation[, selected_components]
# Menampilkan factor loadings pada componen terpilih.
selected_loadings
## PC1 PC2 PC3 PC4
## jm_pg_list_per_desa 0.20312532 -0.36699641 -0.20536346 0.09420081
## jm_rs 0.25560086 0.29643129 0.11494024 -0.32372883
## jm_puskes 0.21612446 -0.32753848 -0.11845268 -0.06855122
## jm_sar_pel_kes 0.32902132 -0.16259193 0.12115349 -0.13948803
## jm_bl_pengobat 0.24908516 0.22910618 -0.21194900 0.24613590
## jm_tk 0.33834919 0.02123576 0.11857712 -0.10221432
## jm_pasar 0.33458644 0.13535679 0.13593532 -0.05821116
## jm_kantorpos 0.20080935 -0.20620537 -0.31823132 -0.10146031
## jm_toko 0.27635613 0.27793478 -0.23469958 0.26714812
## jm_koperasi -0.06034412 0.10889471 -0.54544330 -0.38576702
## jm_masjid 0.19142023 -0.41881621 0.26529325 0.11947838
## jm_gereja -0.02622046 0.31984169 0.12701755 0.53203177
## jm_pt_asuhan 0.31074298 0.01165945 0.32333266 -0.17257872
## jm_sar_olga 0.27474644 0.03833675 -0.42518627 0.15283398
## jm_unit_usaha 0.19805276 -0.20146441 -0.01006407 0.43001742
## jm_perusaha_dgng 0.28466187 0.34775960 0.11241875 -0.14792725
Untuk mempermudah interpretasi, selanjutnya kita akan melakukan visualisasi PCA dengan Cos2 dan Biplot.
Barplot Cos2:Nilai Cos2 mengukur kualitas representasi variabel pada dua dimensi pertama dari PCA (Dim1-2).
fviz_cos2(pca_result, choice = "var", axes = 1:2)
Berdasarkan grafik Cos2, kita dapat memberikan interpretasi mengenai seberapa baik setiap variabel diwakili oleh dua komponen utama pertama dari PCA:
Variabel dengan Representasi Tinggi pada Dim1(PC1) dan Dim2(PC2) (berdasarkan nilai Cos2):
jm_perusaha_dgng
memiliki nilai Cos2 yang
paling tinggi, yang menunjukkan bahwa variabel ini sangat relevan dalam
menjelaskan variabilitas dalam data yang ditangkap oleh dua komponen
utama pertama. Ini berarti bahwa jumlah perusahaan dagang memiliki
korelasi yang kuat dengan faktor-faktor yang diwakili oleh komponen
utama ini.
Variabel lain seperti jm_pasar
,
jm_sar_pel_kes
, jm_tk
, jm_toko
,
dan jm_masjid
juga memiliki nilai Cos2 yang
tinggi, yang menunjukkan bahwa mereka juga diwakili dengan baik oleh
komponen utama pertama dan kedua. Mereka memiliki kontribusi yang
signifikan dalam menjelaskan variabilitas pada Dim1 dan Dim2.
Variabel dengan Representasi Moderat pada Dim1 dan Dim2:
Variabel seperti jm_rs
, jm_asuhan
,
jm_puskes
, dan jm_pg_list_per_desa
memiliki
nilai Cos2 yang moderat. Ini menunjukkan bahwa meskipun
mereka diwakili cukup baik oleh Dim1 dan Dim2, kontribusi mereka tidak
sekuat variabel dengan nilai Cos2 yang lebih tinggi.
Variabel dengan Representasi Rendah pada Dim1 dan Dim2:
jm_koperasi
memiliki nilai Cos2 yang
terendah, yang menunjukkan bahwa variabel ini memiliki korelasi yang
lebih lemah dengan Dim1 dan Dim2 dibandingkan dengan variabel lain dalam
analisis. Representasinya pada komponen utama ini terbatas, yang berarti
tidak banyak informasi tentang jumlah koperasi yang dijelaskan oleh dua
dimensi pertama PCA.
Bagaimana dengan Cos2 pada komponen lain?
# untuk seluruh komponen
fviz_cos2(pca_result, choice = "var", axes = 1:4)
Bisa berikan interpretasi?
Biplot
Biplot ini untuk menampilkan korelasi antara variabel dan komponen.
# Visualisasi biplot dengan fviz_pca_biplot (Dim1 vs Dim2)
fviz_pca_biplot(pca_result, col.var = "contrib", col.ind = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE, # Menghindari overlapping text
cex = 0.7) # Mengatur ukuran teks
## Warning: Duplicated aesthetics after name standardisation: size
Dalam konteks biplot, hubungan antara variabel dan Dim1 dan Dim2 dapat diinterpretasikan sebagai berikut:
Apakah kalian bisa mencoba menginterpretasikannya? Berikut adalah beberapa interpretasi yang bisa diambil:
jm_perusaha_dgng
, jm_toko
, dan
jm_pasar
) memiliki korelasi yang kuat dengan komponen
tersebut (Dim & Dim2). Ini menunjukkan bahwa variabel-variabel
tersebut penting dalam membentuk komponen tersebut dan menjelaskan
sejumlah besar variabilitas dalam data.jm_gereja
memiliki orientasi yang lebih mendekati sumbu
vertikal (PC2), menunjukkan bahwa variabel ini lebih berkaitan dengan
PC2 daripada PC1.jm_koperasi
) memiliki korelasi yang lebih lemah dengan
kedua komponen, menunjukkan bahwa mereka kurang penting dalam
menjelaskan variabilitas yang ditangkap oleh PC1 dan PC2.Biplot di atas hanya bisa menampilkan perbandingan antara komponen 1 (Dim1) dan komponen 2 (Dim2). Mari membuat seluruh perbandingannya untuk 4 komponen terpilih.
# Dim1 vs Dim3
fviz_pca_biplot(pca_result, col.var = "contrib", col.ind = "cos2",
axes = c(1, 3),
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
cex = 0.7)
## Warning: Duplicated aesthetics after name standardisation: size
# Dim1 vs Dim4
fviz_pca_biplot(pca_result, col.var = "contrib", col.ind = "cos2",
axes = c(1, 4),
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
cex = 0.7)
## Warning: Duplicated aesthetics after name standardisation: size
# Dim2 vs Dim3
fviz_pca_biplot(pca_result, col.var = "contrib", col.ind = "cos2",
axes = c(2, 3),
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
cex = 0.7)
## Warning: Duplicated aesthetics after name standardisation: size
# Dim2 vs Dim4
fviz_pca_biplot(pca_result, col.var = "contrib", col.ind = "cos2",
axes = c(2, 4),
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
cex = 0.7)
## Warning: Duplicated aesthetics after name standardisation: size
# Dim3 vs Dim4
fviz_pca_biplot(pca_result, col.var = "contrib", col.ind = "cos2",
axes = c(3, 4),
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
cex = 0.7)
## Warning: Duplicated aesthetics after name standardisation: size
Meskipun sudah melakukan visualisasi, interpretasi setiap komponen masih dirasa sulit. Maka dari itu, rotasi hasil PCA dilakukan untuk mempermudah interpretasi.
Setelah menentukan jumlah komponen yang akan dipertahankan menggunakan Kriteria Kaiser atau metode lainnya, melakukan rotasi faktor merupakan langkah selanjutnya yang umum dalam PCA dan analisis faktor. Rotasi dilakukan untuk memudahkan interpretasi hasil dengan mencoba menyederhanakan struktur faktor atau komponen. Berikut adalah beberapa alasan mengapa rotasi seperti varimax atau promax digunakan:
Memperjelas Struktur Faktor: Rotasi membantu dalam membuat struktur faktor lebih jelas dengan memaksimalkan varians yang dijelaskan oleh setiap faktor dan meminimalkan beban lintas faktor. Ini berarti setiap faktor akan memiliki sejumlah kecil variabel dengan beban yang tinggi dan sebanyak mungkin variabel dengan beban yang rendah atau nol. Hal ini memudahkan interpretasi karena setiap faktor cenderung dihubungkan dengan variabel tertentu yang paling relevan dengan faktor tersebut.
Varimax Rotation: Varimax adalah metode rotasi ortogonal yang bertujuan untuk memaksimalkan varians kuadrat dari beban faktor. Dengan kata lain, varimax berusaha untuk membuat beban faktor setinggi mungkin pada satu faktor dan serendah mungkin pada faktor lain, yang membantu dalam menentukan variabel mana yang paling penting untuk setiap faktor. Ini adalah metode yang paling sering digunakan karena mempertahankan keortogonalan faktor, artinya faktor yang dihasilkan tetap tidak berkorelasi satu sama lain.
Promax Rotation: Promax adalah metode rotasi oblik yang memungkinkan faktor untuk berkorelasi satu sama lain. Metode ini berguna ketika asumsi keortogonalan faktor tidak realistis atau ketika ada alasan teoretis untuk percaya bahwa faktor-faktor harus berkorelasi. Promax sering digunakan jika hasil rotasi varimax masih menyulitkan interpretasi atau jika peneliti memiliki alasan teoretis untuk mengharapkan bahwa faktor-faktor berkorelasi.
Mempermudah Interpretasi: Dengan membuat faktor lebih mudah diinterpretasikan, rotasi dapat membantu peneliti dalam memahami bagaimana variabel berkontribusi terhadap konstruksi faktor. Interpretasi yang lebih mudah ini penting untuk penggunaan praktis dari hasil analisis faktor, seperti dalam pengembangan kuesioner atau untuk penelitian lebih lanjut.
Meningkatkan Replikabilitas: Rotasi dapat membantu dalam memperoleh solusi faktor yang lebih stabil yang lebih mungkin direplikasi dalam studi lain dengan sampel yang berbeda atau dalam kondisi yang berbeda.
Dalam praktiknya, pemilihan antara rotasi varimax dan promax (atau metode rotasi lainnya) sering didasarkan pada pertimbangan teoretis dan analisis eksplorasi dari data. Selalu penting untuk mempertimbangkan konteks penelitian dan sifat dari data ketika memilih metode rotasi.
# Memuat paket yang diperlukan untuk rotasi, lakukan instalasi melalui console
library(GPArotation)
##
## Attaching package: 'GPArotation'
## The following objects are masked from 'package:psych':
##
## equamax, varimin
# Melakukan rotasi Varimax
rotated_varimax <- varimax(selected_loadings)
# Mencetak hasil rotasi
rotated_varimax
## $loadings
##
## Loadings:
## PC1 PC2 PC3 PC4
## jm_pg_list_per_desa -0.439 0.148
## jm_rs 0.455 -0.235
## jm_puskes -0.406
## jm_sar_pel_kes 0.313 -0.234 0.106
## jm_bl_pengobat -0.465
## jm_tk 0.355
## jm_pasar 0.373 -0.104
## jm_kantorpos -0.412 -0.102 -0.118
## jm_toko -0.523
## jm_koperasi -0.100 -0.231 -0.626
## jm_masjid -0.240 0.174 0.446
## jm_gereja 0.411 -0.374 0.293
## jm_pt_asuhan 0.449 0.126 0.118
## jm_sar_olga -0.268 -0.447
## jm_unit_usaha -0.156 -0.249 0.414
## jm_perusaha_dgng 0.420 0.154 -0.139 -0.132
##
## PC1 PC2 PC3 PC4
## SS loadings 1.000 1.000 1.000 1.000
## Proportion Var 0.062 0.062 0.062 0.062
## Cumulative Var 0.062 0.125 0.187 0.250
##
## $rotmat
## [,1] [,2] [,3] [,4]
## [1,] 0.7566935 -0.4422376 -0.4394085 0.1968781
## [2,] 0.2766626 0.7316503 -0.4520260 -0.4287403
## [3,] 0.4376439 0.4804877 0.5188794 0.5553050
## [4,] -0.3991749 0.1955644 -0.5773707 0.6848774
Berdasarkan hasil rotasi Varimax , kita dapat melakukan interpretasi sebagai berikut:
jm_rs
(0.455), jm_sar_pel_kes
(0.313),
jm_tk
(0.355), jm_pasar
(0.373),
jm_pt_asuhan
(0.449), dan jm_perusaha_dgng
(0.420) memiliki loadings yang signifikan pada PC1. Ini menunjukkan
bahwa komponen ini mungkin berkaitan dengan aspek layanan dan
ekonomi, seperti kesehatan, perdagangan, dan bisnis.jm_pg_list_per_desa
(-0.439), jm_puskes
(-0.406), jm_kantorpos
(-0.412), jm_masjid
(-0.240), jm_sar_olga
(-0.268), dan
jm_unit_usaha
(-0.156) memiliki loadings negatif yang
signifikan pada PC2. Loadings negatif ini menunjukkan bahwa ada hubungan
yang berlawanan antara variabel-variabel ini dengan faktor yang diwakili
oleh PC2.jm_gereja
(0.411) memiliki loading positif yang
signifikan, menunjukkan bahwa variabel ini memiliki hubungan positif
dengan faktor yang diwakili oleh PC2, yang mungkin berkaitan dengan
keberadaan atau pengaruh fasilitas keagamaan dalam
data.jm_masjid
(0.174) dan
jm_pt_asuhan
(0.126) memiliki loading positif yang paling
signifikan, menunjukkan bahwa variabel ini memiliki hubungan positif
dengan faktor yang diwakili PC3. Faktor ini bisa diinterpretasikan
dengan kegiatan sosial dan keagamaan.jm_pg_list_per_desa
(0.148),
jm_sar_pel_kes
(0.106), jm_pt_asuhan
(0.126),
dan jm_unit_usaha
(0.414) menunjukkan kontribusi positif
pada PC4. Ini menunjukkan bahwa mereka berkaitan dengan faktor-faktor
yang diwakili oleh komponen ini. Apa maksud dari komponen ini?# Melakukan rotasi Promax
rotated_promax <- promax(selected_loadings)
# Mencetak hasil rotasi
rotated_promax
## $loadings
##
## Loadings:
## PC1 PC2 PC3 PC4
## jm_pg_list_per_desa -0.120 -0.431
## jm_rs 0.483 -0.166
## jm_puskes -0.415
## jm_sar_pel_kes 0.283 -0.245 0.105
## jm_bl_pengobat -0.470
## jm_tk 0.341 -0.103
## jm_pasar 0.370 -0.129
## jm_kantorpos -0.428 -0.105 -0.204
## jm_toko -0.529
## jm_koperasi -0.283 -0.692
## jm_masjid -0.224 0.153 0.430
## jm_gereja 0.476 -0.372 0.333
## jm_pt_asuhan 0.433 0.179
## jm_sar_olga -0.252 -0.448 -0.182
## jm_unit_usaha -0.130 -0.106 -0.258 0.361
## jm_perusaha_dgng 0.445 0.145 -0.159
##
## PC1 PC2 PC3 PC4
## SS loadings 1.007 1.073 1.011 1.072
## Proportion Var 0.063 0.067 0.063 0.067
## Cumulative Var 0.063 0.130 0.193 0.260
##
## $rotmat
## [,1] [,2] [,3] [,4]
## [1,] 0.7088105 -0.4293356 -0.4993521 0.1705043
## [2,] 0.3790032 0.7402017 -0.4485877 -0.2981284
## [3,] 0.4076609 0.4944740 0.4863106 0.7394700
## [4,] -0.4415380 0.3099086 -0.5695113 0.6377707
jm_rs
(0.483), jm_tk
(0.341),
jm_pasar
(0.370), jm_pt_asuhan
(0.433),
jm_perusaha_dgng
(0.445) memiliki loadings positif yang
signifikan pada PC1, menunjukkan bahwa komponen ini berkaitan dengan
aspek kesehatan, perdagangan, dan layanan sosial.jm_pg_list_per_desa
(-0.431), jm_puskes
(-0.415), jm_kantorpos
(-0.428), jm_sar_olga
(-0.252) memiliki loadings negatif yang signifikan, menunjukkan bahwa
PC2 berkorelasi negatif dengan keberadaan infrastruktur dan
layanan umum.jm_gereja
(0.476) memiliki loading positif yang
signifikan pada PC2, menunjukkan bahwa keberadaan gereja
berkorelasi positif dengan faktor yang diwakili oleh PC2.jm_bl_pengobat
(-0.470) memiliki loading negatif yang
signifikan, menunjukkan bahwa PC3 berkorelasi negatif dengan
jumlah balai pengobatan.jm_masjid
(0.430) dan jm_gereja
(0.333)
memiliki loading positif yang signifikan, menunjukkan bahwa PC3
berkaitan dengan keberadaan fasilitas keagamaan.jm_koperasi
(-0.692) memiliki loading negatif yang
sangat signifikan, yang menunjukkan bahwa jumlah koperasi
berkorelasi negatif dengan faktor yang diwakili oleh PC4.jm_unit_usaha
(0.361) memiliki loading positif, yang
bisa menunjukkan hubungan positif dengan aspek
ekonomi.Notes: Hasil interpretasi komponen atau faktor ini akan sangat bergantung dengan tujuan penelitian dan data yang digunakan.
Hasil ini nantinya akan digunakan untuk mengelompokkan kembali setiap kecamatan berdasarkan komponen-komponen hasil PCA.
Mehitung scores untuk setiap data yang kita gunakan pada setiap komponennya.
# hanya mengambil nama kecamatan
nama_kecamatan <- data[, 1]
# Menghitung skor PCA dengan predict pada objek pca_result
pca_scores <- predict(pca_result, data_normalized)
# Memilih hanya skor untuk empat komponen utama pertama berdasarkan kriteria Kaiser
selected_pca_scores <- pca_scores[, selected_components]
# Menggabungkan nama kecamatan dengan skor PCA terpilih
final_data_pca <- data.frame(nama_kecamatan, selected_pca_scores)
final_data_pca
## nama_kecamatan PC1 PC2 PC3 PC4
## 1 SAGALAHERANG 0.5970823 -1.1373524 0.92639726 -0.96138239
## 2 JALANCAGAK 3.4758934 -3.7295386 0.88965045 -0.07815425
## 3 CISALAK 0.5693243 -1.3325562 0.84047796 0.64415529
## 4 TANJUNGSIANG 0.8649522 -1.1115754 1.20900020 -0.24379799
## 5 CIJAMBE -1.8423048 -0.2154978 1.53435169 0.04624849
## 6 CIBOGO -3.7211857 2.7494040 1.88592654 1.79612616
## 7 SUBANG 8.3939777 4.3147457 0.92810669 -1.34538118
## 8 KALIJATI 0.8156683 -0.6999993 -0.18820198 -1.09581239
## 9 CIPEUNDEUY -1.8952091 0.9247330 0.45615093 -0.47706200
## 10 PABUARAN -0.2139969 -0.1096462 -0.25664041 0.69238856
## 11 PATOKBEUSI -0.2249631 -0.6231405 0.21403056 -0.82671865
## 12 PURWADADI 0.3042557 0.3579925 -0.26864831 1.12870296
## 13 CIKAUM -2.6481412 0.6012551 0.56587910 0.05708107
## 14 PAGADEN 1.8131876 -1.9521583 0.06401744 0.91402614
## 15 CIPUNAGARA -1.7339266 -0.7329888 0.67236922 -0.55592676
## 16 COMPRENG -2.2707055 0.8072842 -0.11919622 -0.72577661
## 17 BINONG 0.6879034 -1.0694551 -1.50357257 0.25420634
## 18 CIASEM 1.5796682 0.4128773 -1.07242488 2.28640732
## 19 PAMANUKAN 1.7760236 1.2658380 -2.42666111 1.58731342
## 20 PUSAKANAGARA -0.7411664 -0.4930667 -1.48730670 -0.10003775
## 21 LEGONKULON -3.4653138 1.5220600 -0.08695843 -0.89745757
## 22 BLANAKAN -2.1210238 0.2507854 -2.77674742 -2.09914820
Melakukan klasifikasi (rendah, sedang, tinggi). Cukup run saja untuk konteks ini.
# Fungsi untuk mengklasifikasikan skor ke dalam kategori rendah, sedang, tinggi
klasifikasi_skor <- function(skor) {
rentang <- (max(skor) - min(skor)) / 3 # berdasarkan (max-min)/3
batas_rendah <- min(skor) + rentang
batas_tinggi <- max(skor) - rentang
kategori <- ifelse(skor <= batas_rendah, 'rendah',
ifelse(skor > batas_rendah & skor < batas_tinggi, 'sedang', 'tinggi'))
return(kategori)
}
# Melakukan klasifikasi untuk setiap komponen PCA dan menambahkannya ke data frame
for (i in 2:ncol(final_data_pca)) {
kolom_skor <- final_data_pca[, i]
kolom_klasifikasi <- paste0('Klasifikasi_', names(final_data_pca)[i])
final_data_pca[kolom_klasifikasi] <- klasifikasi_skor(kolom_skor)
}
# Data frame final_data_pca sekarang berisi klasifikasi untuk setiap skor PCA
final_data_pca
## nama_kecamatan PC1 PC2 PC3 PC4 Klasifikasi_PC1
## 1 SAGALAHERANG 0.5970823 -1.1373524 0.92639726 -0.96138239 sedang
## 2 JALANCAGAK 3.4758934 -3.7295386 0.88965045 -0.07815425 sedang
## 3 CISALAK 0.5693243 -1.3325562 0.84047796 0.64415529 sedang
## 4 TANJUNGSIANG 0.8649522 -1.1115754 1.20900020 -0.24379799 sedang
## 5 CIJAMBE -1.8423048 -0.2154978 1.53435169 0.04624849 rendah
## 6 CIBOGO -3.7211857 2.7494040 1.88592654 1.79612616 rendah
## 7 SUBANG 8.3939777 4.3147457 0.92810669 -1.34538118 tinggi
## 8 KALIJATI 0.8156683 -0.6999993 -0.18820198 -1.09581239 sedang
## 9 CIPEUNDEUY -1.8952091 0.9247330 0.45615093 -0.47706200 rendah
## 10 PABUARAN -0.2139969 -0.1096462 -0.25664041 0.69238856 rendah
## 11 PATOKBEUSI -0.2249631 -0.6231405 0.21403056 -0.82671865 rendah
## 12 PURWADADI 0.3042557 0.3579925 -0.26864831 1.12870296 rendah
## 13 CIKAUM -2.6481412 0.6012551 0.56587910 0.05708107 rendah
## 14 PAGADEN 1.8131876 -1.9521583 0.06401744 0.91402614 sedang
## 15 CIPUNAGARA -1.7339266 -0.7329888 0.67236922 -0.55592676 rendah
## 16 COMPRENG -2.2707055 0.8072842 -0.11919622 -0.72577661 rendah
## 17 BINONG 0.6879034 -1.0694551 -1.50357257 0.25420634 sedang
## 18 CIASEM 1.5796682 0.4128773 -1.07242488 2.28640732 sedang
## 19 PAMANUKAN 1.7760236 1.2658380 -2.42666111 1.58731342 sedang
## 20 PUSAKANAGARA -0.7411664 -0.4930667 -1.48730670 -0.10003775 rendah
## 21 LEGONKULON -3.4653138 1.5220600 -0.08695843 -0.89745757 rendah
## 22 BLANAKAN -2.1210238 0.2507854 -2.77674742 -2.09914820 rendah
## Klasifikasi_PC2 Klasifikasi_PC3 Klasifikasi_PC4
## 1 rendah tinggi rendah
## 2 rendah tinggi sedang
## 3 rendah tinggi sedang
## 4 rendah tinggi sedang
## 5 sedang tinggi sedang
## 6 tinggi tinggi tinggi
## 7 tinggi tinggi rendah
## 8 sedang sedang rendah
## 9 sedang tinggi sedang
## 10 sedang sedang sedang
## 11 sedang sedang rendah
## 12 sedang sedang tinggi
## 13 sedang tinggi sedang
## 14 rendah sedang tinggi
## 15 sedang tinggi sedang
## 16 sedang sedang rendah
## 17 rendah rendah sedang
## 18 sedang sedang tinggi
## 19 sedang rendah tinggi
## 20 sedang rendah sedang
## 21 sedang sedang rendah
## 22 sedang rendah rendah
Dari hasil tersebut mari kita lihat kecamatan apa saja yang tertinggi pada setiap PC
# Cari dan tampilkan kecamatan dengan klasifikasi 'tinggi' untuk setiap komponen PCA
for (i in 2:ncol(final_data_pca)) {
if (grepl('Klasifikasi_PC', names(final_data_pca)[i])) {
cat('Kecamatan dengan klasifikasi "tinggi" untuk', names(final_data_pca)[i], ":\n")
tinggi <- final_data_pca[final_data_pca[, i] == 'tinggi', ]
print(tinggi[, c('nama_kecamatan', names(final_data_pca)[i])])
cat('\n')
}
}
## Kecamatan dengan klasifikasi "tinggi" untuk Klasifikasi_PC1 :
## nama_kecamatan Klasifikasi_PC1
## 7 SUBANG tinggi
##
## Kecamatan dengan klasifikasi "tinggi" untuk Klasifikasi_PC2 :
## nama_kecamatan Klasifikasi_PC2
## 6 CIBOGO tinggi
## 7 SUBANG tinggi
##
## Kecamatan dengan klasifikasi "tinggi" untuk Klasifikasi_PC3 :
## nama_kecamatan Klasifikasi_PC3
## 1 SAGALAHERANG tinggi
## 2 JALANCAGAK tinggi
## 3 CISALAK tinggi
## 4 TANJUNGSIANG tinggi
## 5 CIJAMBE tinggi
## 6 CIBOGO tinggi
## 7 SUBANG tinggi
## 9 CIPEUNDEUY tinggi
## 13 CIKAUM tinggi
## 15 CIPUNAGARA tinggi
##
## Kecamatan dengan klasifikasi "tinggi" untuk Klasifikasi_PC4 :
## nama_kecamatan Klasifikasi_PC4
## 6 CIBOGO tinggi
## 12 PURWADADI tinggi
## 14 PAGADEN tinggi
## 18 CIASEM tinggi
## 19 PAMANUKAN tinggi
Hasil ini bisa disesuaikan dengan interpretasi analisis PCA sebelumnya baik dari promax maupun varimax.
Selanjutnya, kita akan melakukan CFA. CFA ini juga biasa disebut sebagai Exploratory Factor Analysis (EFA) karena sifatnya yang eksploratif untuk menangkap variabel-variabel laten.
CFA pertama dilakukan dengan menggunakan jumlah faktor secara utuh (seluruh variabel).
# parallel analysis ini menggunakan matrix correlation untuk menghasilkan screeplot untuk kriteria kaiser
fa.parallel(cor_matrix, fm="minres", fa="both")
## Warning in fa.parallel(cor_matrix, fm = "minres", fa = "both"): It seems as if
## you are using a correlation matrix, but have not specified the number of cases.
## The number of subjects is arbitrarily set to be 100
## Parallel analysis suggests that the number of factors = 3 and the number of components = 3
Dari hasil parallel analysis scree plot di atas, angka faktor yang direkomendasikan adalah 3 faktor. Hasil ini berbeda dengan hasil PCA.
# Gantilah 'n' dengan jumlah faktor yang diestimasi dari Langkah 2
n <- 3
efa_result <- fa(data_normalized, nfactors=n, fm="minres")
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
efa_result
## Factor Analysis using method = minres
## Call: fa(r = data_normalized, nfactors = n, fm = "minres")
## Standardized loadings (pattern matrix) based upon correlation matrix
## MR1 MR2 MR3 h2 u2 com
## jm_pg_list_per_desa -0.19 0.75 0.35 0.67 0.328 1.6
## jm_rs 0.80 -0.16 0.10 0.67 0.328 1.1
## jm_puskes -0.01 0.69 0.21 0.56 0.442 1.2
## jm_sar_pel_kes 0.51 0.63 0.07 0.87 0.132 2.0
## jm_bl_pengobat 0.36 -0.07 0.55 0.58 0.421 1.8
## jm_tk 0.69 0.34 0.13 0.81 0.185 1.5
## jm_pasar 0.80 0.16 0.15 0.85 0.147 1.1
## jm_kantorpos -0.03 0.47 0.37 0.39 0.615 1.9
## jm_toko 0.40 -0.15 0.71 0.87 0.126 1.7
## jm_koperasi -0.22 -0.20 0.26 0.11 0.885 2.9
## jm_masjid 0.14 0.87 -0.22 0.80 0.204 1.2
## jm_gereja 0.16 -0.40 0.06 0.16 0.845 1.4
## jm_pt_asuhan 0.85 0.33 -0.17 0.85 0.147 1.4
## jm_sar_olga 0.03 0.23 0.84 0.84 0.155 1.1
## jm_unit_usaha 0.08 0.45 0.21 0.32 0.681 1.5
## jm_perusaha_dgng 0.94 -0.26 0.16 0.97 0.029 1.2
##
## MR1 MR2 MR3
## SS loadings 4.47 3.41 2.46
## Proportion Var 0.28 0.21 0.15
## Cumulative Var 0.28 0.49 0.65
## Proportion Explained 0.43 0.33 0.24
## Cumulative Proportion 0.43 0.76 1.00
##
## With factor correlations of
## MR1 MR2 MR3
## MR1 1.00 0.24 0.43
## MR2 0.24 1.00 0.15
## MR3 0.43 0.15 1.00
##
## Mean item complexity = 1.5
## Test of the hypothesis that 3 factors are sufficient.
##
## df null model = 120 with the objective function = 19.37 with Chi Square = 287.31
## df of the model are 75 and the objective function was 6.76
##
## The root mean square of the residuals (RMSR) is 0.06
## The df corrected root mean square of the residuals is 0.08
##
## The harmonic n.obs is 22 with the empirical chi square 20.27 with prob < 1
## The total n.obs was 22 with Likelihood Chi Square = 86.75 with prob < 0.17
##
## Tucker Lewis Index of factoring reliability = 0.854
## RMSEA index = 0.07 and the 90 % confidence intervals are 0 0.157
## BIC = -145.08
## Fit based upon off diagonal values = 0.98
Hasil analisis faktor menunjukkan beberapa informasi statistik penting. Berikut adalah interpretasi umum dari output tersebut:
Loadings dan Varians:
Korelasi Antara Faktor:
Uji Hipotesis bahwa 3 Faktor Cukup:
Indeks Kepercayaan dan RMSEA:
BIC (Bayesian Information Criterion):
Fit Berdasarkan Nilai Off-Diagonal:
Secara keseluruhan, model CFA/EFA dengan 3 faktor menunjukkan fit yang baik ke data. Output memberikan keyakinan bahwa tiga faktor yang diekstrak secara memadai menjelaskan struktur varians dalam data.
Berdasarkan output dataframe, berikut adalah interpretasi untuk setiap bagian dari output:
Loadings Faktor:
MR1
, MR2
, dan MR3
merepresentasikan loading faktor dari masing-masing faktor pada variabel
yang dianalisis. Nilai-nilai ini menunjukkan seberapa kuat hubungan
antara variabel dan faktor yang bersangkutan.jm_rs
memiliki loading yang sangat
tinggi pada MR2
(0.80), menandakan bahwa variabel ini
sangat berkaitan dengan faktor kedua dalam struktur data Anda.jm_masjid
memiliki loading tertinggi pada
MR3
(0.87), menunjukkan bahwa variabel ini paling berkaitan
dengan faktor ketiga.Komunalitas (h2):
h2
menunjukkan komunalitas untuk setiap variabel,
yang merupakan proporsi varians dari variabel yang dijelaskan oleh semua
faktor yang diekstrak. Sebagai contoh, jm_toko
memiliki
komunalitas 0.87, yang berarti 87% dari varians jm_toko
dijelaskan oleh ketiga faktor yang ada.Keunikan (u2):
u2
menunjukkan keunikan, yaitu proporsi varians
yang tidak dijelaskan oleh model faktor. Ini adalah bagian dari varians
yang unik untuk variabel itu sendiri dan tidak dibagi dengan variabel
lain. Misalnya, jm_pg_list_per_desa
memiliki keunikan
sebesar 0.67, menunjukkan bahwa sebagian besar variansnya unik dan tidak
dijelaskan oleh faktor-faktor dalam model.Compleksitas (com):
com
menunjukkan kompleksitas variabel, dengan
nilai yang lebih besar dari 1 menandakan bahwa variabel memiliki loading
yang signifikan pada lebih dari satu faktor. Misalnya,
jm_sar_pel_kes
dengan nilai kompleksitas 1.95, menunjukkan
bahwa variabel ini memiliki hubungan yang cukup kuat dengan lebih dari
satu faktor.Secara keseluruhan, interpretasi dari hasil analisis faktor ini memberikan pandangan tentang bagaimana variabel berkorelasi dengan faktor-faktor tertentu dan memberikan informasi tentang struktur yang mendasari dataset Anda. Variabel dengan loading tinggi pada faktor tertentu dapat diinterpretasikan sebagai berkaitan erat dengan konstruksi yang diwakili oleh faktor tersebut. Komunalitas tinggi menunjukkan variabel yang dijelaskan dengan baik oleh model faktor, sedangkan keunikan tinggi menunjukkan variabel yang memiliki banyak informasi yang tidak berkaitan dengan faktor lain dalam model.
MR1
, MR2
, dan MR3
merepresentasikan loading faktor dari masing-masing faktor pada variabel
yang dianalisis. Nilai-nilai ini menunjukkan seberapa kuat hubungan
antara variabel dan faktor yang bersangkutan.jm_rs
memiliki loading yang sangat
tinggi pada MR2
(0.80), menandakan bahwa variabel ini
sangat berkaitan dengan faktor kedua dalam struktur data Anda.jm_masjid
memiliki loading tertinggi pada
MR3
(0.87), menunjukkan bahwa variabel ini paling berkaitan
dengan faktor ketiga.Untuk melakukan visualisasi, CFA/EFA memiliki pendekatan yang berbeda. Kali ini kita akan menggunakan fungsi fa.diagram() untuk menampilkan hasil analisis faktor.
fa.diagram(efa_result)
Berdasarkan diagram di atas, ini adalah representasi grafis dari loadings faktor untuk setiap variabel pada tiga faktor yang diekstrak (MR1, MR2, MR3). Berikut interpretasi dari diagram tersebut:
MR1: Faktor pertama ini memiliki loadings tinggi
dari variabel yang berkaitan dengan aktivitas ekonomi dan sosial,
seperti jm_perusaha_dgng
(perusahaan dagang),
jm_pt_asuhan
(panti asuhan), jm_pasar
(pasar),
jm_rs
(rumah sakit), jm_tk
(toko), dan
jm_masjid
(masjid). Ini menunjukkan bahwa MR1 mungkin
merepresentasikan dimensi ekonomi dan sosial dari
data.
MR2: Faktor kedua memiliki loadings tinggi dari
variabel jm_pg_list_per_desa
(pegawai listrik per desa),
jm_puskes
(puskesmas), jm_sar_pel_kes
(sarana
pelayanan kesehatan), jm_kantorpos
(kantor pos), dan
jm_unit_usaha
(unit usaha), yang bisa diinterpretasikan
sebagai faktor yang berkaitan dengan infrastruktur dan layanan
masyarakat. Variabel jm_gereja
(gereja) memiliki
korelasi negatif dengan faktor MR2 yang menunjukkan hubungan terbalik
dengan faktornya.
MR3: Faktor ketiga memiliki loadings tinggi dari
variabel jm_sar_olga
(sarana olahraga),
jm_toko
(toko), jm_bl_pengobat
(balai
pengobatan), dan jm_koperasi
(koperasi). Faktor ini mungkin
menangkap aspek yang berkaitan dengan layanan kesehatan,
rekreasi, dan ekonomi lokal.
Korelasi antar Faktor: Diagram ini juga menunjukkan adanya korelasi antara faktor-faktor, yang diindikasikan dengan garis berduri merah. Contohnya, ada korelasi sebesar 0.4 antara MR2 dan MR3, yang berarti bahwa terdapat hubungan moderat antara faktor infrastruktur dan layanan masyarakat dengan faktor layanan kesehatan dan rekreasi.
Kesimpulan yang dapat diambil dari diagram ini adalah bahwa terdapat tiga faktor yang mendasari struktur variabel dalam data Anda, dengan masing-masing faktor mewakili berbagai aspek dari aktivitas ekonomi, sosial, dan infrastruktur di kecamatan. Korelasi antar faktor menunjukkan bahwa terdapat hubungan antara berbagai aspek tersebut, yang mungkin perlu diperhatikan lebih lanjut dalam analisis atau penelitian lebih mendalam.
Seperti yang sudah dibahas sebelumnya, untuk mempermudah interpretasi faktor, maka rotasi digunakan.
# Menerapkan rotasi Varimax pada hasil EFA
efa_varimax <- fa(data_normalized, nfactors = 3, fm = "minres", rotate = "varimax")
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
efa_varimax
## Factor Analysis using method = minres
## Call: fa(r = data_normalized, nfactors = 3, rotate = "varimax", fm = "minres")
## Standardized loadings (pattern matrix) based upon correlation matrix
## MR1 MR2 MR3 h2 u2 com
## jm_pg_list_per_desa 0.07 0.82 0.05 0.67 0.328 1.0
## jm_rs 0.80 -0.04 0.18 0.67 0.328 1.1
## jm_puskes 0.14 0.71 0.18 0.56 0.442 1.2
## jm_sar_pel_kes 0.52 0.64 0.43 0.87 0.132 2.7
## jm_bl_pengobat 0.70 0.21 -0.21 0.58 0.421 1.4
## jm_tk 0.73 0.42 0.34 0.81 0.185 2.1
## jm_pasar 0.83 0.27 0.29 0.85 0.147 1.5
## jm_kantorpos 0.22 0.58 -0.02 0.39 0.615 1.3
## jm_toko 0.85 0.22 -0.32 0.87 0.126 1.4
## jm_koperasi -0.03 -0.08 -0.33 0.11 0.885 1.1
## jm_masjid -0.01 0.69 0.56 0.80 0.204 1.9
## jm_gereja 0.18 -0.32 -0.14 0.16 0.845 2.1
## jm_pt_asuhan 0.66 0.29 0.57 0.85 0.147 2.4
## jm_sar_olga 0.60 0.58 -0.38 0.84 0.155 2.7
## jm_unit_usaha 0.22 0.51 0.11 0.32 0.681 1.5
## jm_perusaha_dgng 0.97 -0.08 0.16 0.97 0.029 1.1
##
## MR1 MR2 MR3
## SS loadings 5.24 3.53 1.55
## Proportion Var 0.33 0.22 0.10
## Cumulative Var 0.33 0.55 0.65
## Proportion Explained 0.51 0.34 0.15
## Cumulative Proportion 0.51 0.85 1.00
##
## Mean item complexity = 1.6
## Test of the hypothesis that 3 factors are sufficient.
##
## df null model = 120 with the objective function = 19.37 with Chi Square = 287.31
## df of the model are 75 and the objective function was 6.76
##
## The root mean square of the residuals (RMSR) is 0.06
## The df corrected root mean square of the residuals is 0.08
##
## The harmonic n.obs is 22 with the empirical chi square 20.27 with prob < 1
## The total n.obs was 22 with Likelihood Chi Square = 86.75 with prob < 0.17
##
## Tucker Lewis Index of factoring reliability = 0.854
## RMSEA index = 0.07 and the 90 % confidence intervals are 0 0.157
## BIC = -145.08
## Fit based upon off diagonal values = 0.98
Tentu, berikut ini adalah interpretasi hasil rotasi Varimax menggunakan template yang Anda berikan:
Loadings dan Varians:
SS Loadings: Ini adalah jumlah kuadrat dari loadings untuk setiap faktor (MR1, MR2, MR3), yang menunjukkan seberapa banyak varians yang dijelaskan oleh setiap faktor. Faktor pertama (MR1) menjelaskan sebagian besar varians dengan SS loadings sebesar 5.24, diikuti oleh MR2 dengan 3.53, dan MR3 dengan 1.55.
Proportion Var: Ini adalah proporsi total varians yang dijelaskan oleh setiap faktor. MR1 menjelaskan 33%, MR2 menjelaskan 22%, dan MR3 menjelaskan 10% dari total varians.
Cumulative Var: Ini menunjukkan akumulasi varians yang dijelaskan hingga faktor tertentu. Hingga MR3, total varians yang dijelaskan adalah 65%.
Proportion Explained: Ini adalah proporsi dari varians yang dijelaskan yang diatribusikan ke masing-masing faktor ketika mempertimbangkan hanya faktor yang diekstrak. MR1 berkontribusi 51%, MR2 berkontribusi 34%, dan MR3 berkontribusi 15% dari varians yang dijelaskan.
Cumulative Proportion: Ini adalah akumulasi dari proporsi yang dijelaskan hingga faktor tertentu. Hingga MR3, proporsi yang dijelaskan adalah 100%.
Korelasi Antara Faktor:
Uji Hipotesis bahwa 3 Faktor Cukup:
Indeks Kepercayaan dan RMSEA:
Tucker Lewis Index (TLI): Nilai TLI adalah 0.854, yang menunjukkan kualitas model yang cukup baik karena mendekati 1.
RMSEA: Nilai RMSEA adalah 0.07, dengan interval kepercayaan 90% antara 0 dan 0.157. Nilai RMSEA di bawah 0.08 dianggap dapat diterima, menunjukkan bahwa model memiliki fit yang baik terhadap data.
BIC (Bayesian Information Criterion):
Fit Berdasarkan Nilai Off-Diagonal:
Secara keseluruhan, model EFA dengan 3 faktor menunjukkan fit yang baik ke data. Output memberikan keyakinan bahwa tiga faktor yang diekstrak secara memadai menjelaskan struktur varians dalam data.
Berdasarkan output dataframe , berikut adalah interpretasi untuk setiap bagian dari output:
Loadings Faktor:
Kolom MR1
, MR2
, dan MR3
merepresentasikan loading faktor dari masing-masing faktor pada variabel
yang dianalisis. Nilai-nilai ini menunjukkan seberapa kuat hubungan
antara variabel dan faktor yang bersangkutan.
jm_perusahaan_dgng
memiliki loading yang sangat tinggi pada MR1 (0.97), menandakan bahwa
variabel ini sangat berkaitan dengan faktor pertama dalam struktur data
Anda.jm_pg_list_per_desa
memiliki loading tertinggi pada MR2 (0.82), menunjukkan bahwa variabel
ini paling berkaitan dengan faktor kedua.jm_sar_olga
memiliki
loading tertinggi pada MR3 (0.84), menunjukkan bahwa variabel ini sangat
berkaitan dengan faktor ketiga.Komunalitas (h2):
Kolom h2
menunjukkan komunalitas untuk setiap variabel,
yang merupakan proporsi varians dari variabel yang dijelaskan oleh semua
faktor yang diekstrak. Sebagai contoh, jm_toko
memiliki
komunalitas 0.87, yang berarti 87% dari varians jm_toko
dijelaskan oleh ketiga faktor yang ada.
Keunikan (u2):
Kolom u2
menunjukkan keunikan, yaitu proporsi varians
yang tidak dijelaskan oleh model faktor. Ini adalah bagian dari varians
yang unik untuk variabel itu sendiri dan tidak dibagi dengan variabel
lain. Misalnya, jm_pg_list_per_desa
memiliki keunikan
sebesar 0.33, menunjukkan bahwa sebagian besar variansnya unik dan tidak
dijelaskan oleh faktor-faktor dalam model.
Kompleksitas (com):
Kolom com
menunjukkan kompleksitas variabel, dengan
nilai yang lebih besar dari 1 menandakan bahwa variabel memiliki loading
yang signifikan pada lebih dari satu faktor. Misalnya,
jm_sar_pel_kes
dengan nilai kompleksitas 1.95, menunjukkan
bahwa variabel ini memiliki hubungan yang cukup kuat dengan lebih dari
satu faktor.
Secara keseluruhan, interpretasi dari hasil analisis faktor ini memberikan pandangan tentang bagaimana variabel berkorelasi dengan faktor-faktor tertentu dan memberikan informasi tentang struktur yang mendasari dataset Anda. Variabel dengan loading tinggi pada faktor tertentu dapat diinterpretasikan sebagai berkaitan erat dengan konstruksi yang diwakili oleh faktor tersebut. Komunalitas tinggi menunjukkan variabel yang dijelaskan dengan baik oleh model faktor, sedangkan keunikan tinggi menunjukkan variabel yang memiliki banyak informasi yang tidak berkaitan dengan faktor lain dalam model.
Visualisasi hasil rotasi
# Visualisasi hasil rotasi Varimax
fa.diagram(efa_varimax)
Faktor MR1: Faktor ini memiliki korelasi yang tinggi dengan variabel “jm_perusaha_dgng” (0.9), “jm_toko” (0.9), “jm_pasar” (0.8), “jm_rs” (0.8), dan “jm_tkk” (0.7). Faktor ini sepertinya menggambarkan aspek yang berkaitan dengan kegiatan ekonomi dan bisnis, mungkin melibatkan perdagangan atau pasar.
Faktor MR2: Faktor kedua ini berkorelasi kuat dengan “jm_pg_list_per_desa” (0.8), “jm_puskes” (0.7), dan “jm_masjid” (0.7). Faktor ini mungkin menggambarkan aspek layanan publik dan sosial di tingkat desa atau komunitas lokal, termasuk kesehatan (puskesmas) dan keagamaan (masjid).
Faktor MR3: Faktor ketiga menunjukkan korelasi positif yang lebih rendah dengan “jm_kantorpos” (0.5), “jm_unit_usaha” (0.3), dan korelasi negatif dengan “jm_gereja” (-0.3) dan “jm_koperasi” (-0.3). Korelasi negatif mungkin menunjukkan bahwa variabel ini bergerak dalam arah yang berlawanan dengan faktor ini. Faktor ini mungkin menangkap aspek lain dari infrastruktur atau pelayanan komunal, namun interpretasinya mungkin lebih kompleks karena adanya korelasi negatif dan angka yang lebih rendah.
Korelasi yang ditampilkan dalam angka (0.9, 0.8, dll.) menunjukkan kekuatan hubungan antara variabel dengan faktor tertentu. Angka yang lebih tinggi menunjukkan hubungan yang lebih kuat. Rotasi varimax cenderung menghasilkan faktor dengan beberapa korelasi yang tinggi dan banyak korelasi yang rendah, sehingga memudahkan interpretasi faktor-faktor tersebut.
# Menerapkan rotasi Promax pada hasil EFA
efa_promax <- fa(data_normalized, nfactors = 3, fm = "minres", rotate = "promax")
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
efa_promax
## Factor Analysis using method = minres
## Call: fa(r = data_normalized, nfactors = 3, rotate = "promax", fm = "minres")
## Standardized loadings (pattern matrix) based upon correlation matrix
## MR1 MR2 MR3 h2 u2 com
## jm_pg_list_per_desa -0.11 0.87 -0.05 0.67 0.328 1.0
## jm_rs 0.86 -0.24 0.18 0.67 0.328 1.2
## jm_puskes -0.01 0.72 0.10 0.56 0.442 1.0
## jm_sar_pel_kes 0.43 0.51 0.37 0.87 0.132 2.8
## jm_bl_pengobat 0.69 0.13 -0.25 0.58 0.421 1.4
## jm_tk 0.69 0.24 0.30 0.81 0.185 1.6
## jm_pasar 0.83 0.07 0.26 0.85 0.147 1.2
## jm_kantorpos 0.10 0.60 -0.10 0.39 0.615 1.1
## jm_toko 0.84 0.13 -0.37 0.87 0.126 1.4
## jm_koperasi -0.03 -0.02 -0.33 0.11 0.885 1.0
## jm_masjid -0.15 0.65 0.50 0.80 0.204 2.0
## jm_gereja 0.26 -0.35 -0.11 0.16 0.845 2.1
## jm_pt_asuhan 0.66 0.07 0.55 0.85 0.147 2.0
## jm_sar_olga 0.49 0.60 -0.47 0.84 0.155 2.9
## jm_unit_usaha 0.12 0.49 0.05 0.32 0.681 1.1
## jm_perusaha_dgng 1.05 -0.31 0.16 0.97 0.029 1.2
##
## MR1 MR2 MR3
## SS loadings 5.31 3.46 1.56
## Proportion Var 0.33 0.22 0.10
## Cumulative Var 0.33 0.55 0.65
## Proportion Explained 0.51 0.34 0.15
## Cumulative Proportion 0.51 0.85 1.00
##
## With factor correlations of
## MR1 MR2 MR3
## MR1 1.00 0.38 0.06
## MR2 0.38 1.00 0.29
## MR3 0.06 0.29 1.00
##
## Mean item complexity = 1.6
## Test of the hypothesis that 3 factors are sufficient.
##
## df null model = 120 with the objective function = 19.37 with Chi Square = 287.31
## df of the model are 75 and the objective function was 6.76
##
## The root mean square of the residuals (RMSR) is 0.06
## The df corrected root mean square of the residuals is 0.08
##
## The harmonic n.obs is 22 with the empirical chi square 20.27 with prob < 1
## The total n.obs was 22 with Likelihood Chi Square = 86.75 with prob < 0.17
##
## Tucker Lewis Index of factoring reliability = 0.854
## RMSEA index = 0.07 and the 90 % confidence intervals are 0 0.157
## BIC = -145.08
## Fit based upon off diagonal values = 0.98
Visualisasi hasil rotasi
# Visualisasi hasil rotasi Promax
fa.diagram(efa_promax)
Ada yang ingin mencoba interpretasi keduanya?
Lakukan hal yang sama seperti pada PCA.
# Menghitung skor faktor
scores <- factor.scores(data_normalized, efa_result)
# Mengambil hanya skor faktor (biasanya ada dalam list sebagai item scores)
faktor_scores <- scores$scores
# Tambahkan nama kecamatan
final_data_fa <- data.frame(nama_kecamatan, faktor_scores)
final_data_fa
## nama_kecamatan MR1 MR2 MR3
## 1 SAGALAHERANG 0.1168459 1.033181700 -0.4037323
## 2 JALANCAGAK 0.6762467 2.781333000 -0.4742510
## 3 CISALAK 0.2848718 0.951674940 -1.2360335
## 4 TANJUNGSIANG 0.5162144 0.698212174 -0.5488693
## 5 CIJAMBE -0.4205217 -0.414786799 -0.9577523
## 6 CIBOGO -0.4428615 -1.571991763 -1.4517712
## 7 SUBANG 4.0184955 -0.018066291 1.9728441
## 8 KALIJATI -0.4295605 0.672123930 0.2321610
## 9 CIPEUNDEUY -0.1322622 -1.135123605 -0.5655368
## 10 PABUARAN -0.4612594 0.024727438 0.3723293
## 11 PATOKBEUSI -0.5187846 0.622122771 -0.1931898
## 12 PURWADADI -0.3691796 0.006590626 0.3223438
## 13 CIKAUM -0.1629546 -1.332968824 -0.5299513
## 14 PAGADEN 0.2465424 0.646350923 0.5662517
## 15 CIPUNAGARA -0.2920126 -0.044738549 -0.8152400
## 16 COMPRENG -0.1094820 -1.523594645 -0.7137898
## 17 BINONG 0.1383192 0.344368367 0.8565919
## 18 CIASEM -0.1078776 0.041743465 1.5824143
## 19 PAMANUKAN 0.1918279 -0.063631332 2.3618898
## 20 PUSAKANAGARA -1.0021325 -0.065302466 0.4118950
## 21 LEGONKULON -1.0558065 -0.927526663 -0.6587868
## 22 BLANAKAN -0.6846686 -0.724698397 -0.1298170
Lakukan klasifikasi score seperti sebelumnya.
# Fungsi sudah aktif, karena sudah kita load pada proses PCA
# Melakukan klasifikasi untuk setiap komponen FA dan menambahkannya ke data frame
for (i in 2:ncol(final_data_fa)) {
kolom_skor <- final_data_fa[, i]
kolom_klasifikasi <- paste0('Klasifikasi_', names(final_data_fa)[i])
final_data_fa[kolom_klasifikasi] <- klasifikasi_skor(kolom_skor)
}
# Data frame final_data_fa sekarang berisi klasifikasi untuk setiap skor FA
final_data_fa
## nama_kecamatan MR1 MR2 MR3 Klasifikasi_MR1
## 1 SAGALAHERANG 0.1168459 1.033181700 -0.4037323 rendah
## 2 JALANCAGAK 0.6762467 2.781333000 -0.4742510 sedang
## 3 CISALAK 0.2848718 0.951674940 -1.2360335 rendah
## 4 TANJUNGSIANG 0.5162144 0.698212174 -0.5488693 rendah
## 5 CIJAMBE -0.4205217 -0.414786799 -0.9577523 rendah
## 6 CIBOGO -0.4428615 -1.571991763 -1.4517712 rendah
## 7 SUBANG 4.0184955 -0.018066291 1.9728441 tinggi
## 8 KALIJATI -0.4295605 0.672123930 0.2321610 rendah
## 9 CIPEUNDEUY -0.1322622 -1.135123605 -0.5655368 rendah
## 10 PABUARAN -0.4612594 0.024727438 0.3723293 rendah
## 11 PATOKBEUSI -0.5187846 0.622122771 -0.1931898 rendah
## 12 PURWADADI -0.3691796 0.006590626 0.3223438 rendah
## 13 CIKAUM -0.1629546 -1.332968824 -0.5299513 rendah
## 14 PAGADEN 0.2465424 0.646350923 0.5662517 rendah
## 15 CIPUNAGARA -0.2920126 -0.044738549 -0.8152400 rendah
## 16 COMPRENG -0.1094820 -1.523594645 -0.7137898 rendah
## 17 BINONG 0.1383192 0.344368367 0.8565919 rendah
## 18 CIASEM -0.1078776 0.041743465 1.5824143 rendah
## 19 PAMANUKAN 0.1918279 -0.063631332 2.3618898 rendah
## 20 PUSAKANAGARA -1.0021325 -0.065302466 0.4118950 rendah
## 21 LEGONKULON -1.0558065 -0.927526663 -0.6587868 rendah
## 22 BLANAKAN -0.6846686 -0.724698397 -0.1298170 rendah
## Klasifikasi_MR2 Klasifikasi_MR3
## 1 sedang rendah
## 2 tinggi rendah
## 3 sedang rendah
## 4 sedang rendah
## 5 rendah rendah
## 6 rendah rendah
## 7 sedang tinggi
## 8 sedang sedang
## 9 rendah rendah
## 10 sedang sedang
## 11 sedang rendah
## 12 sedang sedang
## 13 rendah rendah
## 14 sedang sedang
## 15 sedang rendah
## 16 rendah rendah
## 17 sedang sedang
## 18 sedang tinggi
## 19 sedang tinggi
## 20 sedang sedang
## 21 rendah rendah
## 22 rendah sedang
Dari hasil tersebut mari kita lihat kecamatan apa saja yang tertinggi pada setiap faktor
# Cari dan tampilkan kecamatan dengan klasifikasi 'tinggi' untuk setiap komponen FA
for (i in 2:ncol(final_data_fa)) {
if (grepl('Klasifikasi_MR', names(final_data_fa)[i])) {
cat('Kecamatan dengan klasifikasi "tinggi" untuk', names(final_data_fa)[i], ":\n")
tinggi <- final_data_fa[final_data_fa[, i] == 'tinggi', ]
print(tinggi[, c('nama_kecamatan', names(final_data_fa)[i])])
cat('\n')
}
}
## Kecamatan dengan klasifikasi "tinggi" untuk Klasifikasi_MR1 :
## nama_kecamatan Klasifikasi_MR1
## 7 SUBANG tinggi
##
## Kecamatan dengan klasifikasi "tinggi" untuk Klasifikasi_MR2 :
## nama_kecamatan Klasifikasi_MR2
## 2 JALANCAGAK tinggi
##
## Kecamatan dengan klasifikasi "tinggi" untuk Klasifikasi_MR3 :
## nama_kecamatan Klasifikasi_MR3
## 7 SUBANG tinggi
## 18 CIASEM tinggi
## 19 PAMANUKAN tinggi
Dari kedua hasil analisis ini apakah ada perbedaan? bisa sebutkan beberapa perbedaan yang terlihat?
Pada akhirnya, kedua analisis ini memiliki ciri-ciri yang serupa namun tujuan analisis yang berbeda. Lakukan eksplorasi lebih lanjut terkait perbedaan PCA dan CFA pada tugas praktikum modul ini.