No 6. Lakukan preprosesing, analisis deskriptif, dan analisis multivariat untuk data susenas berikut, gunakan minimal 1 metode. Link data: https://s.id/DataSusenas Link penjelasan variabel: https://s.id/VariabelSusenas atau Penjelasan variabel (excel):https://s.id/ExcelVarSusenas Catatan: file dalam formal .dbf. Gunakan package foreign untuk mengakses menggunakan R.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(FactoMineR)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(foreign)
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
Pada tahap pertama, proses dimulai dengan mempersiapkan pustaka dplyr untuk manipulasi data, ggplot2 untuk visualisasi, FactoMineR dan factoextra untuk analisis dan visualisasi PCA, serta foreign untuk membaca file dalam format dbf. Selanjutnya, dataset dimuat menggunakan fungsi read.dbf() dari pustaka foreign, dengan file yang diambil dari direktori lokal pengguna.
# melakukan Rename pada tiap kolom untuk memudahkan preprocessing
data <- data %>% rename(
ID = RENUM,
Region = R101,
SubRegion = R102,
Gender = R105,
AgeGroup = R203,
Education = R301,
FoodExp = FOOD,
NonFoodExp = NONFOOD,
TotalExp = EXPEND,
PerCapitaExp = KAPITA,
CalorieIntake = KALORI_KAP,
ProteinIntake = PROTE_KAP,
FatIntake = LEMAK_KAP,
CarbIntake = KARBO_KAP,
Weight = WERT,
WeightIndex = WEIND,
Index1 = WI1,
Index2 = WI2
)
Langkah berikutnya adalah mengganti nama kolom agar lebih deskriptif. Proses ini dilakukan menggunakan fungsi rename() dari pustaka dplyr, yang memetakan nama kolom asli ke nama baru yang lebih mudah dimengerti dan sesuai dengan tujuan analisis. Sebagai contoh, kolom RENUM diubah menjadi ID, dan FOOD menjadi FoodExp, sehingga setiap kolom memberikan informasi yang lebih jelas dan relevan. Penyesuaian ini bertujuan untuk meningkatkan keterbacaan data sekaligus mempermudah proses pengolahan pada tahap berikutnya.
# Cek missing value
summary(data)
## ID Region SubRegion Gender AgeGroup
## 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
## Education FoodExp NonFoodExp TotalExp
## 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
## PerCapitaExp CalorieIntake ProteinIntake FatIntake
## 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
## CarbIntake Weight WeightIndex Index1
## 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
## Index2
## Min. : 1
## 1st Qu.: 71016
## Median :156026
## Mean :156601
## 3rd Qu.:241034
## Max. :326043
# Rangkuman statistika
numeric_cols <- c("FoodExp", "NonFoodExp", "TotalExp", "PerCapitaExp", "CalorieIntake",
"ProteinIntake", "FatIntake", "CarbIntake", "Weight", "WeightIndex")
summary_stats <- data %>%
summarise(across(all_of(numeric_cols), list(mean = mean, sd = sd, median = median), na.rm = TRUE))
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(...)`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
##
## # Previously
## across(a:b, mean, na.rm = TRUE)
##
## # Now
## across(a:b, \(x) mean(x, na.rm = TRUE))
print(summary_stats)
## FoodExp_mean FoodExp_sd FoodExp_median NonFoodExp_mean NonFoodExp_sd
## 1 2226646 1403996 1916079 2142186 3073706
## NonFoodExp_median TotalExp_mean TotalExp_sd TotalExp_median PerCapitaExp_mean
## 1 1403417 4368832 3985908 3429452 1308460
## PerCapitaExp_sd PerCapitaExp_median CalorieIntake_mean CalorieIntake_sd
## 1 1251696 997299.3 2217.353 671.5323
## CalorieIntake_median ProteinIntake_mean ProteinIntake_sd ProteinIntake_median
## 1 2115.65 64.08786 24.69328 59.67746
## FatIntake_mean FatIntake_sd FatIntake_median CarbIntake_mean CarbIntake_sd
## 1 55.37402 24.66434 51.13617 327.7386 102.6821
## CarbIntake_median Weight_mean Weight_sd Weight_median WeightIndex_mean
## 1 312.1765 222.3764 239.071 141.845 798.7036
## WeightIndex_sd WeightIndex_median
## 1 975.9791 474.8736
Tahap berikutnya melibatkan analisis deskriptif untuk menilai karakteristik utama dataset sekaligus mengidentifikasi kemungkinan adanya data yang hilang atau distribusi yang tidak normal. Statistik deskriptif, seperti nilai rata-rata, median, serta minimum dan maksimum untuk setiap kolom dataset, diperoleh menggunakan fungsi summary(). Untuk kolom numerik tertentu, seperti pengeluaran makanan (FoodExp) dan total pengeluaran (TotalExp), dilakukan analisis statistik lebih mendalam menggunakan fungsi summarise() dan across(). Proses ini memberikan gambaran awal yang penting mengenai kondisi data, yang menjadi dasar untuk tahap analisis lebih lanjut.
data_scaled <- data %>% select(all_of(numeric_cols)) %>% scale()
Sebelum melangkah ke tahap analisis dan visualisasi data, data terlebih dahulu dinormalisasi menggunakan fungsi scale(). Proses ini hanya diterapkan pada kolom numerik yang relevan, karena tujuan normalisasi adalah menyamakan skala semua variabel. Hal ini penting terutama dalam analisis PCA, di mana perbedaan skala antar variabel dapat memengaruhi hasil. Dengan normalisasi, unit pengukuran dihapus, sehingga setiap variabel memiliki rata-rata nol dan deviasi standar satu. Ini memungkinkan interpretasi yang lebih seimbang dalam analisis komponen utama.
pca_result <- PCA(data_scaled, graph = FALSE)
fviz_eig(pca_result) # Scree plot
fviz_pca_ind(pca_result,
geom.ind = "point",
col.ind = "cos2",
gradient.cols = c("#56B4E9", "#F0E442", "#D55E00"))
fviz_pca_var(pca_result,
col.var = "contrib",
gradient.cols = c("#56B4E9", "#F0E442", "#D55E00"))
fviz_pca_biplot(pca_result,
geom.ind = "point",
col.ind = "cos2",
col.var = "contrib",
gradient.cols = c("#56B4E9", "#F0E442", "#D55E00"))
Langkah terakhir dalam proses ini adalah visualisasi hasil PCA, yang menjadi bagian penting dari analisis. Beragam jenis grafik dibuat menggunakan pustaka factoextra, seperti scree plot untuk menganalisis kontribusi setiap komponen terhadap variansi total, plot individu untuk menunjukkan distribusi data dalam ruang komponen utama, serta plot variabel untuk menilai pengaruh variabel terhadap komponen utama. Visualisasi ini memberikan gambaran grafis hasil PCA sehingga mempermudah interpretasi dan mendukung pengambilan keputusan berbasis data. Semua tahapan saling berkesinambungan, membentuk alur kerja yang terstruktur mulai dari persiapan data hingga analisis mendalam dan penyajian hasil.
Penjelasan Output Visualisasi:
Visualisasi Scree Plot menggambarkan persentase variansi yang dijelaskan oleh setiap dimensi dalam analisis PCA. Berdasarkan grafik, dimensi pertama mencakup sekitar 40% variansi, sedangkan dimensi kedua menjelaskan 24,5%. Kontribusi dimensi lainnya berkurang secara drastis. Ini menunjukkan bahwa dimensi pertama dan kedua sudah cukup mewakili sebagian besar informasi dalam data.
Plot individu pada dua dimensi utama PCA (Dim1 dan Dim2) memperlihatkan penyebaran data berdasarkan kontribusi mereka terhadap komponen utama. Titik-titik yang berada lebih jauh dari pusat memiliki nilai cos2 lebih tinggi, menandakan representasi yang lebih baik dalam dua dimensi tersebut. Data terlihat tersebar secara signifikan pada Dim1, yang menjelaskan 40,4% dari total variansi.
Plot variabel memvisualisasikan kontribusi dan korelasi variabel asli terhadap komponen utama. Panjang vektor atau panah mencerminkan besarnya kontribusi variabel terhadap dimensi tertentu, sedangkan sudut antarpanah menunjukkan hubungan antarvariabel. Variabel seperti “CalorieIntake,” “ProteinIntake,” dan “CarbIntake” memberikan kontribusi dominan pada Dim1, sementara “Weight” dan “WeightIndex” memiliki kontribusi lebih kecil dan orientasi yang berbeda.
Biplot menggabungkan representasi individu dan variabel. Visualisasi ini menunjukkan bagaimana individu dan variabel berinteraksi. Titik-titik individu yang terletak di arah vektor seperti “CalorieIntake” cenderung memiliki nilai yang lebih tinggi pada variabel tersebut. Dimensi pertama secara signifikan dipengaruhi oleh pola konsumsi, sedangkan dimensi kedua merepresentasikan variasi sekunder dalam dataset.