Deskripsi Dataset

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 dan Eksplorasi Data

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

Menentukan Data yang Digunakan

# 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 dan Covarians

# 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

Hitung Eigen Value dan Eigen Vector

# Menghitung eigen values dan eigenvectors dari matriks kovarians
eig <- eigen(cov_matrix)

Eigen Value

# Menampilkan eigenvalues
print(eig$values)
## [1] 2.5561051 1.2171486 0.6771415 0.6566698 0.5908395 0.3020955

Eigen Vectors

# 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

Korelasi

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

Analisis Korelasi

Korelasi dengan Harga (price):

  • area (0.54) → Cukup kuat, menunjukkan bahwa semakin besar luas rumah, semakin tinggi harganya.
  • bathrooms (0.52) → Rumah dengan lebih banyak kamar mandi cenderung memiliki harga lebih tinggi.
  • stories (0.42) → Jumlah lantai juga memiliki korelasi sedang dengan harga rumah.
  • bedrooms (0.37) & parking (0.38) → Korelasi yang lebih rendah, menunjukkan bahwa jumlah kamar tidur dan tempat parkir tidak terlalu berpengaruh pada harga rumah.

Korelasi antar variabel lainnya:

  • bedrooms dan stories (0.41) → Rumah bertingkat cenderung memiliki lebih banyak kamar tidur.
  • parking memiliki korelasi rendah dengan semua variabel lainnya, menunjukkan bahwa jumlah tempat parkir tidak terlalu berhubungan dengan ukuran atau harga rumah.

Kesimpulan

  • Luas rumah (area) dan jumlah kamar mandi (bathrooms) adalah faktor utama yang mempengaruhi harga rumah.
  • Jumlah lantai (stories) juga berkontribusi terhadap harga, tetapi tidak sekuat luas rumah dan jumlah kamar mandi.
  • Jumlah kamar tidur (bedrooms) dan tempat parkir (parking) memiliki pengaruh yang lebih kecil terhadap harga rumah.
  • Tidak ada korelasi negatif yang signifikan dalam dataset ini, menunjukkan bahwa semua variabel cenderung bergerak dalam arah yang sama.