Email : dsciencelabs@outlook.com
Instagram : https://www.instagram.com/dsciencelabs
RPubs : https://rpubs.com/dsciencelabs/
Github : https://github.com/dsciencelabs/
Telegram : @dsciencelabs
Department : Business Statistics
Address : ARA Center, Matana University Tower
Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.
Tujuan dari project ini adalah untuk memprediksi penjualan rumah di King County, Washington, AS menggunakan metode regresi linear berganda. Dataset terdiri dari data historis rumah yang dijual antara Mei 2014 hingga Mei 2015.
Sebelum kita melangkah lebih jauh dalam proses pengolahan data, sejatinya pada saat anda ingin menggunakan R (atau bahasa pemrograman lainnya), diperlukan beberapa packages untuk memudahkan kita dalam bekerja. Berikut adalah beberapa package, source code (fungsi) g_regression.R dan pengaturan warna yang digunakan:
# install.packages("devtools") # untuk menggunakan packages diluar R (developer)
# devtools::install_github("edwinth/paletti") # install packges paletti dari github
source("g_regression.R") # jangan lupa download dan save fungsi ini (link diatas)
library(tidyverse)
library(dplyr)
library(GGally)
library(lubridate)
library(paletti)
library(gridExtra)
library(grid)
library(MLmetrics)
library(car)
library(lmtest)
library(scales)
library(nortest)
# WARNA
mycolor = c(
dark_blue="#003f5c",
light_blue="#2f4b7c",
light_purple ="#665191",
dark_pink="#a05195",
light_pink="#d45087",
light_red="#f95d6a",
dark_orange="#ff6347",
light_orange="#ff7c43",
semi_orange="#e79658",
orange="#dda15a",
cream="#b59378",
dark_cream="#A57F5F",
choc="#85664B",
dark_choc="#6b5340"
)
mycolorfill = c(
light_blue="#2f4b7c",
light_purple ="#665191",
dark_pink="#a05195",
light_pink="#d45087",
light_red="#f95d6a",
dark_orange="#ff6347",
semi_orange="#e79658",
orange="#dda15a",
cream="#b59378",
dark_cream="#A57F5F",
choc="#85664B",
dark_choc="#6b5340",
light_orange="#ff7c43"
)
mycolor_fill <- get_scale_fill(get_pal(mycolorfill))
mycolor_color <- get_scale_color(get_pal(mycolor))
mycolor_hex <- get_hex(mycolor)
Data yang digunakan dalam projek adalah KC_Housesales_Data, silahkan untuk download dan membaca sekilas mengenai latar belakang data tersebut sebelum memulai melakukan analisa.
## [1] 21597 21
## [1] "id" "date" "price" "bedrooms"
## [5] "bathrooms" "sqft_living" "sqft_lot" "floors"
## [9] "waterfront" "view" "condition" "grade"
## [13] "sqft_above" "sqft_basement" "yr_built" "yr_renovated"
## [17] "zipcode" "lat" "long" "sqft_living15"
## [21] "sqft_lot15"
Berdasarkan data diatas, dataset yang digunakan memiliki 21597 observasi dan 21 variabel. Selain itu, Struktur data yang kita miliki sudah sesuai dengan kebutuhan.
Dari struktur data diatas terdapat data id dan date. Variabel id tidak memberi informasi yang cukup penting untuk melakukan analisa regresi linear. Sehingga dapat variable ini diremove. Perlu dicatat bahwa dalam projek ini kita tidak mempertimbangkan tahun penjualan karena data diambil dari Mei 2014 hingga Mei 2015 sehingga perubahan wakti yang terjadi tidak signifikan mempengaruhi harga jual perumahan tersebut.
Berikut ini dilampirkan beberapa penjelasan singkat mengenai variabel yang digunakan dalam projek ini. Pada data yang hanya bernilai 1 dan 0 menandakan 1 = “Iya” dan 0 = “Tidak”
Area | Area rumah |
---|---|
Garage | Jumlah Garasi |
FirePlace | Jumlah Perapin |
Baths | Jumlah Kamar Mandi |
White.Marble | Apakah menggunkan keramik “White Marble” |
Black.Marble | Apakah menggunakan keramik “Black Marble” |
Floors | Apakah lantai sudah diflooring |
City | Lokasi Kota dari rumah |
Solar | Apakah terdapat tenaga surya |
Electric | Apakah terdapat listrik |
Fiber | Apakah menggunakan Fiber |
Glass.Doors | Apakah menggunakan pintu kaca |
Swiming.Pool | Apakah terdapat kolam renang |
Garden | Apakah terdapat taman |
Prices | Harga rumah. variabel yang akan diprediksi dalam analisis ini. |
Dalam setiap proses pengolahan data, sering sekali kita melakukan pemeriksaan data yang hilang (missing values) sebelum melakukan proses analisa. Secara sederhana anda dapat melakukan pemerikasaan dengan R, sebagai berikut:
## price bedrooms bathrooms sqft_living sqft_lot
## 0 0 0 0 0
## floors waterfront view condition grade
## 0 0 0 0 0
## sqft_above sqft_basement yr_built yr_renovated zipcode
## 0 0 0 0 0
## lat long sqft_living15 sqft_lot15
## 0 0 0 0
Anda beruntung, karena ternyata tidak ditemukan missing value pada dataset ini.
## price bedrooms bathrooms sqft_living
## Min. : 78000 Min. : 1.000 Min. :0.500 Min. : 370
## 1st Qu.: 322000 1st Qu.: 3.000 1st Qu.:1.750 1st Qu.: 1430
## Median : 450000 Median : 3.000 Median :2.250 Median : 1910
## Mean : 540297 Mean : 3.373 Mean :2.116 Mean : 2080
## 3rd Qu.: 645000 3rd Qu.: 4.000 3rd Qu.:2.500 3rd Qu.: 2550
## Max. :7700000 Max. :33.000 Max. :8.000 Max. :13540
## sqft_lot floors waterfront view
## Min. : 520 Min. :1.000 Min. :0.000000 Min. :0.0000
## 1st Qu.: 5040 1st Qu.:1.000 1st Qu.:0.000000 1st Qu.:0.0000
## Median : 7618 Median :1.500 Median :0.000000 Median :0.0000
## Mean : 15099 Mean :1.494 Mean :0.007547 Mean :0.2343
## 3rd Qu.: 10685 3rd Qu.:2.000 3rd Qu.:0.000000 3rd Qu.:0.0000
## Max. :1651359 Max. :3.500 Max. :1.000000 Max. :4.0000
## condition grade sqft_above sqft_basement yr_built
## Min. :1.00 Min. : 3.000 Min. : 370 Min. : 0.0 Min. :1900
## 1st Qu.:3.00 1st Qu.: 7.000 1st Qu.:1190 1st Qu.: 0.0 1st Qu.:1951
## Median :3.00 Median : 7.000 Median :1560 Median : 0.0 Median :1975
## Mean :3.41 Mean : 7.658 Mean :1789 Mean : 291.7 Mean :1971
## 3rd Qu.:4.00 3rd Qu.: 8.000 3rd Qu.:2210 3rd Qu.: 560.0 3rd Qu.:1997
## Max. :5.00 Max. :13.000 Max. :9410 Max. :4820.0 Max. :2015
## yr_renovated zipcode lat long
## Min. : 0.00 Min. :98001 Min. :47.16 Min. :-122.5
## 1st Qu.: 0.00 1st Qu.:98033 1st Qu.:47.47 1st Qu.:-122.3
## Median : 0.00 Median :98065 Median :47.57 Median :-122.2
## Mean : 84.46 Mean :98078 Mean :47.56 Mean :-122.2
## 3rd Qu.: 0.00 3rd Qu.:98118 3rd Qu.:47.68 3rd Qu.:-122.1
## Max. :2015.00 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 : 12758
## 3rd Qu.:2360 3rd Qu.: 10083
## Max. :6210 Max. :871200
Karena fokus pada projek ini adalah melakukan prediksi dengan Regresi Linear berganda, perlu dilakukan analisa korelasi untuk setiap variabel yang ada.
ggcorr(house,label = T, size=3, label_size = 3, hjust=0.95)+
labs(
title="Matriks Korelasi Data set"
)+
theme_minimal()+
theme(
plot.title = element_text(hjust = 0.5),
axis.title=element_text(size=8,face="bold"),
axis.text.y=element_blank()
)
Berdasarkan matriks korelasi dari data input diatas, setiap variabel mempunyai pengaruh terhadap Price kecuali condition dan longitude. Kemudian variabel yang memiliki korelasi paling tinggi dengan Price adalah sqft_living dan grade.
# length(boxplot(house$price)$out)
#house <- house %>% filter(!Prices %in% bx.plot.outlier)
ggplot(house, aes(x=price)) +
geom_histogram(aes(y=..density..), colour="black", fill="white")+
geom_density(alpha=.2, fill="blue")+
labs(title="Distribusi Harga Tanpa Outlier")+
theme_minimal()+
theme(
plot.title = element_text(hjust = 0.5),
axis.title=element_text(size=9,face="bold"),
axis.text.y=element_text(margin = margin(l=5)),
axis.text.x.bottom = element_text(margin = margin(b=5))
)+
mycolor_fill()
Jika dilihat terdapat cukup banyak data yang memiliki harga yang jauh lebih tinggi dari data lainnya sehingga menyebabkan distribusi penyebaran harga rumah tidak normal. Sehinga saya memutuskan untuk membuang data dengan harga yang lebih dari USD 200 juta karena jika dilihat dari chart distribusi diatas untuk data yang memiliki harga diatas USD 200 juta sangat sedikit. berikut hasilnya:
house_clean <- house %>%
filter(price < 2000000)
ggplot(house_clean, aes(x=price)) +
geom_histogram(aes(y=..density..), colour="black", fill="white",binwidth = 50000)+
geom_density(alpha=.2, fill="blue")+
scale_x_continuous(name = "Harga",
labels = dollar)+
labs(title="Distribusi Harga <Rp 200 Jutaan")+
theme_minimal()+
theme(
plot.title = element_text(hjust = 0.5),
axis.title=element_text(size=9,face="bold"),
axis.text.y=element_text(margin = margin(l=5)),
axis.text.x.bottom = element_text(margin = margin(b=5))
)+
mycolor_fill()
Untuk membangun model regresi lineat ini saya membagi data train:test dengan proporsi 80:20. Proporsi ini yang sudah sering digunakan dalam proses pemodelan machine learning.
Modelling menggunakan metode regresi Linear ini dilakukan untuk memprediksi harga dari suatu rumah (Prices).
Berdasarkan matriks korelasi sebelumnya, variabel sqft_living dan grade memiliki korelasi paling kuat dengan variabel Price. Mari kita coba:
Linear Regression with single predictor: sqft_living
##
## Call:
## lm(formula = price ~ sqft_living, data = house_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -942298 -137786 -21916 100326 1328560
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 55373.200 4130.460 13.41 <2e-16 ***
## sqft_living 225.525 1.855 121.57 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 209600 on 17275 degrees of freedom
## Multiple R-squared: 0.4611, Adjusted R-squared: 0.461
## F-statistic: 1.478e+04 on 1 and 17275 DF, p-value: < 2.2e-16
Jika dilihat berdasarkan P-Value variabel sqft_living sangat berpengaruh terhadap harga. Namun, jika sebagai single predictor, model ini hanya memiliki nilai Adjusted R-squared: 0.4615 yang berarti hanya berhasil menangkap variansi dari target sebesar 46%
Linear Regression with single predictor: grade
##
## Call:
## lm(formula = price ~ grade, data = house_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -546914 -136914 -29518 95430 1407982
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -797566 10846 -73.54 <2e-16 ***
## grade 172448 1406 122.68 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 208700 on 17275 degrees of freedom
## Multiple R-squared: 0.4656, Adjusted R-squared: 0.4655
## F-statistic: 1.505e+04 on 1 and 17275 DF, p-value: < 2.2e-16
Jika dilihat berdasarkan P-Value variabel grade sangat berpengaruh terhadap harga. Namun, jika sebagai single predictor, model ini hanya memiliki nilai Adjusted R-squared: 0.4615 yang berarti hanya berhasil menangkap variansi dari target sebesar 46%.
Kesimpulan: Model Linear Regression menggunakan single predictor tidak cocok diterapkan untuk menentukan harga rumah pada dataset ini.
##
## Call:
## lm(formula = price ~ ., data = house_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -813087 -86700 -10908 67846 1013081
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.037e+06 2.484e+06 -0.417 0.6764
## bedrooms -1.674e+04 1.628e+03 -10.279 < 2e-16 ***
## bathrooms 2.844e+04 2.801e+03 10.153 < 2e-16 ***
## sqft_living 1.001e+02 3.853e+00 25.991 < 2e-16 ***
## sqft_lot 2.149e-01 4.397e-02 4.886 1.04e-06 ***
## floors 2.977e+04 3.079e+03 9.668 < 2e-16 ***
## waterfront 2.710e+05 1.700e+04 15.944 < 2e-16 ***
## view 4.609e+04 1.852e+03 24.889 < 2e-16 ***
## condition 2.836e+04 2.006e+03 14.140 < 2e-16 ***
## grade 9.261e+04 1.859e+03 49.824 < 2e-16 ***
## sqft_above 7.832e+00 3.773e+00 2.076 0.0379 *
## sqft_basement NA NA NA NA
## yr_built -2.169e+03 6.214e+01 -34.899 < 2e-16 ***
## yr_renovated 2.104e+01 3.154e+00 6.671 2.62e-11 ***
## zipcode -4.105e+02 2.807e+01 -14.623 < 2e-16 ***
## lat 5.850e+05 9.132e+03 64.059 < 2e-16 ***
## long -1.399e+05 1.116e+04 -12.532 < 2e-16 ***
## sqft_living15 4.428e+01 3.006e+00 14.733 < 2e-16 ***
## sqft_lot15 -2.794e-01 6.398e-02 -4.367 1.27e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 152900 on 17259 degrees of freedom
## Multiple R-squared: 0.7135, Adjusted R-squared: 0.7132
## F-statistic: 2528 on 17 and 17259 DF, p-value: < 2.2e-16
Hasil summary dari model lm_house_all memberikan banyak informasi. nilai Estimate
menginterpretasikan nilai setiap koefisien, misalnya apabila rumah memiliki waterfront maka akan berkontribusi pada kenaikan harga rumah sebesar USD 276282.06. Tapi kalau dilihat yang aneh pada variabel bedrooms, jika jumlah kamar bertambah 1 maka harga rumah berkuran sebesar USD -15545.64, apakah didaerah sana orang gak suka kamar banyak? :)
Mari melihat nilai dari Pr(>|t|)
, nilai ini menunjukan seberapa besar suatu variabel berpengaruh untuk memprediksi Prices. jika nilainya Pr(>|t|)
dibawah 0.05 maka dapat diasumsikan bahwa variabel memiliki pengaruh signifikan dan sebaliknya. Berdasarkan summary model diatas, variabel sqft_above dan sqft_basement memilki nilai P Value > 0.05 bahkan NA Value, sehingga variabel ini dapat di exclude dari prediktor. Namun saya masih kurang mengerti untuk mendektsi singularitas pada variabel sqft_basement, next saya update terkait ini.
Selain itu, jika dilihat nilai Adjusted R-squared:0.7134 , hal ini menandakan bahwa model lm_house_all dapat memprediksi 71.3%. Angka yang belum cukup bagus, tapi coba kita selesaikan.
## Start: AIC=412506.2
## price ~ 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
##
##
## Step: AIC=412506.2
## price ~ bedrooms + bathrooms + sqft_living + sqft_lot + floors +
## waterfront + view + condition + grade + sqft_above + yr_built +
## yr_renovated + zipcode + lat + long + sqft_living15 + sqft_lot15
##
## Df Sum of Sq RSS AIC
## <none> 4.0345e+14 412506
## - sqft_above 1 1.0074e+11 4.0355e+14 412509
## - sqft_lot15 1 4.4581e+11 4.0390e+14 412523
## - sqft_lot 1 5.5806e+11 4.0401e+14 412528
## - yr_renovated 1 1.0403e+12 4.0449e+14 412549
## - floors 1 2.1850e+12 4.0564e+14 412598
## - bathrooms 1 2.4097e+12 4.0586e+14 412607
## - bedrooms 1 2.4700e+12 4.0592e+14 412610
## - long 1 3.6716e+12 4.0712e+14 412661
## - condition 1 4.6737e+12 4.0813e+14 412703
## - zipcode 1 4.9988e+12 4.0845e+14 412717
## - sqft_living15 1 5.0742e+12 4.0853e+14 412720
## - waterfront 1 5.9429e+12 4.0940e+14 412757
## - view 1 1.4481e+13 4.1793e+14 413114
## - sqft_living 1 1.5791e+13 4.1924e+14 413168
## - yr_built 1 2.8472e+13 4.3193e+14 413682
## - grade 1 5.8031e+13 4.6148e+14 414826
## - lat 1 9.5927e+13 4.9938e+14 416190
##
## Call:
## lm(formula = price ~ bedrooms + bathrooms + sqft_living + sqft_lot +
## floors + waterfront + view + condition + grade + sqft_above +
## yr_built + yr_renovated + zipcode + lat + long + sqft_living15 +
## sqft_lot15, data = house_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -813087 -86700 -10908 67846 1013081
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.037e+06 2.484e+06 -0.417 0.6764
## bedrooms -1.674e+04 1.628e+03 -10.279 < 2e-16 ***
## bathrooms 2.844e+04 2.801e+03 10.153 < 2e-16 ***
## sqft_living 1.001e+02 3.853e+00 25.991 < 2e-16 ***
## sqft_lot 2.149e-01 4.397e-02 4.886 1.04e-06 ***
## floors 2.977e+04 3.079e+03 9.668 < 2e-16 ***
## waterfront 2.710e+05 1.700e+04 15.944 < 2e-16 ***
## view 4.609e+04 1.852e+03 24.889 < 2e-16 ***
## condition 2.836e+04 2.006e+03 14.140 < 2e-16 ***
## grade 9.261e+04 1.859e+03 49.824 < 2e-16 ***
## sqft_above 7.832e+00 3.773e+00 2.076 0.0379 *
## yr_built -2.169e+03 6.214e+01 -34.899 < 2e-16 ***
## yr_renovated 2.104e+01 3.154e+00 6.671 2.62e-11 ***
## zipcode -4.105e+02 2.807e+01 -14.623 < 2e-16 ***
## lat 5.850e+05 9.132e+03 64.059 < 2e-16 ***
## long -1.399e+05 1.116e+04 -12.532 < 2e-16 ***
## sqft_living15 4.428e+01 3.006e+00 14.733 < 2e-16 ***
## sqft_lot15 -2.794e-01 6.398e-02 -4.367 1.27e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 152900 on 17259 degrees of freedom
## Multiple R-squared: 0.7135, Adjusted R-squared: 0.7132
## F-statistic: 2528 on 17 and 17259 DF, p-value: < 2.2e-16
Metode Stepwise akan menyeleksi variabel-variabel yang memilki pengaruh signifikan terhadap prediktor. Lihat bagian Step: AIC=360919.5, semakin kecil nilai AIC, maka semakin disarankan variabel prediktor yang dipilih dan nilai AIC paling kecil berada dibagian paling bawah tampilan. Berdasarkan hasil stepwise backward, formula untuk Multiple Linear Regression yang disarankan:
Berdasarkan hasil stepwise backward, formula untuk Multiple Linear Regression yang disarankan:
Formula:
lm(price ~ bedrooms + bathrooms + sqft_living + sqft_lot + floors + waterfront + view + condition + grade + sqft_above + yr_built + yr_renovated + zipcode + lat + long + sqft_living15 + sqft_lot15, data=house_train)
lm_house_model <- lm(price ~ bedrooms + bathrooms + sqft_living + sqft_lot + floors + waterfront + view + condition + grade + sqft_above + yr_built + yr_renovated + zipcode + lat + long + sqft_living15 + sqft_lot15, data=house_train)
Cara evaluasi model di kasus regresi dapat menggunakan beberapa matriks penilaian, antara lain:
Akurasi: Model yang dibuat menggunakan multiple predictor sehingga nilai yang baik diinterpretasikan adalah nilai Adjusted R-squared. Dari hasi diatas, model ini memiliki nilai Adjusted R-squared : 0.7134 , hal ini menandakan bahwa model lm_house_all dapat memprediksi 71.3%. Angka yang belum cukup bagus, akan dicoba lagi menggunakan metode lain dikesempatan berikutnya.
Error: Dalam hal ini anda dapat melakukan pemeriksaan error dengan beberapa parameter berikut:
Berikut pengujian error model ini:
MAE <- MAE(y_pred = predict(lm_house_all,house_test),
y_true = house_test$price)
MAPE <- MAPE(y_pred = predict(lm_house_all,house_test),
y_true = house_test$price)
RMSE <- RMSE(y_pred = predict(lm_house_all,house_test),
y_true = house_test$price)
data.frame("MAE"=MAE,"MAPE"=MAPE, "RMSE"=RMSE)
Hasil pengujian error menggunakan 3 metode diatas menunjukan nilainya tidak begitu baik, dimana semakin kecil nilai error maka semakin baik model yang dibuat. Jika berdasarkan nilai MAE, maka model ini memiliki error kurang lebih sekitar USD 106.946.
linearity <- data.frame(residual = lm_house_model$residuals, fitted = house_train$price)
linearity %>%
ggplot(aes(fitted, residual)) +
geom_point() +
geom_smooth(method = lm) +
geom_hline(aes(yintercept = 0)) +
theme_minimal()+
theme(
plot.title = element_text(hjust = 0.5),
axis.title=element_text(size=9,face="bold"),
axis.text.y=element_text(margin = margin(l=5)),
axis.text.x.bottom = element_text(margin = margin(b=5)))+
mycolor_color()
Berdasarkan pengujian linearity terlihat bahwa model yang dibuat belum berhasil menangkap variansi data dengan baik, terlihat error atau jarak data dari mean cukup jauh.
##
## Shapiro-Wilk normality test
##
## data: lm_house_model$residuals[0:5000]
## W = 0.91379, p-value < 2.2e-16
##
## Anderson-Darling normality test
##
## data: lm_house_model$residuals
## A = 247, p-value < 2.2e-16
Hipotesis:
- H0: Residual berdistribusi normal
- H1: Residual tidak berdistribusi normal
Kesimpulan Karena nilai p-value: 0.00000000000000022 < 0.05 maka keputusannya adalah terima H1, dengan kesimpulan residual dari model tidak berdistribusi normal.
##
## studentized Breusch-Pagan test
##
## data: lm_house_model
## BP = 2201.1, df = 17, p-value < 2.2e-16
linearity <- data.frame(residual = lm_house_model$residuals, fitted = house_train$price)
linearity %>%
ggplot(aes(fitted, residual)) +
geom_point() +
geom_smooth(method = "h") +
geom_hline(aes(yintercept = 0)) +
theme_minimal()+
theme(
plot.title = element_text(hjust = 0.5),
axis.title=element_text(size=9,face="bold"),
axis.text.y=element_text(margin = margin(l=5)),
axis.text.x.bottom = element_text(margin = margin(b=5)))+
mycolor_color()
Hipotesis:
- H0: Data residual Homogen (tidak membentuk sebuah pola)
- H1: Data residual heteros (membentuk sebuah pola)
Kesimpulan
Karena nilai p-value: 0.00000000000000022 < 0.05 maka keputusannya adalah terima H1, dengan kesimpulan residual dari model bersifat heteros, dapat dilihat membentuk sebuah pola.
Tidak terdapat Multicollinearity dari variabel yang digunakan pada model.
## bedrooms bathrooms sqft_living sqft_lot floors
## 1.657668 3.224391 8.106072 2.156462 2.030586
## waterfront view condition grade sqft_above
## 1.155342 1.355967 1.252260 3.258268 6.588403
## yr_built yr_renovated zipcode lat long
## 2.449603 1.143842 1.668631 1.190396 1.840048
## sqft_living15 sqft_lot15
## 2.958889 2.177417
Berikut data hasil prediksi Price terhadap data test.
price
: Harga asli
predict.fit
: hasil prediksi fit value
predict.lower
: hasil prediksi prekiraan harga terendah
predict.upper
: hasil prediksi perkiraan harga tertinggi
predict_price <- predict(
lm_house_model,
house_test,
interval = "confidence",
level = 0.95
)
house_predict <- cbind(house_test,predict_price)
house_predict %>%
select(
price, predict.fit=fit, predict.lower=lwr, predict.upper=upr, bedrooms, bathrooms, sqft_living, sqft_lot, floors, waterfront, view, condition, grade, sqft_above, yr_built, yr_renovated, zipcode, lat, long, sqft_living15, sqft_lot15)
Model ini memiliki nilai Adjusted R-squared : 0.7134 , hal ini menandakan bahwa model lm_house_all dapat memprediksi 71.3%. Kemudian Hasil pengujian error menggunakan metode MAE menunjukan error kurang lebih sekitar USD 106.946. Pada pengujian asumsi, model ini hanya berhasil melewati pengujian Multicollinearity sedangkan pada gagal dalam pengujian Linearity, Normality dan Heteroscedasticity. Kesimpulannya, model ini masih kurang baik jika hendak digunakan untuk memprediksi harga rumah terkait dataset ini. Saya akan coba melakukan tunning atau menggunakan metode lainnya di kesempatan selanjutnya.