Kode berikut digunakan untuk membaca file DBF bernama “blok43.dbf” ke dalam R sebagai data frame menggunakan paket foreign.
# Memuat pustaka
library(foreign)
## Warning: package 'foreign' was built under R version 4.3.3
# Membaca file DBF
data <- read.dbf("blok43.dbf")
head(data)
## RENUM R101 R102 R105 R203 R301 FOOD NONFOOD EXPEND KAPITA
## 1 285340 11 1 2 1 4 1795114.3 1183000.0 2978114.3 744528.6
## 2 285346 11 1 2 1 4 2108331.4 868198.3 2976529.8 744132.4
## 3 285337 11 1 2 1 3 1810200.0 1074350.0 2884550.0 961516.7
## 4 285334 11 1 2 1 2 1561971.4 790975.0 2352946.4 1176473.2
## 5 285331 11 1 2 1 2 1178940.0 778891.7 1957831.7 978915.8
## 6 285319 11 1 2 1 1 411428.6 347100.0 758528.6 758528.6
## KALORI_KAP PROTE_KAP LEMAK_KAP KARBO_KAP WERT WEIND WI1 WI2
## 1 2435.711 63.90107 49.25109 396.8879 35.18946 140.75786 9976 177146
## 2 2451.215 78.39737 48.24964 404.1182 36.64960 146.59842 9976 60810
## 3 2495.909 74.53511 45.31679 419.1078 35.52082 106.56246 9976 99379
## 4 3384.523 109.18344 82.58239 506.0941 35.02336 70.04672 9976 141157
## 5 3554.871 105.33573 58.97906 611.9319 30.97004 61.94007 9976 123223
## 6 2751.892 77.70753 51.27606 451.6912 37.98458 37.98458 9976 154278
Keterangan Variabel:
Tahap ini bertujuan untuk mempersiapkan data mentah menjadi lebih bersih dan siap untuk analisis lebih lanjut.
# Periksa Tipe Data Kolom
str(data)
## 'data.frame': 340032 obs. of 18 variables:
## $ RENUM : int 285340 285346 285337 285334 285331 285319 285322 285325 285343 285328 ...
## $ R101 : int 11 11 11 11 11 11 11 11 11 11 ...
## $ R102 : int 1 1 1 1 1 1 1 1 1 1 ...
## $ R105 : int 2 2 2 2 2 2 2 2 2 2 ...
## $ R203 : int 1 1 1 1 1 1 1 1 1 1 ...
## $ R301 : int 4 4 3 2 2 1 5 4 4 3 ...
## $ FOOD : num 1795114 2108331 1810200 1561971 1178940 ...
## $ NONFOOD : num 1183000 868198 1074350 790975 778892 ...
## $ EXPEND : num 2978114 2976530 2884550 2352946 1957832 ...
## $ KAPITA : num 744529 744132 961517 1176473 978916 ...
## $ KALORI_KAP: num 2436 2451 2496 3385 3555 ...
## $ PROTE_KAP : num 63.9 78.4 74.5 109.2 105.3 ...
## $ LEMAK_KAP : num 49.3 48.2 45.3 82.6 59 ...
## $ KARBO_KAP : num 397 404 419 506 612 ...
## $ WERT : num 35.2 36.6 35.5 35 31 ...
## $ WEIND : num 140.8 146.6 106.6 70 61.9 ...
## $ WI1 : int 9976 9976 9976 9976 9976 9976 9976 9976 9976 9976 ...
## $ WI2 : int 177146 60810 99379 141157 123223 154278 90478 206467 24522 279725 ...
## - attr(*, "data_types")= chr [1:18] "N" "N" "N" "N" ...
Hasil output menunjukkan bahwa dataset memiliki 340.032 observasi (baris data) dan 18 variabel (kolom data). Dari data tersebut, variabel-variabel seperti FOOD, NONFOOD, EXPEND, KAPITA, KALORI_KAP, PROTE_KAP, LEMAK_KAP, dan KARBO_KAP memiliki tipe numeric, yang berarti mereka berisi data numerik yang dapat digunakan dalam analisis statistik, seperti analisis PCA.
Kode R berikut digunakan untuk mengecek apakah terdapat nilai yang hilang (NA) pada setiap kolom dalam dataset:
# Mengecek NA
colSums(is.na(data))
## RENUM R101 R102 R105 R203 R301 FOOD
## 0 0 0 0 0 0 0
## NONFOOD EXPEND KAPITA KALORI_KAP PROTE_KAP LEMAK_KAP KARBO_KAP
## 0 0 0 0 0 0 0
## WERT WEIND WI1 WI2
## 0 0 0 0
Hasil output menunjukkan bahwa data SUSENAS tidak memiliki nilai yang hilang, sehingga tidak diperlukan proses penghapusan data kosong.
Kode berikut digunakan untuk melakukan standarisasi data numerik dalam dataset:
# Standarisasi data numerik
data_scaled <- scale(data)
head(data_scaled)
## RENUM R101 R102 R105 R203 R301 FOOD
## [1,] 1.174865 -1.274899 -0.7925873 0.8525477 NaN 0.1429067 -0.3073597
## [2,] 1.174926 -1.274899 -0.7925873 0.8525477 NaN 0.1429067 -0.0842699
## [3,] 1.174835 -1.274899 -0.7925873 0.8525477 NaN -0.4451637 -0.2966148
## [4,] 1.174804 -1.274899 -0.7925873 0.8525477 NaN -1.0332341 -0.4734163
## [5,] 1.174773 -1.274899 -0.7925873 0.8525477 NaN -1.0332341 -0.7462315
## [6,] 1.174651 -1.274899 -0.7925873 0.8525477 NaN -1.6213044 -1.2928935
## NONFOOD EXPEND KAPITA KALORI_KAP PROTE_KAP LEMAK_KAP
## [1,] -0.3120619 -0.3489087 -0.4505336 0.3251644 -0.007564241 -0.2482499
## [2,] -0.4144795 -0.3493063 -0.4508501 0.3482512 0.579489978 -0.2888534
## [3,] -0.3474101 -0.3723825 -0.2771784 0.4148061 0.423080698 -0.4077638
## [4,] -0.4396034 -0.5057533 -0.1054461 1.7380703 1.826228911 1.1031460
## [5,] -0.4435346 -0.6048812 -0.2632779 1.9917400 1.670408825 0.1461642
## [6,] -0.5840138 -0.9057670 -0.4393488 0.7959985 0.551553663 -0.1661491
## KARBO_KAP WERT WEIND WI1 WI2
## [1,] 0.6734308 -0.7829763 -0.6741392 -0.5961709 0.2112811
## [2,] 0.7438447 -0.7768687 -0.6681548 -0.5961709 -0.9851108
## [3,] 0.8898253 -0.7815903 -0.7091762 -0.5961709 -0.5884697
## [4,] 1.7369676 -0.7836711 -0.7465906 -0.5961709 -0.1588274
## [5,] 2.7676996 -0.8006256 -0.7548968 -0.5961709 -0.3432595
## [6,] 1.2071487 -0.7712847 -0.7794419 -0.5961709 -0.0238919
# Analisis Deskriptif
summary(data)
## RENUM R101 R102 R105 R203
## Min. : 1 Min. :11.00 Min. : 1.00 Min. :1.000 Min. :1
## 1st Qu.: 85009 1st Qu.:18.00 1st Qu.: 4.00 1st Qu.:1.000 1st Qu.:1
## Median :170017 Median :35.00 Median :10.00 Median :2.000 Median :1
## Mean :170017 Mean :43.05 Mean :21.68 Mean :1.579 Mean :1
## 3rd Qu.:255024 3rd Qu.:64.00 3rd Qu.:23.00 3rd Qu.:2.000 3rd Qu.:1
## Max. :340032 Max. :94.00 Max. :79.00 Max. :2.000 Max. :1
## R301 FOOD NONFOOD EXPEND
## Min. : 1.000 Min. : 114857 Min. : 38208 Min. : 182190
## 1st Qu.: 3.000 1st Qu.: 1295486 1st Qu.: 857667 1st Qu.: 2277443
## Median : 4.000 Median : 1916079 Median : 1403417 Median : 3429452
## Mean : 3.757 Mean : 2226646 Mean : 2142186 Mean : 4368832
## 3rd Qu.: 5.000 3rd Qu.: 2785714 3rd Qu.: 2393183 3rd Qu.: 5212515
## Max. :29.000 Max. :31272857 Max. :193333898 Max. :201254112
## KAPITA KALORI_KAP PROTE_KAP LEMAK_KAP
## Min. : 114515 Min. :1000 Min. : 4.166 Min. : 2.023
## 1st Qu.: 656004 1st Qu.:1737 1st Qu.: 47.371 1st Qu.: 38.230
## Median : 997299 Median :2116 Median : 59.678 Median : 51.136
## Mean : 1308460 Mean :2217 Mean : 64.088 Mean : 55.374
## 3rd Qu.: 1543848 3rd Qu.:2580 3rd Qu.: 75.468 3rd Qu.: 67.453
## Max. :94740858 Max. :4500 Max. :364.666 Max. :293.561
## KARBO_KAP WERT WEIND WI1
## Min. : 25.66 Min. : 1.165 Min. : 1.165 Min. : 1
## 1st Qu.: 254.84 1st Qu.: 67.080 1st Qu.: 212.398 1st Qu.: 7180
## Median : 312.18 Median : 141.845 Median : 474.874 Median :15780
## Mean : 327.74 Mean : 222.376 Mean : 798.704 Mean :15840
## 3rd Qu.: 382.61 3rd Qu.: 296.702 3rd Qu.: 1011.605 3rd Qu.:24378
## Max. :1042.51 Max. :2082.520 Max. :22907.723 Max. :32974
## WI2
## Min. : 1
## 1st Qu.: 71016
## Median :156026
## Mean :156601
## 3rd Qu.:241034
## Max. :326043
FOOD (Pengeluaran makanan): Pengeluaran makanan rumah tangga memiliki nilai minimum sebesar 114.857 dan maksimum mencapai 31.272.857. Kuartil pertama (Q1) berada pada 1.295.486, median di 1.916.079, dan kuartil ketiga (Q3) sebesar 2.785.714. Rata-rata pengeluaran makanan adalah 2.226.646.
NONFOOD (Pengeluaran non-makanan): Pengeluaran non-makanan berkisar dari 38.208 hingga 193.333.898. Kuartil pertama (Q1) sebesar 857.667, median di 1.403.417, dan kuartil ketiga (Q3) sebesar 2.393.183. Nilai rata-rata pengeluaran non-makanan adalah 2.142.186.
EXPEND (Total pengeluaran): Total pengeluaran rumah tangga bervariasi antara 182.190 hingga 201.254.112, dengan Q1 sebesar 2.277.443, median di 3.429.452, dan Q3 sebesar 5.212.515. Rata-rata total pengeluaran adalah 4.368.832.
KAPITA (Pengeluaran per kapita): Pengeluaran per kapita memiliki rentang dari 114.515 hingga 94.740.858. Kuartil pertama (Q1) adalah 656.004, median di 997.299, dan kuartil ketiga (Q3) sebesar 1.543.848. Rata-rata pengeluaran per kapita adalah 1.308.460.
KALORI_KAP (Kalori per kapita): Konsumsi kalori per kapita berkisar antara 1.000 hingga 4.500. Kuartil pertama (Q1) sebesar 1.737, median di 2.116, dan kuartil ketiga (Q3) adalah 2.580. Rata-rata konsumsi kalori adalah 2.217.
PROTE_KAP (Protein per kapita): Asupan protein harian per kapita berada di rentang 4,166 hingga 364,666 gram. Kuartil pertama (Q1) sebesar 47,371 gram, median di 59,678 gram, dan kuartil ketiga (Q3) adalah 75,468 gram. Rata-rata asupan protein adalah 64,088 gram.
LEMAK_KAP (Lemak per kapita): Asupan lemak per kapita berkisar antara 2,023 hingga 293,561 gram. Kuartil pertama (Q1) adalah 38,230 gram, median di 51,136 gram, dan kuartil ketiga (Q3) sebesar 67,453 gram. Rata-rata konsumsi lemak adalah 55,374 gram.
KARBO_KAP (Karbohidrat per kapita): Konsumsi karbohidrat per kapita berkisar dari 25,66 hingga 1.042,51 gram. Kuartil pertama (Q1) adalah 254,84 gram, median di 312,18 gram, dan kuartil ketiga (Q3) sebesar 382,61 gram. Rata-rata konsumsi karbohidrat adalah 327,74 gram.
WERT (Bobot rumah tangga): Bobot rumah tangga berkisar dari 1,165 hingga 2.082,520, dengan Q1 sebesar 67,080, median di 141,845, dan Q3 sebesar 296,702. Rata-rata bobot rumah tangga adalah 222,376.
WEIND (Bobot individu): Bobot individu memiliki rentang dari 1,165 hingga 22.907,723, dengan Q1 sebesar 212,398, median di 474,874, dan Q3 sebesar 1.011,605. Rata-rata bobot individu adalah 798,704.
WI1 dan WI2: WI1 memiliki rentang dari 1 hingga 32.974, dengan Q1 sebesar 7.180, median di 15.780, dan Q3 sebesar 24.378. WI2 memiliki rentang dari 1 hingga 326.043, dengan Q1 sebesar 71.016, median di 156.026, dan Q3 sebesar 241.034.
Masukkan variabel-variabel numerik yang akan dianalisis menggunakan PCA.
data_pca <- data_scaled[, c("R301", "KAPITA", "KALORI_KAP", "PROTE_KAP", "LEMAK_KAP", "KARBO_KAP")]
head(data_pca)
## R301 KAPITA KALORI_KAP PROTE_KAP LEMAK_KAP KARBO_KAP
## [1,] 0.1429067 -0.4505336 0.3251644 -0.007564241 -0.2482499 0.6734308
## [2,] 0.1429067 -0.4508501 0.3482512 0.579489978 -0.2888534 0.7438447
## [3,] -0.4451637 -0.2771784 0.4148061 0.423080698 -0.4077638 0.8898253
## [4,] -1.0332341 -0.1054461 1.7380703 1.826228911 1.1031460 1.7369676
## [5,] -1.0332341 -0.2632779 1.9917400 1.670408825 0.1461642 2.7676996
## [6,] -1.6213044 -0.4393488 0.7959985 0.551553663 -0.1661491 1.2071487
pca_result <- prcomp(data_pca, center = TRUE, scale. = TRUE)
summary(pca_result)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 1.9120 0.9313 0.8718 0.69075 0.4737 0.12302
## Proportion of Variance 0.6093 0.1446 0.1267 0.07952 0.0374 0.00252
## Cumulative Proportion 0.6093 0.7539 0.8806 0.96008 0.9975 1.00000
Berikut adalah penjelasan mengenai komponen utama (Principal Components Analysis) dan varians yang dijelaskan oleh masing-masing komponen:
PC1: Komponen pertama menjelaskan 60,93% dari total variasi dalam data, yang menunjukkan bahwa PC1 memiliki kontribusi terbesar terhadap variansi data.
PC2: Komponen kedua menambah 14,46% dari variansi, sehingga total kumulatif variansi yang dijelaskan oleh PC1 dan PC2 mencapai 75,39%.
PC3: Komponen ketiga menyumbang 12,67%, yang meningkatkan proporsi kumulatif menjadi 88,06%.
PC4: Komponen keempat menambah 7,95%, membawa proporsi kumulatif menjadi 96,01%.
PC5: Komponen kelima berkontribusi 3,74%, sehingga proporsi kumulatif mencapai 99,75%.
PC6: Komponen terakhir hanya menjelaskan 0,25%, yang melengkapi 100% variansi.
Berdasarkan Cumulative Proportion, dapat melihat bahwa tiga komponen pertama (PC1, PC2, dan PC3) sudah cukup untuk menjelaskan sekitar 88,06% dari total variansi data. Ini berarti sebagian besar informasi dalam data dapat direpresentasikan dengan menggunakan hanya tiga komponen utama. PC1, dengan kontribusi terbesar, menunjukkan bahwa komponen pertama adalah yang paling informatif dalam menjelaskan variasi data. Oleh karena itu, untuk analisis selanjutnya bisa mempertimbangkan hanya tiga komponen pertama untuk mereduksi dimensi tanpa kehilangan banyak informasi penting dari data.
screeplot(pca_result, type = "lines", main = "Scree Plot")
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
biplot(pca_result, scale = 0) # Gunakan data PCA
library(ggplot2)
data_pca <- as.data.frame(pca_result$x)
ggplot(data_pca, aes(x = PC1, y = PC2)) +
geom_point() +
theme_minimal() +
labs(title = "Scatter Plot PC1 vs PC2", x = "PC1", y = "PC2")
set.seed(123)
data_reduced <- pca_result$x[, 1:3]
kmeans_result <- kmeans(data_reduced, centers = 3, nstart = 25)
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.3.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_cluster(kmeans_result, data = data_reduced, geom = "point", stand = FALSE)
Jumlah Cluster: Data dibagi menjadi 3 cluster, yang masing-masing diwakili oleh warna dan bentuk yang berbeda (merah, hijau, biru).
Dimensi Visualisasi: