Dataset yang digunakan dalam analisis ini berasal dari Housing Prices Dataset (https://www.kaggle.com/datasets/yasserh/housing-prices-dataset). Dataset ini berisi berbagai informasi mengenai rumah, seperti luas bangunan, jumlah kamar tidur, jumlah kamar mandi, keberadaan perabotan, serta kedekatan dengan jalan utama.
Tujuan dari analisis ini adalah memahami hubungan antara variabel-variabel dalam dataset, termasuk melihat varians, kovarians, eigenvalues, serta korelasi antar variabel numerik. Analisis ini membantu dalam mengidentifikasi pola dalam data yang dapat berkontribusi pada prediksi harga rumah dengan lebih akurat.
# Load dataset dari file CSV
housing <- read.csv("~/Housing.csv", header = TRUE)
head(housing)
## price area bedrooms bathrooms stories mainroad guestroom basement
## 1 13300000 7420 4 2 3 yes no no
## 2 12250000 8960 4 4 4 yes no no
## 3 12250000 9960 3 2 2 yes no yes
## 4 12215000 7500 4 2 2 yes no yes
## 5 11410000 7420 4 1 2 yes yes yes
## 6 10850000 7500 3 3 1 yes no yes
## hotwaterheating airconditioning parking prefarea furnishingstatus
## 1 no yes 2 yes furnished
## 2 no yes 3 no furnished
## 3 no no 2 yes semi-furnished
## 4 no yes 3 yes furnished
## 5 no yes 2 no furnished
## 6 no yes 2 yes semi-furnished
Dataset yang digunakan berisi 545 baris dan 13 variabel yang mencakup informasi mengenai harga rumah, luas area, jumlah kamar tidur dan kamar mandi, serta beberapa fitur tambahan seperti akses ke jalan utama, keberadaan ruang tamu tamu (guestroom), basement, pemanas air, pendingin udara, dan status perabotan.
# Melihat struktur data (tipe variabel)
str(housing)
## 'data.frame': 545 obs. of 13 variables:
## $ price : int 13300000 12250000 12250000 12215000 11410000 10850000 10150000 10150000 9870000 9800000 ...
## $ area : int 7420 8960 9960 7500 7420 7500 8580 16200 8100 5750 ...
## $ bedrooms : int 4 4 3 4 4 3 4 5 4 3 ...
## $ bathrooms : int 2 4 2 2 1 3 3 3 1 2 ...
## $ stories : int 3 4 2 2 2 1 4 2 2 4 ...
## $ mainroad : chr "yes" "yes" "yes" "yes" ...
## $ guestroom : chr "no" "no" "no" "no" ...
## $ basement : chr "no" "no" "yes" "yes" ...
## $ hotwaterheating : chr "no" "no" "no" "no" ...
## $ airconditioning : chr "yes" "yes" "no" "yes" ...
## $ parking : int 2 3 2 3 2 2 2 0 2 1 ...
## $ prefarea : chr "yes" "no" "yes" "yes" ...
## $ furnishingstatus: chr "furnished" "furnished" "semi-furnished" "furnished" ...
Dari code ini diketahui bahwa dataset terdiri dari variabel numerik dan kategorikal. Variabel seperti price, area, bedrooms, bathrooms, dan stories bertipe integer, sementara variabel seperti mainroad, guestroom, basement, hotwaterheating, airconditioning, furnishingstatus bertipe karakter.
# Cek Missing Value
colSums(is.na(housing))
## price area bedrooms bathrooms
## 0 0 0 0
## stories mainroad guestroom basement
## 0 0 0 0
## hotwaterheating airconditioning parking prefarea
## 0 0 0 0
## furnishingstatus
## 0
# Melihat ringkasan statistik
summary(housing)
## price area bedrooms bathrooms
## Min. : 1750000 Min. : 1650 Min. :1.000 Min. :1.000
## 1st Qu.: 3430000 1st Qu.: 3600 1st Qu.:2.000 1st Qu.:1.000
## Median : 4340000 Median : 4600 Median :3.000 Median :1.000
## Mean : 4766729 Mean : 5151 Mean :2.965 Mean :1.286
## 3rd Qu.: 5740000 3rd Qu.: 6360 3rd Qu.:3.000 3rd Qu.:2.000
## Max. :13300000 Max. :16200 Max. :6.000 Max. :4.000
## stories mainroad guestroom basement
## Min. :1.000 Length:545 Length:545 Length:545
## 1st Qu.:1.000 Class :character Class :character Class :character
## Median :2.000 Mode :character Mode :character Mode :character
## Mean :1.806
## 3rd Qu.:2.000
## Max. :4.000
## hotwaterheating airconditioning parking prefarea
## Length:545 Length:545 Min. :0.0000 Length:545
## Class :character Class :character 1st Qu.:0.0000 Class :character
## Mode :character Mode :character Median :0.0000 Mode :character
## Mean :0.6936
## 3rd Qu.:1.0000
## Max. :3.0000
## furnishingstatus
## Length:545
## Class :character
## Mode :character
##
##
##
# Memilih hanya kolom numerik
numeric_data <- housing[, sapply(housing, is.numeric)]
head(numeric_data)
## price area bedrooms bathrooms stories parking
## 1 13300000 7420 4 2 3 2
## 2 12250000 8960 4 4 4 3
## 3 12250000 9960 3 2 2 2
## 4 12215000 7500 4 2 2 3
## 5 11410000 7420 4 1 2 2
## 6 10850000 7500 3 3 1 2
Pada data ini, setiap variabel numerik memiliki skala yang berbeda. Misalnya, variabel price memiliki nilai dalam jutaan, sedangkan area memiliki nilai dalam ribuan, sementara bedrooms dan bathrooms hanya memiliki nilai kecil dalam satuan. Perbedaan skala ini dapat menyebabkan variabel dengan nilai besar mendominasi analisis statistik, seperti dalam perhitungan varians, kovarians, atau model machine learning. Oleh karena itu, diperlukan standarisasi untuk menyamakan skala setiap variabel, sehingga semua variabel memiliki kontribusi yang seimbang dalam analisis
# Standarisasi Data
numeric_data_scaled <- scale(numeric_data)
head(numeric_data_scaled)
## price area bedrooms bathrooms stories parking
## [1,] 4.562174 1.045766 1.40213123 1.4205067 1.3769519 1.516299
## [2,] 4.000809 1.755397 1.40213123 5.4008469 2.5296997 2.676950
## [3,] 4.000809 2.216196 0.04723492 1.4205067 0.2242042 1.516299
## [4,] 3.982096 1.082630 1.40213123 1.4205067 0.2242042 2.676950
## [5,] 3.551716 1.045766 1.40213123 -0.5696634 0.2242042 1.516299
## [6,] 3.252321 1.082630 0.04723492 3.4106768 -0.9285436 1.516299
# Menghitung varians dari setiap variabel numerik
varians <- apply(numeric_data_scaled, 2, var)
print(varians)
## price area bedrooms bathrooms stories parking
## 1 1 1 1 1 1
# Menghitung matriks kovarians antar variabel numerik
cov_matrix <- cov(numeric_data_scaled)
print(cov_matrix)
## price area bedrooms bathrooms stories parking
## price 1.0000000 0.53599735 0.3664940 0.5175453 0.42071237 0.38439365
## area 0.5359973 1.00000000 0.1518585 0.1938195 0.08399605 0.35298048
## bedrooms 0.3664940 0.15185849 1.0000000 0.3739302 0.40856424 0.13926990
## bathrooms 0.5175453 0.19381953 0.3739302 1.0000000 0.32616471 0.17749582
## stories 0.4207124 0.08399605 0.4085642 0.3261647 1.00000000 0.04554709
## parking 0.3843936 0.35298048 0.1392699 0.1774958 0.04554709 1.00000000
# Menghitung eigen values dan eigenvectors dari matriks kovarians
eig <- eigen(cov_matrix)
# Menampilkan eigenvalues
print(eig$values)
## [1] 2.5561051 1.2171486 0.6771415 0.6566698 0.5908395 0.3020955
# Menampilkan eigenvectors
print(eig$vectors)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] -0.5395439 0.1203486 0.24279104 0.04162299 -0.14135501 0.78342034
## [2,] -0.3685384 0.5178529 0.51575760 -0.22455991 0.31542421 -0.42436114
## [3,] -0.3915181 -0.3822393 -0.38949056 -0.24634216 0.69703170 0.04864311
## [4,] -0.4322131 -0.2116685 0.01788812 0.81460710 -0.03855905 -0.32093105
## [5,] -0.3682862 -0.4917297 0.12475034 -0.46684594 -0.55146176 -0.29146070
## [6,] -0.3119977 0.5335130 -0.71236303 -0.07500705 -0.29845646 -0.12592842
# Menghitung matriks korelasi
cor_matrix <- cor(numeric_data_scaled)
print(cor_matrix)
## price area bedrooms bathrooms stories parking
## price 1.0000000 0.53599735 0.3664940 0.5175453 0.42071237 0.38439365
## area 0.5359973 1.00000000 0.1518585 0.1938195 0.08399605 0.35298048
## bedrooms 0.3664940 0.15185849 1.0000000 0.3739302 0.40856424 0.13926990
## bathrooms 0.5175453 0.19381953 0.3739302 1.0000000 0.32616471 0.17749582
## stories 0.4207124 0.08399605 0.4085642 0.3261647 1.00000000 0.04554709
## parking 0.3843936 0.35298048 0.1392699 0.1774958 0.04554709 1.00000000
# Visualisasi heatmap korelasi
library(corrplot)
## corrplot 0.95 loaded
corrplot(cor_matrix, method = "color", tl.col = "black", tl.cex = 0.8, addCoef.col = "white")
Korelasi dengan Harga (price):
Korelasi antar variabel lainnya: