Regresi Linear Berganda
Prediksi Harga Rumah
*Kontak | : \(\downarrow\)* |
naufal3433@gmail.com | |
https://www.instagram.com/m_naufalardiansyah/ | |
RPubs | https://rpubs.com/muhamad_naufal/ |
Latar Belakang
Tujuan utama analisis ini adalah untuk memprediksi harga pada penjualan rumah di King Country, Washington, AS. Pada analisis ini menggunakan metode Regresi Linear Berganda. Dataset yang digunakan berupa data historis penjualan rumah yang terjual antara bulan Mei 2014 hingga Mei 2015. Analisis ini menggunakan data lama karena hanya untuk dijadikan pembelajaran. Untuk penerapan lebih lanjut bisa menggunakan data terbaru.
Persiapan Data
Hal pertama yang pasti dilakukan adalah mempersiapkan data yang akan dianalisis. Hal ini penting dilakukan karena tanpa adanya data proses analisis tidak dapat dilakukan. Namun sebelum memasukkan data ke dalam R ada beberapa hal yang perlu diperhatikan diantaranya :
Install Packages
Sebelum memanggil data yang akan dianalisis, hal yang harus dilakukan adalah meng install packages yang diperlukan. packages ini digunakan untuk memudahkan kita dalam bekerja. Berikut adalah beberapa packages yang akan di install dalam analisis ini:
source ("g_regression.R")
library (tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.1 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library (dplyr)
library (GGally)
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
library (lubridate)
library (paletti)
library (gridExtra)
##
## Attaching package: 'gridExtra'
##
## The following object is masked from 'package:dplyr':
##
## combine
library (grid)
library (MLmetrics)
##
## Attaching package: 'MLmetrics'
##
## The following object is masked from 'package:base':
##
## Recall
library (car)
## Loading required package: carData
##
## Attaching package: 'car'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following object is masked from 'package:purrr':
##
## some
library (lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library (scales)
##
## Attaching package: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
library (nortest)
= c(
mycolor dark_blue = "#003f5c",
light_blue = "#2f4b7c",
light_purple = "#665191",
dark_pink = "#a05195",
light_pink = "#d45087",
light_red = "#f95d6a",
dark_orange = "#ff6437",
light_orange = "#ff7c43",
semi_orange = "#e79658",
orange = "#dda15a",
cream = "#b59378",
dark_cream = "#A57F5F",
choc = "#85664B",
dark_choc = "#6b5340"
)
= c(
mycolorfill 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"
)
<- get_scale_fill(get_pal(mycolorfill))
mycolor_fill <- get_scale_color(get_pal(mycolor))
mycolor_color <- get_hex(mycolor) mycolor_hex
Import Data
Data yang digunakan dalam projek adalah KC_Housesales_Data, silahkan untuk download dan membaca sekilas mengenai latar belakang data tersebut sebelum memulai melakukan analisa.
<- read.csv("kc_house_data.csv")
house dim(house)
## [1] 21597 21
names(house)
## [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.
Melihat Struktur Dataframe
#str(house)
::paged_table(house) rmarkdown
Eliminasi Variabel
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.
<- house %>%
house select(-id,-date)
names(house)
## [1] "price" "bedrooms" "bathrooms" "sqft_living"
## [5] "sqft_lot" "floors" "waterfront" "view"
## [9] "condition" "grade" "sqft_above" "sqft_basement"
## [13] "yr_built" "yr_renovated" "zipcode" "lat"
## [17] "long" "sqft_living15" "sqft_lot15"
Deskripsi Variabel
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. |
Periksa Data Hilang
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:
colSums(is.na(house))
## 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
Pada data yang akan dianalisis tidak terdapat missing value. Maka dari itu analisis dapat dilanjutkan ke tahap berikutnya.
Ringkasan Data
summary(house)
## 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
Exploratory Data Analysis (EDA)
Karena fokus pada projek ini adalah melakukan prediksi dengan Regresi Linear berganda, perlu dilakukan analisa korelasi untuk setiap variabel yang ada.
Matriks Korelasi
ggcorr(house,label = T, size=3, label_size = 3, hjust=0.95)+
labs(
title="Matriks Korelasi"
+
)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.
Pencilan Harga Rumah
ggplot(data = house, aes(x = price)) +
geom_histogram(aes(y = ..density..), color = "black", fill = "white") +
geom_density(alpha = 0.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))
)
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
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:
library(scales) # Untuk menggunakan fungsi dollar()
<- house %>%
house_clean filter(price < 2000000)
ggplot(house_clean, aes(x = price)) +
geom_histogram(aes(y = ..density..), colour = "black", fill = "white", binwidth = 50000) +
geom_density(alpha = 0.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))
)
Pemisahan Data
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.
set.seed(999)
<- round(nrow(house_clean) * 0.8) # Menentukan ukuran sampel training
size_train <- sample(x = nrow(house_clean), size = size_train) # Memilih indeks untuk sampel training
idx_house
<- house_clean[idx_house, ] # Membuat dataset training
house_train <- house_clean[-idx_house, ] # Membuat dataset test house_test
Pemodelan Regresi Liniear
Modelling menggunakan metode regresi Linear ini dilakukan untuk memprediksi harga dari suatu rumah (Prices).
Prediktor Tunggal
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
<- lm(price ~ sqft_living, data = house_train)
lm_house_single_living summary(lm_house_single_living)
##
## Call:
## lm(formula = price ~ sqft_living, data = house_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -939480 -137804 -22111 100180 1329080
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 56013.494 4148.643 13.5 <2e-16 ***
## sqft_living 225.062 1.863 120.8 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 209500 on 17109 degrees of freedom
## Multiple R-squared: 0.4603, Adjusted R-squared: 0.4603
## F-statistic: 1.459e+04 on 1 and 17109 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.4603 yang berarti hanya berhasil menangkap variansi dari target sebesar 46%.
Linear Regression with single predictor: grade
<- lm(price~grade,house_train)
lm_house_single_grade summary(lm_house_single_grade)
##
## Call:
## lm(formula = price ~ grade, data = house_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -545919 -136608 -29516 94967 1408350
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -795425 10892 -73.03 <2e-16 ***
## grade 172134 1412 121.93 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 208600 on 17109 degrees of freedom
## Multiple R-squared: 0.4649, Adjusted R-squared: 0.4649
## F-statistic: 1.487e+04 on 1 and 17109 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.4649 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.
Prediktor Ganda
# Multiple Linear Regression
<- lm(price~., data=house_train)
lm_house_all summary(lm_house_all)
##
## Call:
## lm(formula = price ~ ., data = house_train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -809735 -86570 -10785 67656 1013703
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.207e+06 2.495e+06 -0.484 0.6286
## bedrooms -1.654e+04 1.637e+03 -10.106 < 2e-16 ***
## bathrooms 2.872e+04 2.819e+03 10.187 < 2e-16 ***
## sqft_living 9.940e+01 3.873e+00 25.661 < 2e-16 ***
## sqft_lot 2.171e-01 4.459e-02 4.869 1.13e-06 ***
## floors 2.977e+04 3.092e+03 9.626 < 2e-16 ***
## waterfront 2.687e+05 1.718e+04 15.636 < 2e-16 ***
## view 4.639e+04 1.860e+03 24.935 < 2e-16 ***
## condition 2.847e+04 2.017e+03 14.114 < 2e-16 ***
## grade 9.226e+04 1.871e+03 49.310 < 2e-16 ***
## sqft_above 7.808e+00 3.790e+00 2.060 0.0394 *
## sqft_basement NA NA NA NA
## yr_built -2.165e+03 6.253e+01 -34.616 < 2e-16 ***
## yr_renovated 2.051e+01 3.174e+00 6.462 1.06e-10 ***
## zipcode -4.090e+02 2.821e+01 -14.501 < 2e-16 ***
## lat 5.848e+05 9.176e+03 63.735 < 2e-16 ***
## long -1.401e+05 1.122e+04 -12.489 < 2e-16 ***
## sqft_living15 4.483e+01 3.024e+00 14.822 < 2e-16 ***
## sqft_lot15 -2.772e-01 6.490e-02 -4.270 1.96e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 152900 on 17093 degrees of freedom
## Multiple R-squared: 0.7126, Adjusted R-squared: 0.7124
## F-statistic: 2494 on 17 and 17093 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.
Evaluasi Model
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(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
Akurasi Vs Error
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:
- Mean Absolute Error (MAE): Paling mudah untuk di interpretasikan karena dibandingkan dengan satuan data aktual.
- Mean Absolute Percentage Error (MAPE): Punya interval berapa persentasi kesalahan model yang telah dibangun (0 sd 100%). Namun MAPE terdapat batasan, apabila pada data aktual memiliki nilai 0, MAPE akan inf.
- Root Mean Square Error (RMSE): Baik digunakan untuk data2 yang nilai fluktuatif.
Berikut pengujian error model ini:
<- MAE(y_pred = predict(lm_house_all,house_test),
MAE y_true = house_test$price)
## Warning in predict.lm(lm_house_all, house_test): prediction from a
## rank-deficient fit may be misleading
<- MAPE(y_pred = predict(lm_house_all,house_test),
MAPE y_true = house_test$price)
## Warning in predict.lm(lm_house_all, house_test): prediction from a
## rank-deficient fit may be misleading
<- RMSE(y_pred = predict(lm_house_all,house_test),
RMSE y_true = house_test$price)
## Warning in predict.lm(lm_house_all, house_test): prediction from a
## rank-deficient fit may be misleading
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.792.
Pemeriksaan Asumsi
Linearitas
<- data.frame(residual = lm_house_model$residuals, fitted = house_train$price)
linearity %>%
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(1-5)),
axis.text.x.bottom = element_text(margin = margin(b=5)))+
mycolor_color()
## `geom_smooth()` using formula = 'y ~ x'
Berdasarkan pengujian linearity terlihat bahwa model yang dibuat belum berhasil menangkap variansi data dengan baik, terlihat error atau jarak data dari mean cukup jauh.
Normalitas Residual
hist(lm_house_model$residuals)
# Shapiro Test
shapiro.test(lm_house_model$residuals[0:5000])
##
## Shapiro-Wilk normality test
##
## data: lm_house_model$residuals[0:5000]
## W = 0.91329, 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.
Heteroskedastisitas
::bptest(lm_house_model) lmtest
##
## studentized Breusch-Pagan test
##
## data: lm_house_model
## BP = 2191.9, df = 17, p-value < 2.2e-16
<- data.frame(residual = lm_house_model$residuals, fitted = house_train$price)
linearity %>%
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(t = 5)),
axis.text.x.bottom = element_text(margin = margin(b = 5))
+
)mycolor_color()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Computation failed in `stat_smooth()`
## Caused by error in `get()`:
## ! object 'h' of mode 'function' was not found
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.
Multikolinieritas
Tidak terdapat Multicollinearity dari variabel yang digunakan pada model.
::vif(lm_house_model) car
## bedrooms bathrooms sqft_living sqft_lot floors
## 1.654401 3.225579 8.110126 2.181094 2.032628
## waterfront view condition grade sqft_above
## 1.155626 1.356082 1.252973 3.267276 6.593719
## yr_built yr_renovated zipcode lat long
## 2.453294 1.141885 1.667383 1.190842 1.841302
## sqft_living15 sqft_lot15
## 2.961144 2.200914
Prediksi Data Testing
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(
predict_price
lm_house_model,
house_test,interval = "confidence",
level = 0.95
)
<- cbind(house_test,predict_price)
house_predict
%>%
house_predict select(
price, fit, lwr, 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 )
Kesimpulan
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.