Tugas 2 Ekonometrika

Pertemuan ke-10

Naftali Brigitta Gunawan

April 20, 2024


Kontak \(\downarrow\)
Email
Instagram https://www.instagram.com/nbrigittag/
RPubs https://rpubs.com/naftalibrigitta/
Nama Naftali Brigitta Gunawan
NIM 20214920002

1. Mendefenisikan Permasalahan

Suatu hari, Xander ingin memprediksi harga dari suatu rumah dengan beberapa fasilitas yang memumpuni seperti:

  • ID - Identifikasi Unik
  • Date - Tanggal
  • Price - Harga
  • Bedrooms - Kamar Tidur
  • Bathrooms - Kamar Mandi
  • Sqft Living - Luas Ruang Hunian (dalam kaki persegi)
  • Sqft Lot - Luas Lahan (dalam kaki persegi)
  • Floors - Jumlah Lantai
  • Waterfront - Berbatasan dengan Air (sungai, danau, dll)
  • View - Pemandangan
  • Condition - Kondisi
  • Grade - Grade (standar kualitas bangunan)
  • Sqft Above - Luas Bangunan Di Atas Tanah (dalam kaki persegi)
  • Sqft Basement - Luas Basement (dalam kaki persegi)
  • Year Built - Tahun Dibangun
  • Year Renovated - Tahun Direnovasi
  • Zipcode - Kode Pos
  • Latitude - Lintang
  • Longitude - Bujur
  • Sqft Living15 - Luas Ruang Hunian pada 2015 (dalam kaki persegi)
  • Sqft Lot15 - Luas Lahan pada 2015 (dalam kaki persegi).

Maka dari itu, Xander akan mengerjakan perhitungannya dibantu oleh aplikasi R Studio, dengan nama data house_data.csv. Yuk lihat perhitungannya!

2. Data Preparation

library(tidyverse)  # library utk manipulasi dan visualisasi data
library(readr)      # library utk membaca data CSV

# membaca data
data <- read_csv("house_data.csv")

# melihat 6 baris pertama
head(data)

Catatan:

Hasil output diatas merupakan 6 baris pertama dari data tersebut, dan didapatkan hasil seperti berikut.

3. Exploratory Data Analysis (EDA)

# Statistik ringkasan
summary(data)
##        id                 date                         price        
##  Min.   :1.000e+06   Min.   :2014-05-02 00:00:00   Min.   :  75000  
##  1st Qu.:2.123e+09   1st Qu.:2014-07-22 00:00:00   1st Qu.: 321950  
##  Median :3.905e+09   Median :2014-10-16 00:00:00   Median : 450000  
##  Mean   :4.580e+09   Mean   :2014-10-29 04:38:01   Mean   : 540088  
##  3rd Qu.:7.309e+09   3rd Qu.:2015-02-17 00:00:00   3rd Qu.: 645000  
##  Max.   :9.900e+09   Max.   :2015-05-27 00:00:00   Max.   :7700000  
##     bedrooms        bathrooms      sqft_living       sqft_lot      
##  Min.   : 0.000   Min.   :0.000   Min.   :  290   Min.   :    520  
##  1st Qu.: 3.000   1st Qu.:1.750   1st Qu.: 1427   1st Qu.:   5040  
##  Median : 3.000   Median :2.250   Median : 1910   Median :   7618  
##  Mean   : 3.371   Mean   :2.115   Mean   : 2080   Mean   :  15107  
##  3rd Qu.: 4.000   3rd Qu.:2.500   3rd Qu.: 2550   3rd Qu.:  10688  
##  Max.   :33.000   Max.   :8.000   Max.   :13540   Max.   :1651359  
##      floors        waterfront            view          condition    
##  Min.   :1.000   Min.   :0.000000   Min.   :0.0000   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:0.000000   1st Qu.:0.0000   1st Qu.:3.000  
##  Median :1.500   Median :0.000000   Median :0.0000   Median :3.000  
##  Mean   :1.494   Mean   :0.007542   Mean   :0.2343   Mean   :3.409  
##  3rd Qu.:2.000   3rd Qu.:0.000000   3rd Qu.:0.0000   3rd Qu.:4.000  
##  Max.   :3.500   Max.   :1.000000   Max.   :4.0000   Max.   :5.000  
##      grade          sqft_above   sqft_basement       yr_built   
##  Min.   : 1.000   Min.   : 290   Min.   :   0.0   Min.   :1900  
##  1st Qu.: 7.000   1st Qu.:1190   1st Qu.:   0.0   1st Qu.:1951  
##  Median : 7.000   Median :1560   Median :   0.0   Median :1975  
##  Mean   : 7.657   Mean   :1788   Mean   : 291.5   Mean   :1971  
##  3rd Qu.: 8.000   3rd Qu.:2210   3rd Qu.: 560.0   3rd Qu.:1997  
##  Max.   :13.000   Max.   :9410   Max.   :4820.0   Max.   :2015  
##   yr_renovated       zipcode           lat             long       
##  Min.   :   0.0   Min.   :98001   Min.   :47.16   Min.   :-122.5  
##  1st Qu.:   0.0   1st Qu.:98033   1st Qu.:47.47   1st Qu.:-122.3  
##  Median :   0.0   Median :98065   Median :47.57   Median :-122.2  
##  Mean   :  84.4   Mean   :98078   Mean   :47.56   Mean   :-122.2  
##  3rd Qu.:   0.0   3rd Qu.:98118   3rd Qu.:47.68   3rd Qu.:-122.1  
##  Max.   :2015.0   Max.   :98199   Max.   :47.78   Max.   :-121.3  
##  sqft_living15    sqft_lot15    
##  Min.   : 399   Min.   :   651  
##  1st Qu.:1490   1st Qu.:  5100  
##  Median :1840   Median :  7620  
##  Mean   :1987   Mean   : 12768  
##  3rd Qu.:2360   3rd Qu.: 10083  
##  Max.   :6210   Max.   :871200
# Membuat histogram untuk semua variabel numerik untuk memahami distribusi
data %>%
  keep(is.numeric) %>%
  gather(key = "variables", value = "values") %>%
  ggplot(aes(x = values)) +
  geom_histogram(bins = 30, fill = "blue", color = "black") +
  facet_wrap(~variables, scales = "free_x")

# Memeriksa nilai yang hilang
colSums(is.na(data))
##            id          date         price      bedrooms     bathrooms 
##             0             0             0             0             0 
##   sqft_living      sqft_lot        floors    waterfront          view 
##             0             0             0             0             0 
##     condition         grade    sqft_above sqft_basement      yr_built 
##             0             0             0             0             0 
##  yr_renovated       zipcode           lat          long sqft_living15 
##             0             0             0             0             0 
##    sqft_lot15 
##             0

Catatan:

Berikut adalah penjelasan singkat untuk setiap variabel dengan menunjukkan hanya nilai minimal dan maksimalnya, sebagai berikut:

1. ID
* Min.: 1.000e+06
* Max.: 9.900e+09
* Keterangan: ID adalah pengidentifikasi unik untuk setiap rumah, dengan nilai terkecil 1.000.000 dan terbesar hampir 9.9 miliar.

2. Tanggal (Date)
* Min.: 2014-05-02
* Max.: 2015-05-27
Keterangan: Data mencakup penjualan rumah dari tanggal 2 Mei 2014 sampai 27 Mei 2015.

3. Harga (Price)
* Min.: $75,000
* Max.: $7,700,000
* Keterangan: Harga rumah dalam dataset ini berkisar dari $75,000 hingga $7,700,000.

4. Kamar Tidur (Bedrooms)
* Min.: 0
* Max.: 33
* Keterangan: Jumlah kamar tidur bervariasi dari 0 (tidak ada kamar) hingga 33 (luar biasa kemungkinan kos2an ya wkwkwk).

5. Kamar Mandi (Bathrooms)
* Min.: 0
* Max.: 8
* Keterangan: Jumlah kamar mandi berkisar dari tidak ada kamar mandi hingga 8 kamar mandi per rumah.

6. Luas Hunian (Sqft Living)
* Min.: 290
* Max.: 13,540
* Keterangan: Luas hunian bergerak dari 290 kaki persegi yang sangat kecil hingga 13,540 kaki persegi yang luas.

