Data Frame

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:

Preprosesing

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

# 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

Analisis Multivariat

Analisis PCA (Principal Component Analysis)

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.

Visualisasi Principal Component Analysis

Scree Plot

screeplot(pca_result, type = "lines", main = "Scree Plot")

Biplot

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
biplot(pca_result, scale = 0)  # Gunakan data PCA

Scatter Plot

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")

Analisis Kluster

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)

  1. Jumlah Cluster: Data dibagi menjadi 3 cluster, yang masing-masing diwakili oleh warna dan bentuk yang berbeda (merah, hijau, biru).

  2. Dimensi Visualisasi:

  • Dim1 (69,2%): Dimensi pertama menjelaskan sekitar 69,2% dari variasi total data.
  • Dim2 (16,4%): Dimensi kedua menjelaskan sekitar 16,4% dari variasi data. Secara keseluruhan, kedua dimensi ini mencakup sekitar 85,6% dari informasi yang ada dalam data.
  1. Karakteristik Cluster:
  • Cluster 1 (Merah): Cluster ini cenderung mewakili kelompok dengan nilai Dim1 yang lebih tinggi, menunjukkan adanya karakteristik yang berbeda dibandingkan dengan kelompok lainnya.
  • Cluster 2 (Hijau): Merupakan kelompok yang paling besar, tersebar di sepanjang Dim1 dan memiliki cakupan yang lebih luas pada Dim2, menggambarkan entitas dengan karakteristik yang lebih beragam.
  • Cluster 3 (Biru): Terkonsentrasi pada area dengan nilai Dim1 negatif dan Dim2 rendah, menunjukkan kelompok yang lebih seragam atau homogen dalam karakteristiknya.

Kesimpulan

  1. Dengan menggabungkan PCA dan K-Means, kita berhasil mereduksi dimensi data dan mengelompokkan data menjadi tiga kelompok yang memiliki karakteristik berbeda.
  2. PCA memungkinkan kita untuk mengurangi kompleksitas data dengan mempertahankan informasi penting, sementara K-Means memberikan pemahaman yang lebih jelas mengenai segmentasi atau pengelompokan entitas berdasarkan karakteristik utama yang diidentifikasi.
  3. Hasil ini menunjukkan bahwa analisis multivariat seperti PCA dan clustering K-Means efektif dalam mengidentifikasi pola dan struktur tersembunyi dalam data, serta mempermudah interpretasi dan pengelompokan data berdasarkan karakteristik utama.