Pada penelitian ini, dilakukan analisis data City Lifestyle Segmentation Dataset dengan menggunakan dua teknik multivariat utama, yaitu Principal Component Analysis (PCA) dan Factor Analysis (FA). Tujuan dari analisis ini adalah untuk mereduksi dimensi data dan mengidentifikasi faktor-faktor yang mendasari hubungan antar variabel dalam dataset. Dataset ini mencakup 10 variabel seperti, kota, pendapatan, kualitas udara, kebahagiaan, transportasi publik, dan ruang hijau yang merepresentasikan karakteristik gaya hidup perkotaan.
dataset <- read.csv("city_lifestyle_dataset.csv", header = TRUE)
head(dataset)
## city_name country population_density avg_income internet_penetration
## 1 Old Vista Europe 2775 3850 86.4
## 2 Beachport Europe 3861 3700 78.1
## 3 Valleyborough Europe 2562 4310 80.1
## 4 City Europe 3192 3970 81.2
## 5 Falls Europe 3496 4320 100.0
## 6 North Falls Europe 1444 4640 78.5
## avg_rent air_quality_index public_transport_score happiness_score
## 1 1310 43 52.0 8.5
## 2 1330 42 62.8 8.1
## 3 1330 39 73.2 8.5
## 4 1480 60 49.2 8.5
## 5 1510 64 93.7 8.5
## 6 1620 35 51.6 8.4
## green_space_ratio
## 1 23.8
## 2 33.1
## 3 40.2
## 4 43.6
## 5 42.5
## 6 20.3
data_numeric <- dataset[sapply(dataset, is.numeric)]
data_clean <- na.omit(data_numeric)
data_scaled <- scale(data_clean)
Proses standarisasi dilakukan untuk memastikan bahwa setiap variabel memiliki skala yang seragam, dengan rata-rata 0 dan standar deviasi 1.
# Menghitung matriks korelasi
cor_matrix <- cor(data_scaled)
# Menampilkan matriks korelasi
print(cor_matrix)
## population_density avg_income internet_penetration
## population_density 1.00000000 -0.18740400 -0.06735207
## avg_income -0.18740400 1.00000000 0.82518680
## internet_penetration -0.06735207 0.82518680 1.00000000
## avg_rent -0.20073782 0.94227672 0.78134825
## air_quality_index 0.65911506 -0.48106765 -0.37626841
## public_transport_score 0.28208829 0.57754078 0.50943053
## happiness_score -0.39957087 0.85797295 0.76992587
## green_space_ratio -0.54572881 0.03868673 0.01206709
## avg_rent air_quality_index public_transport_score
## population_density -0.20073782 0.65911506 0.28208829
## avg_income 0.94227672 -0.48106765 0.57754078
## internet_penetration 0.78134825 -0.37626841 0.50943053
## avg_rent 1.00000000 -0.46252768 0.53806097
## air_quality_index -0.46252768 1.00000000 -0.07074727
## public_transport_score 0.53806097 -0.07074727 1.00000000
## happiness_score 0.81533381 -0.73752838 0.46390325
## green_space_ratio 0.03023721 -0.37622724 -0.20279450
## happiness_score green_space_ratio
## population_density -0.3995709 -0.54572881
## avg_income 0.8579729 0.03868673
## internet_penetration 0.7699259 0.01206709
## avg_rent 0.8153338 0.03023721
## air_quality_index -0.7375284 -0.37622724
## public_transport_score 0.4639033 -0.20279450
## happiness_score 1.0000000 0.29796431
## green_space_ratio 0.2979643 1.00000000
# Visualisasi dengan corrplot
library(corrplot)
## corrplot 0.95 loaded
corrplot(cor_matrix, method = "square")
Matriks korelasi ini digunakan untuk melihat hubungan antar variabel,
yang menjadi dasar untuk mereduksi dimensi data menggunakan PCA dan FA.
Visualisasi dengan corrplot menggambarkan seberapa kuat korelasi antar
variabel dengan warna yang lebih gelap menunjukkan korelasi yang lebih
kuat.
PCA dilakukan untuk mereduksi dimensi data, di mana kita mencari komponen utama yang menjelaskan variasi terbesar dalam data.
# Menghitung eigenvalue dan eigenvector dari matriks korelasi
eigen_result <- eigen(cor_matrix)
# Menampilkan nilai eigen
eigenvalues <- eigen_result$values
print(eigenvalues)
## [1] 4.30446434 2.06664926 0.58623537 0.43622356 0.29045641 0.19801623 0.07113948
## [8] 0.04681535
# Barplot Eigenvalue
barplot(eigenvalues,
names.arg = 1:length(eigenvalues),
col = "skyblue",
xlab = "Komponen",
ylab = "Eigenvalue",
main = "Barplot Eigenvalue")
abline(h = 1, col = "red", lty = 2)
Hasil barplot eigenvalue menunjukkan kontribusi masing-masing komponen
dalam menjelaskan variasi data. Komponen dengan eigenvalue lebih besar
dari 1 akan dipertahankan untuk analisis lebih lanjut.
# Menentukan proporsi variansi yang dijelaskan
prop_variance <- eigenvalues / sum(eigenvalues)
# Menampilkan proporsi variansi yang dijelaskan oleh masing-masing komponen utama
barplot(prop_variance, main = "Proporsi Variansi yang Dijelaskan oleh Komponen Utama",
xlab = "Komponen Utama", ylab = "Proporsi Variansi", col = "lightblue", border = "blue")
Proporsi variansi yang dijelaskan oleh masing-masing komponen utama
menunjukkan bahwa dua hingga tiga komponen pertama mampu menjelaskan
sebagian besar variasi dalam data.
# Menentukan jumlah komponen yang dipilih
num_components <- which(cumsum(prop_variance) >= 0.85)[1]
data_pca <- data_scaled %*% eigen_result$vectors[, 1:num_components]
# Melihat data dengan dimensi yang telah dikurangi
head(data_pca)
## [,1] [,2] [,3]
## 1 -1.740284 0.07113187 -1.4861722
## 2 -1.638755 -0.01495602 -0.3282017
## 3 -2.407024 -0.31966990 0.4011576
## 4 -1.745234 -0.75726295 0.3488902
## 5 -3.073572 0.97009290 1.5387817
## 6 -2.258612 -0.01704644 -2.1182753
Dengan menggunakan tiga komponen utama, kami berhasil mereduksi dimensi data dan mempertahankan sekitar 86,9% variasi total data.
Setelah melakukan PCA, langkah berikutnya adalah melakukan Factor Analysis untuk mengidentifikasi faktor-faktor tersembunyi yang mendasari hubungan antar variabel.
# Menjalankan Factor Analysis dengan 3 faktor dan rotasi varimax
fa_result <- factanal(factors = 3, covmat = cor(data_scaled), rotation = "varimax")
# Menampilkan hasil dari Factor Analysis
print(fa_result)
##
## Call:
## factanal(factors = 3, covmat = cor(data_scaled), rotation = "varimax")
##
## Uniquenesses:
## population_density avg_income internet_penetration
## 0.039 0.019 0.270
## avg_rent air_quality_index public_transport_score
## 0.094 0.257 0.475
## happiness_score green_space_ratio
## 0.005 0.602
##
## Loadings:
## Factor1 Factor2 Factor3
## population_density 0.906 0.375
## avg_income 0.974 -0.140 -0.113
## internet_penetration 0.844
## avg_rent 0.930 -0.142 -0.146
## air_quality_index -0.396 0.759
## public_transport_score 0.651 0.240 0.210
## happiness_score 0.832 -0.510 0.208
## green_space_ratio -0.626
##
## Factor1 Factor2 Factor3
## SS loadings 3.801 2.155 0.284
## Proportion Var 0.475 0.269 0.035
## Cumulative Var 0.475 0.745 0.780
##
## The degrees of freedom for the model is 7 and the fit was 0.1135
Uniqueness menunjukkan bagian dari varians yang tidak dijelaskan oleh faktor yang terbentuk.
# Mengambil nilai uniqueness
uniq <- fa_result$uniquenesses
uniq_sorted <- sort(uniq, decreasing = TRUE)
dotchart(uniq_sorted,
main = "Dotchart Uniqueness Tiap Variabel",
xlab = "Uniqueness")
abline(v = 0.5, col = "red", lty = 2)
### Loadings faktor
Visualisasi factor loadings memperlihatkan kontribusi masing-masing variabel terhadap faktor yang terbentuk.
# Menampilkan factor loadings
L <- as.matrix(fa_result$loadings)
# Visualisasi loadings faktor
library(corrplot)
corrplot(L,
is.corr = FALSE, # karena ini bukan matriks korelasi
method = "color",
addCoef.col = "black",
tl.col = "black",
tl.srt = 0,
number.cex = 0.8,
mar = c(0,0,2,0))
title("Heatmap Loading Faktor")
Setelah rotasi varimax, faktor pertama berfokus pada variabel ekonomi dan kesejahteraan, sedangkan faktor kedua berhubungan dengan kualitas udara dan ruang hijau.
Berdasarkan hasil PCA dan FA, dapat disimpulkan bahwa tiga komponen utama berhasil menjelaskan sekitar 86,9% variansi total data. Dua faktor utama yang teridentifikasi dalam analisis faktor mewakili dimensi Ekonomi dan Kesejahteraan Kota serta Lingkungan dan Struktur Perkotaan, yang masing-masing memberikan kontribusi signifikan terhadap pemahaman gaya hidup perkotaan.
Pendekatan PCA dan FA terbukti efektif dalam mereduksi kompleksitas data dan mengidentifikasi dimensi utama yang membentuk karakteristik gaya hidup kota dalam dataset sintetis ini.