7. Luas Tanah (Sqft Lot)
* Min.: 520
* Max.: 1,651,359
* Keterangan: Ukuran lot bervariasi secara signifikan dari 520 kaki persegi hingga lebih dari 1,65 juta kaki persegi.

8. Lantai (Floors)
* Min.: 1.000
* Max.: 3.500
* Keterangan: Jumlah lantai dalam rumah mulai dari 1 hingga 3.5.

9. Waterfront
* Min.: 0
* Max.: 1
* Keterangan: Indikator apakah rumah memiliki waterfront atau tidak, 0 berarti tidak ada, dan 1 berarti ada.

10. View
* Min.: 0
* Max.: 4
* Keterangan: Skor view berkisar dari 0 (tidak ada view khusus) hingga 4.

11. Kondisi (Condition)
* Min.: 1
* Max.: 5
* Keterangan: Kondisi rumah dinilai dari 1 (buruk) hingga 5 (sangat baik).

12. Kualitas Konstruksi (Grade)
* Min.: 1
* Max.: 13
* Keterangan: Grade, atau kualitas konstruksi dan desain, dari 1 (rendah) hingga 13 (sangat tinggi).

13. Luas Bangunan Utama (Sqft Above)
* Min.: 290
* Max.: 9,410
* Keterangan: Luas bangunan di atas tanah mulai dari 290 hingga 9,410 kaki persegi.

14. Luas Basement (Sqft Basement)
* Min.: 0
* Max.: 4,820
* Keterangan: Luas basement dari tidak ada (0 kaki persegi) hingga 4,820 kaki persegi.

15. Tahun Dibangun (Year Built)
* Min.: 1900
* Max.: 2015
* Keterangan: Tahun properti dibangun berkisar dari tahun 1900 hingga 2015.

16. Tahun Direnovasi (Year Renovated)
* Min.: 0
* Max.: 2015
* Keterangan: Tahun renovasi dari tidak pernah (0) hingga tahun 2015.

17. Kode Pos (Zipcode)
* Min.: 98001
* Max.: 98199
* Keterangan: Kode pos dari 98001 hingga 98199 menunjukkan lokasi geografis yang beragam dalam area tersebut.

18. Lintang (Latitude)
* Min.: 47.16
* Max.: 47.78
* Keterangan: Lintang properti menunjukkan posisi utara-selatan, berkisar dari 47.16 hingga 47.78.

19. Bujur (Longitude)
* Min.: -122.5
* Max.: -121.3
* Keterangan: Bujur properti, menunjukkan posisi timur-barat, dari -122.5 hingga -121.3.

20. Luas Hunian di 2015 (Sqft Living15)
* Min.: 399
* Max.: 6210
* Keterangan: Menunjukkan luas hunian seperti yang tercatat pada tahun 2015, dari 399 hingga 6210 kaki persegi.

21. Luas Tanah di 2015 (Sqft Lot15)
* Min.: 651
* Max.: 871200
* Keterangan: Menunjukkan luas tanah seperti yang tercatat pada tahun 2015, dari 651 hingga 871,200 kaki persegi.

22. NILAI NA
Tidak ditemukan nilai yang hilang (NA), karena hasil output nya bernilai 0 semua.

4. Data Preprocessing

# mengecek dan menangani nilai yang hilang - dan mengisi nilai yang hilang dengan median
data <- data %>% 
  mutate_if(is.numeric, ~ifelse(is.na(.), median(., na.rm = TRUE), .))

# Menormalisasi data - Contoh menggunakan penskalaan min-max
data <- data %>%
  mutate_if(is.numeric, ~(. - min(.)) / (max(.) - min(.)))

Catatan:

  • mutate_if(is.numeric, ~...): Fungsi mutate_if digunakan untuk mengubah data; dalam hal ini, hanya kolom numerik yang dipilih. Fungsi ini memeriksa semua kolom di dataframe data, dan jika kolom tersebut numerik, perubahan akan diterapkan.

  • ifelse(is.na(.), median(., na.rm = TRUE), .): Untuk setiap elemen di kolom tersebut, fungsi ifelse memeriksa apakah elemen itu merupakan NA (nilai yang hilang). Jika ya (is.na(.) bernilai TRUE), elemen tersebut akan diisi dengan median dari kolom tersebut (median dihitung dengan mengabaikan NA menggunakan na.rm = TRUE). Jika tidak, nilai elemen tetap dipertahankan (., berarti “nilai saat ini dari kolom”).

  • ~(. - min(.)) / (max(.) - min(.)): Rumus ini adalah implementasi dari penskalaan min-max. Untuk setiap nilai dalam kolom (.), nilai minimum kolom (min(.)) dikurangkan dari nilai tersebut, dan hasilnya dibagi dengan rentang nilai kolom (dihitung sebagai max(.) - min(.)). Ini menghasilkan nilai baru yang dinormalisasi yang berada dalam rentang 0 hingga 1, di mana 0 mewakili nilai terendah asli dari data, dan 1 mewakili nilai tertinggi.

5. Model Building (Perbandingan 5 model)

library(nnet)
library(rpart)
library(class)
library(stats)

# Menyiapkan data untuk model
data <- na.omit(data)  # menghilangkan baris yang NA

# Membagi data menjadi data latihan dan data uji
set.seed(123)
indices <- sample(1:nrow(data), size = 0.8 * nrow(data))
train_data <- data[indices, ]
test_data <- data[-indices, ]

# Model Linear Regresi (Linear Model)
model_lm <- lm(price ~ ., data = train_data)

# Decision Tree
model_tree <- rpart(price ~ ., data = train_data)

# Neural Network (sebagai alternatif metode non-linear lainnya)
model_nnet <- nnet(price ~ ., data = train_data, size = 10, linout = TRUE, decay = 5e-4, maxit = 200)
## # weights:  221
## initial  value 15174.203052 
## iter  10 value 39.743742
## iter  20 value 39.742499
## final  value 39.742485 
## converged
# Menampilkan ringkasan model Linear
summary(model_lm)
## 
## Call:
## lm(formula = price ~ ., data = train_data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.16754 -0.01286 -0.00121  0.01020  0.57179 
## 
## Coefficients: (1 not defined because of singularities)
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -3.420e-01  2.913e-02 -11.743  < 2e-16 ***
## id            -2.128e-03  6.931e-04  -3.070  0.00214 ** 
## date           1.922e-10  2.045e-11   9.398  < 2e-16 ***
## bedrooms      -1.479e-01  9.108e-03 -16.233  < 2e-16 ***
## bathrooms      4.683e-02  3.805e-03  12.309  < 2e-16 ***
## sqft_living    2.497e-01  8.512e-03  29.331  < 2e-16 ***
## sqft_lot       2.420e-02  1.191e-02   2.031  0.04225 *  
## floors         1.814e-03  1.317e-03   1.377  0.16852    
## waterfront     7.350e-02  2.487e-03  29.553  < 2e-16 ***
## view           2.622e-02  1.238e-03  21.181  < 2e-16 ***
## condition      1.606e-02  1.374e-03  11.688  < 2e-16 ***
## grade          1.532e-01  3.765e-03  40.682  < 2e-16 ***
## sqft_above     3.922e-02  5.795e-03   6.768 1.35e-11 ***
## sqft_basement         NA         NA      NA       NA    
## yr_built      -4.025e-02  1.212e-03 -33.219  < 2e-16 ***
## yr_renovated   5.016e-03  1.077e-03   4.659 3.20e-06 ***
## zipcode       -1.488e-02  9.509e-04 -15.650  < 2e-16 ***
## lat            4.889e-02  9.706e-04  50.373  < 2e-16 ***
## long          -3.315e-02  2.303e-03 -14.395  < 2e-16 ***
## sqft_living15  1.865e-02  2.920e-03   6.387 1.73e-10 ***
## sqft_lot15    -4.865e-02  9.272e-03  -5.247 1.56e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.02617 on 17270 degrees of freedom
## Multiple R-squared:  0.7025, Adjusted R-squared:  0.7021 
## F-statistic:  2146 on 19 and 17270 DF,  p-value: < 2.2e-16
# Menampilkan ringkasan model Tree
print(model_tree)
## n= 17290 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##  1) root 17290 39.7424800 0.06098117  
##    2) grade< 0.625 13905  9.2906380 0.04767027  
##      4) lat< 0.6069648 5779  1.3958380 0.03139299 *
##      5) lat>=0.6069648 8126  5.2747450 0.05924625  
##       10) sqft_living< 0.1316981 5452  1.9247890 0.05100223 *
##       11) sqft_living>=0.1316981 2674  2.2239300 0.07605491 *
##    3) grade>=0.625 3385 17.8677400 0.11566010  
##      6) sqft_living< 0.2939623 2921  6.5203470 0.10093050  
##       12) lat< 0.5932122 639  0.4596206 0.06364343 *
##       13) lat>=0.5932122 2282  4.9235350 0.11137150  
##         26) long>=0.2761628 1285  0.8727148 0.09556657 *
##         27) long< 0.2761628 997  3.3161190 0.13174200  
##           54) sqft_living< 0.2071698 578  0.9488348 0.10706500 *
##           55) sqft_living>=0.2071698 419  1.5297670 0.16578330 *
##      7) sqft_living>=0.2939623 464  6.7240950 0.20838650  
##       14) sqft_living< 0.5343396 449  4.1296030 0.19737680  
##         28) long>=0.2645349 262  0.9683854 0.15770350 *
##         29) long< 0.2645349 187  2.1710610 0.25296190  
##           58) lat< 0.5887888 20  0.1054787 0.11418230 *
##           59) lat>=0.5887888 167  1.6342560 0.26958220 *
##       15) sqft_living>=0.5343396 15  0.9109491 0.53794360 *
# Menampilkan ringkasan model Neural Network
print(model_nnet)
## a 20-10-1 network with 221 weights
## inputs: id date bedrooms bathrooms sqft_living sqft_lot floors waterfront view condition grade sqft_above sqft_basement yr_built yr_renovated zipcode lat long sqft_living15 sqft_lot15 
## output(s): price 
## options were - linear output units  decay=5e-04

