Pendahuluan

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.

Import Data

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 Preparation

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.

Matriks Korelasi

# 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 (Principal Component Analysis)

Menghitung Eigen Value

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.

Proporsi Variansi yang diJelaskan

# 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.

Reduksi Demensi dengan Komponen Terpilih

# 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.

FA (Factor Analysis)

Faktor Ekstrasi dengan Ekstraksi Varimax

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 dan Visualisasi

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

Interpretasi

Setelah rotasi varimax, faktor pertama berfokus pada variabel ekonomi dan kesejahteraan, sedangkan faktor kedua berhubungan dengan kualitas udara dan ruang hijau.

Kesimpulan

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.