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.
```{rLangkah terakhir adalah visualisasi hasil PCA menggunakan pustaka factoextra. Beragam jenis grafik dibuat untuk memudahkan interpretasi, seperti scree plot untuk melihat kontribusi setiap komponen terhadap total variansi, plot individu untuk memetakan distribusi data dalam ruang PCA, dan plot variabel untuk menganalisis pengaruh variabel terhadap komponen utama. Visualisasi ini memberikan gambaran intuitif dari hasil PCA, mendukung analisis lebih lanjut dan pengambilan keputusan berbasis data.
Penjelasan Output Visualisasi:
Scree Plot menunjukkan proporsi variansi yang dijelaskan oleh setiap dimensi dalam analisis PCA. Dimensi pertama menjelaskan sekitar 40% variansi, sedangkan dimensi kedua mencakup 24,5%. Dimensi lainnya memberikan kontribusi yang lebih kecil, sehingga dua dimensi pertama cukup untuk merepresentasikan sebagian besar informasi dalam dataset.
Plot individu pada dua dimensi utama (Dim1 dan Dim2) menggambarkan distribusi data berdasarkan kontribusi mereka terhadap komponen utama. Titik-titik yang jauh dari pusat memiliki nilai cos2 tinggi, menandakan bahwa mereka lebih baik terwakili dalam dua dimensi ini. Dim1 yang mencakup 40,4% variansi menunjukkan penyebaran data yang signifikan.
Plot variabel memvisualisasikan kontribusi dan hubungan antar variabel asli terhadap komponen utama. Panjang vektor mencerminkan kontribusi suatu variabel terhadap dimensi tertentu, sementara sudut antar vektor menunjukkan korelasi antar variabel. Contohnya, variabel seperti CalorieIntake, ProteinIntake, dan CarbIntake dominan pada Dim1, sementara Weight dan WeightIndex memiliki pengaruh yang lebih kecil.
Biplot menggabungkan informasi dari plot individu dan plot variabel, memberikan pandangan menyeluruh tentang interaksi antara individu dan variabel. Titik individu yang terletak di arah vektor, seperti CalorieIntake, cenderung memiliki nilai tinggi pada variabel tersebut. Dimensi pertama merepresentasikan pola konsumsi utama, sedangkan dimensi kedua mencerminkan variasi sekunder dalam dataset.
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 selanjutnya adalah memperbarui nama kolom agar lebih deskriptif. Proses ini dilakukan dengan menggunakan fungsi rename() dari pustaka dplyr, yang memungkinkan kita untuk memetakan nama kolom asli ke nama baru yang lebih mudah dipahami dan sesuai dengan tujuan analisis. Sebagai contoh, kolom RENUM diubah menjadi ID, sedangkan kolom FOOD diganti menjadi FoodExp. Dengan demikian, setiap kolom memberikan informasi yang lebih jelas dan relevan. Penyesuaian ini bertujuan untuk meningkatkan keterbacaan data sekaligus mempermudah proses pengolahan di 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
Langkah selanjutnya melibatkan analisis deskriptif yang bertujuan untuk menilai karakteristik utama dari dataset sambil mengidentifikasi potensi data yang hilang atau distribusi yang tidak normal. Dengan memanfaatkan fungsi summary(), kita dapat memperoleh statistik deskriptif seperti rata-rata, median, serta nilai minimum dan maksimum untuk setiap kolom dalam dataset. Untuk kolom-kolom numerik tertentu, seperti pengeluaran makanan (FoodExp) dan total pengeluaran (TotalExp), kita melakukan analisis yang lebih mendalam dengan menggunakan fungsi summarise() dan across(). Proses ini memberikan gambaran awal yang krusial mengenai kondisi data, yang akan menjadi landasan bagi tahap analisis selanjutnya.
data_scaled <- data %>% select(all_of(numeric_cols)) %>% scale()
Sebelum memasuki tahap analisis dan visualisasi data, langkah awal yang diambil adalah melakukan normalisasi terhadap data menggunakan fungsi scale(). Proses ini hanya diterapkan pada kolom-kolom numerik yang relevan, karena tujuan dari normalisasi adalah untuk menyamakan skala semua variabel. Hal ini sangat krusial, terutama dalam analisis PCA, di mana perbedaan skala antar variabel dapat memengaruhi hasil yang diperoleh. Dengan diadakannya normalisasi, satuan pengukuran akan dihapus, sehingga setiap variabel akan memiliki rata-rata nol dan deviasi standar satu. Kondisi 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 merupakan elemen krusial dalam analisis. Menggunakan pustaka factoextra, berbagai jenis grafik dihasilkan, seperti scree plot yang digunakan untuk menilai kontribusi masing-masing komponen terhadap variansi total, plot individu yang menggambarkan distribusi data dalam ruang komponen utama, serta plot variabel yang menganalisis pengaruh variabel terhadap komponen utama. Visualisasi ini memberikan representasi grafis dari hasil PCA, sehingga memudahkan interpretasi dan mendukung pengambilan keputusan yang didasarkan pada data. Setiap tahapan saling terhubung, membentuk alur kerja yang terstruktur, mulai dari persiapan data hingga analisis mendalam dan penyajian hasil.
Penjelasan Output Visualisasi:
Visualisasi pada Scree Plot memberikan gambaran tentang persentase variansi yang dijelaskan oleh masing-masing dimensi dalam analisis PCA. Dari grafik yang diperlihatkan, dimensi pertama mampu menjelaskan sekitar 40% variansi, sementara dimensi kedua menyumbangkan sekitar 24,5%. Sementara itu, kontribusi dimensi-dimensi berikutnya mengalami penurunan yang signifikan. Hal ini menunjukkan bahwa dimensi pertama dan kedua sudah cukup untuk merepresentasikan sebagian besar informasi yang terkandung dalam data.
Plot individu pada dua dimensi utama PCA (Dim1 dan Dim2) menunjukkan distribusi data berdasarkan kontribusi mereka terhadap komponen utama. Titik-titik yang terletak lebih jauh dari pusat memiliki nilai cos² yang lebih tinggi, menandakan representasi yang lebih baik dalam kedua dimensi tersebut. Signifikan, data terlihat menyebar pada Dim1, yang menjelaskan 40,4% dari total variansi.
Plot variabel ini memvisualisasikan kontribusi dan korelasi dari variabel asli terhadap komponen utama. Panjang vektor atau panah mewakili besarnya kontribusi setiap variabel terhadap dimensi tertentu, sedangkan sudut di antara panah menggambarkan hubungan antarvariabel. Variabel seperti “CalorieIntake,” “ProteinIntake,” dan “CarbIntake” menunjukkan kontribusi yang dominan pada Dimensi 1. Sebaliknya, “Weight” dan “WeightIndex” memiliki kontribusi yang lebih kecil dan orientasi yang berbeda.
Biplot menyajikan perpaduan antara representasi individu dan variabel, memberikan gambaran yang jelas tentang interaksi di antara keduanya. Dalam visualisasi ini, titik-titik individu yang terletak searah dengan vektor “CalorieIntake” cenderung menunjukkan nilai yang lebih tinggi pada variabel tersebut. Dimensi pertama dalam biplot ini sangat dipengaruhi oleh pola konsumsi, sementara dimensi kedua mencerminkan variasi sekunder dalam dataset.