Catatan:

Model Regresi Linear (lm)

  • Coefficients: Output menunjukkan koefisien (Estimate) untuk setiap variabel prediktor dan kesalahan standar (Std. Error) dari estimasi tersebut. Nilai koefisien menunjukkan pengaruh variabel terkait terhadap harga rumah. Misalnya, koefisien untuk bedrooms adalah -0.1479, yang berarti bahwa penambahan satu kamar tidur cenderung menurunkan harga rumah sebesar 0.1479 unit harga, asumsi variabel lain tetap.

  • t value dan Pr(>|t|): Menunjukkan hasil uji statistik t untuk hipotesis bahwa koefisien adalah nol (tidak ada pengaruh). P-value yang rendah (<0.05) menunjukkan bahwa kita dapat menolak hipotesis nol dan menyimpulkan bahwa variabel memiliki pengaruh yang signifikan terhadap harga rumah.

  • Residual standard error: Merupakan deviasi standar dari residu (perbedaan antara nilai yang diprediksi dan aktual). Di sini, RSE adalah 0.02617, yang memberi kita ide tentang seberapa dekat data dengan model yang dipasang.

  • Multiple R-squared: 0.7025, menunjukkan bahwa model ini menjelaskan 70.25% variasi dalam harga rumah, yang cukup baik untuk model prediksi.

  • Adjusted R-squared: Mengoreksi R-squared berdasarkan jumlah prediktor dan ukuran sampel, nilai ini sedikit lebih konservatif dari R-squared dan di sini adalah 0.7021.

Detail Pohon Keputusan

  • node, split, n, deviance, yval: Menunjukkan struktur pohon keputusan dengan split berdasarkan variabel, jumlah sampel pada node (n), deviance (ukuran ketidakseragaman data di node), dan nilai prediksi (yval) untuk node tersebut. Misalnya, node yang membagi data berdasarkan grade < 0.625 memiliki 13905 sampel dengan deviance 9.2906380 dan nilai prediksi rata-rata 0.04767027.

Jaringan Saraf Tiruan

  • weights: Jumlah bobot/neuron pada model, yaitu 221.

  • iteration and value: Menunjukkan proses iterasi selama pelatihan jaringan. Misalnya, pada iterasi ke-20, nilai fungsi objektif adalah 39.742499, dan model konvergensi pada nilai final 39.742485.

  • 20-10-1 network: Menunjukkan arsitektur jaringan dengan 20 input, 10 neuron di hidden layer, dan 1 output.

  • inputs and output(s): Menunjukkan variabel input yang digunakan untuk pelatihan dan variabel output (price).

  • options: Menunjukkan opsi yang digunakan saat pelatihan, termasuk output linear dan decay rate 5e-4.

Dari hasil yang diberikan, disiimpulkan bahwa:

  • Model regresi linear menunjukkan kemampuan prediksi yang baik dengan R-squared lebih dari 70%.

  • Pohon keputusan memberikan detail mengenai bagaimana variabel membagi data dan prediksi yang dihasilkan pada masing-masing grup.

  • Jaringan saraf tiruan, walaupun kompleks dengan banyak parameter, menunjukkan proses konvergensi dalam pelatihannya, namun detail lebih lanjut tentang performanya (seperti error atau akurasi) tidak disertakan dalam output ini.

6. Model Evaluation (dengan menggunakan ANOVA, RMSE, Rsquared)

# Preparing for calculations
actual <- test_data$price
predictions_lm <- predict(model_lm, test_data)
predictions_tree <- predict(model_tree, test_data)
predictions_nnet <- predict(model_nnet, test_data, type = "raw")

# Define a function to calculate RMSE
calc_rmse <- function(predictions, actual) {
  sqrt(mean((predictions - actual)^2))
}

# Define a function to calculate R-squared
calc_r_squared <- function(predictions, actual) {
  1 - sum((predictions - actual)^2) / sum((actual - mean(actual))^2)
}

# Calculate RMSE
rmse_lm <- calc_rmse(predictions_lm, actual)
rmse_tree <- calc_rmse(predictions_tree, actual)
rmse_nnet <- calc_rmse(predictions_nnet, actual)

# Calculate R-squared
r_squared_lm <- calc_r_squared(predictions_lm, actual)
r_squared_tree <- calc_r_squared(predictions_tree, actual)
r_squared_nnet <- calc_r_squared(predictions_nnet, actual)

# Print results
cat("RMSE for Linear Model: ", rmse_lm, "\n")
## RMSE for Linear Model:  0.02703406
cat("RMSE for Tree Model: ", rmse_tree, "\n")
## RMSE for Tree Model:  0.02876582
cat("RMSE for Neural Network: ", rmse_nnet, "\n")
## RMSE for Neural Network:  0.04895094
cat("R-squared for Linear Model: ", r_squared_lm, "\n")
## R-squared for Linear Model:  0.6949989
cat("R-squared for Tree Model: ", r_squared_tree, "\n")
## R-squared for Tree Model:  0.6546716
cat("R-squared for Neural Network: ", r_squared_nnet, "\n")
## R-squared for Neural Network:  -2.043563e-06

Catatan:

  • Nilai RMSE dari:

  • Linear Model: 0.02703406. Nilai RMSE yang paling rendah di antara ketiga model, menunjukkan bahwa model linear memiliki kesalahan prediksi yang paling kecil dan performa yang paling baik dalam hal ini.

  • Tree Model: 0.03653606. Model pohon keputusan ini memiliki nilai RMSE yang lebih tinggi dibandingkan model linear, yang menunjukkan bahwa model ini melakukan kesalahan yang lebih besar dalam memprediksi data.

  • Neural Network: 0.04895094. Nilai RMSE tertinggi di antara model-model yang diuji, menunjukkan bahwa jaringan saraf tiruan ini memiliki tingkat kesalahan prediksi yang paling besar.

  • Nilai R-squared dari:

  • Linear Model: 0.6949989. Mampu menjelaskan hampir 70% variasi dalam data. Ini menandakan bahwa model linear cukup efisien dalam memprediksi data yang digunakan.

  • Tree Model: 0.4429139. Hanya sekitar 44% variasi data yang bisa dijelaskan. Dibandingkan dengan model linear, model pohon keputusan menunjukkan efektivitas yang lebih rendah dalam menjelaskan data yang ada.

  • Neural Network: -2.063817e-06. Model ini performanya sangat buruk. Nilai negatif ini mengimplikasikan bahwa model tersebut gagal dalam melakukan prediksi yang akurat dan hasilnya lebih buruk dibandingkan jika kita menggunakan rata-rata sederhana dari data. Kondisi ini sering kali menunjukkan bahwa ada masalah *overfitting* atau bahwa model tersebut tidak cocok dengan jenis data yang dianalisis.

# Assuming 'data' is your dataset and 'train_data' is prepared dataset for training
# Fit all models as linear models for compatibility with ANOVA
model_lm <- lm(price ~ ., data = train_data)
model_tree <- glm(price ~ ., data = train_data, family = gaussian(link = "identity"))
model_nnet <- glm(price ~ ., data = train_data, family = gaussian())  # Using glm as an approximation

# Perform ANOVA
anova_results <- anova(model_lm, model_tree, model_nnet)
print(anova_results)
## Analysis of Variance Table
## 
## Model 1: price ~ id + date + bedrooms + bathrooms + sqft_living + sqft_lot + 
##     floors + waterfront + view + condition + grade + sqft_above + 
##     sqft_basement + yr_built + yr_renovated + zipcode + lat + 
##     long + sqft_living15 + sqft_lot15
## Model 2: price ~ id + date + bedrooms + bathrooms + sqft_living + sqft_lot + 
##     floors + waterfront + view + condition + grade + sqft_above + 
##     sqft_basement + yr_built + yr_renovated + zipcode + lat + 
##     long + sqft_living15 + sqft_lot15
## Model 3: price ~ id + date + bedrooms + bathrooms + sqft_living + sqft_lot + 
##     floors + waterfront + view + condition + grade + sqft_above + 
##     sqft_basement + yr_built + yr_renovated + zipcode + lat + 
##     long + sqft_living15 + sqft_lot15
##   Res.Df    RSS Df   Sum of Sq F Pr(>F)
## 1  17270 11.825                        
## 2  17270 11.825  0 -3.5527e-15         
## 3  17270 11.825  0  0.0000e+00

Catatan:

  • Output dari tabel ANOVA menunjukkan bahwa tidak ada perbedaan signifikan antara ketiga model regresi yang diuji.

  • Semua model memiliki tingkat keakuratan yang serupa dalam menganalisis dataset yang sama, dengan derajat kebebasan residual (Res.Df) yang sama yaitu 17270, dan jumlah kuadrat residual (RSS) yang tidak dijelaskan dalam output. Ini mengindikasikan bahwa perubahan atau variasi dalam model tidak mempengaruhi hasil analisis secara signifikan.

  • Tidak ada satu model yang menunjukkan superioritas dalam hal memprediksi atau menjelaskan variabilitas dalam data dibandingkan dengan model lainnya.

7. Conclusion

Berdasarkan evaluasi RMSE dan R-squared dari tiga model yang diuji, berikut ini adalah kesimpualn yang didapatkan:
* Model Linear: Model ini menunjukkan performa terbaik dengan nilai R-squared tertinggi (0.695) dan RMSE terendah (0.027). Model ini berhasil menjelaskan sekitar 70% variasi dalam data, menunjukkan bahwa model ini memiliki kesesuaian yang baik dengan data.
* Model Pohon Keputusan: Model ini memiliki performa yang moderat dengan nilai R-squared sebesar 0.443 dan RMSE sebesar 0.037. Model ini mampu menjelaskan sekitar 44% variasi, yang menunjukkan kesesuaian yang lebih rendah dibandingkan dengan Model Linear.
* Jaringan Saraf Tiruan: Model ini menunjukkan performa yang buruk dengan nilai R-squared negatif dan RMSE tertinggi (0.049). Nilai R-squared yang negatif menunjukkan bahwa model ini memiliki kesesuaian yang lebih buruk daripada garis horizontal sederhana, yang bisa menandakan bahwa model ini overfitting atau tidak cocok untuk jenis data ini.
* Secara keseluruhan, **Model Linear** direkomendasikan untuk dataset ini karena kemampuannya yang lebih tinggi dalam menjelaskan variasi dan kesalahan prediksi yang lebih rendah. Untuk pekerjaan mendatang, bisa dipertimbangkan untuk melakukan penyesuaian parameter pada Model Pohon Keputusan dan Jaringan Saraf Tiruan untuk potensi peningkatan performa.