Peubah respon:
MEDV: Nilai rata-rata rumah yang ditempati pemilik
(dalam ribuan dollar)
Peubah penjelas:
CRIM : Tingkat kriminalitas per kapita
ZN: Proporsi lahan perumahan yang memiliki luas lebih
dari 25000 (kaki persegi)
INDUS: Proporsi binis non retail per kota (dalam
acre)
CHAS: Wilayah bersinggungan dengan Sungai Charles (1
jika ya, dan 0 jika tidak)
NOX: Konsentrasi oksida nitrat
RM: Jumlah rata-rata kamar per hunian
AGE: proporsi unit yang ditempati pemilik yang dibangun
sebelum tahun 1940
DIS: Jarak ke lima pusat ketenagakerjaan di Boston
RAD: Indeks aksesibilitas ke jalan tol
TAX: Tarif pajak properti nilai penuh per $10.000
PTRATIO : Rasio antara murid dan guru
B : Proporsi orang berkulit hitam
LSTAT : Persentase populasi yang dengan kelas yang
rendah
rumah = rio::import("https://raw.githubusercontent.com/mrnabilnaufal07/psd/main/HousingData.csv")
str(rumah)
## 'data.frame': 506 obs. of 14 variables:
## $ CRIM : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...
## $ ZN : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
## $ INDUS : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
## $ CHAS : int 0 0 0 0 0 0 NA 0 0 NA ...
## $ NOX : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
## $ RM : num 6.58 6.42 7.18 7 7.15 ...
## $ AGE : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
## $ DIS : num 4.09 4.97 4.97 6.06 6.06 ...
## $ RAD : int 1 2 2 3 3 3 5 5 5 5 ...
## $ TAX : int 296 242 242 222 222 222 311 311 311 311 ...
## $ PTRATIO: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
## $ B : num 397 397 393 395 397 ...
## $ LSTAT : num 4.98 9.14 4.03 2.94 NA ...
## $ MEDV : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
View(rumah)
# Menghapus baris dengan nilai NA
rumah <- na.omit(rumah)
# Mengubah tipe data peubah CHAS menjadi factor
rumah$CHAS = as.factor(rumah$CHAS)
model.rumah = lm(MEDV~., data = rumah)
summary(model.rumah)
##
## Call:
## lm(formula = MEDV ~ ., data = rumah)
##
## Residuals:
## Min 1Q Median 3Q Max
## -15.4234 -2.5830 -0.5079 1.6681 26.2604
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 32.680059 5.681290 5.752 1.81e-08 ***
## CRIM -0.097594 0.032457 -3.007 0.002815 **
## ZN 0.048905 0.014398 3.397 0.000754 ***
## INDUS 0.030379 0.065933 0.461 0.645237
## CHAS1 2.769378 0.925171 2.993 0.002940 **
## NOX -17.969028 4.242856 -4.235 2.87e-05 ***
## RM 4.283252 0.470710 9.100 < 2e-16 ***
## AGE -0.012991 0.014459 -0.898 0.369504
## DIS -1.458510 0.211007 -6.912 2.03e-11 ***
## RAD 0.285866 0.069298 4.125 4.55e-05 ***
## TAX -0.013146 0.003955 -3.324 0.000975 ***
## PTRATIO -0.914582 0.140581 -6.506 2.44e-10 ***
## B 0.009656 0.002970 3.251 0.001251 **
## LSTAT -0.423661 0.055022 -7.700 1.19e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.487 on 380 degrees of freedom
## Multiple R-squared: 0.7671, Adjusted R-squared: 0.7591
## F-statistic: 96.29 on 13 and 380 DF, p-value: < 2.2e-16
car::vif(model.rumah)
## CRIM ZN INDUS CHAS NOX RM AGE DIS
## 1.741404 2.321843 4.049690 1.069182 4.495772 2.107004 3.173844 3.827427
## RAD TAX PTRATIO B LSTAT
## 6.986683 8.651382 1.810597 1.372310 3.156334
Beberapa sumber mengatakan bahwa nilai VIF> 5 memiliki potensi untuk terjadi multikolinearitas. Sehingga akan dilakukan pemodelan regresi dengan ridge dan lasso sebagai pembanding dari model regresi klasik yang telah dibentuk
olsrr::ols_step_best_subset(model.rumah)
## Best Subsets Regression
## ------------------------------------------------------------------------
## Model Index Predictors
## ------------------------------------------------------------------------
## 1 LSTAT
## 2 RM LSTAT
## 3 RM PTRATIO LSTAT
## 4 RM PTRATIO B LSTAT
## 5 NOX RM DIS PTRATIO LSTAT
## 6 CHAS NOX RM DIS PTRATIO LSTAT
## 7 CHAS NOX RM DIS PTRATIO B LSTAT
## 8 ZN CHAS NOX RM DIS PTRATIO B LSTAT
## 9 CRIM ZN CHAS NOX RM DIS PTRATIO B LSTAT
## 10 ZN CHAS NOX RM DIS RAD TAX PTRATIO B LSTAT
## 11 CRIM ZN CHAS NOX RM DIS RAD TAX PTRATIO B LSTAT
## 12 CRIM ZN CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT
## 13 CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT
## ------------------------------------------------------------------------
##
## Subsets Regression Summary
## -----------------------------------------------------------------------------------------------------------------------------------------
## Adj. Pred
## Model R-Square R-Square R-Square C(p) AIC SBIC SBC MSEP FPE HSP APC
## -----------------------------------------------------------------------------------------------------------------------------------------
## 1 0.5527 0.5516 0.5466 339.8339 2549.9570 1429.5694 2561.8861 14769.3113 37.6758 0.0959 0.4518
## 2 0.6585 0.6568 0.648 169.1957 2445.6163 1325.5638 2461.5217 11304.6238 28.9102 0.0736 0.3467
## 3 0.7037 0.7014 0.6932 97.5344 2391.7494 1272.0759 2411.6311 9835.3701 25.2160 0.0642 0.3024
## 4 0.7157 0.7128 0.7037 79.9140 2377.4286 1257.7526 2401.2868 9460.6011 24.3159 0.0619 0.2916
## 5 0.7312 0.7277 0.7174 56.5967 2357.3178 1237.9534 2385.1522 8967.4165 23.1059 0.0588 0.2771
## 6 0.7405 0.7365 0.7231 43.4523 2345.4729 1226.3659 2377.2837 8680.2091 22.4217 0.0571 0.2689
## 7 0.7472 0.7426 0.7283 34.5591 2337.2046 1218.3572 2372.9918 8478.8775 21.9561 0.0559 0.2633
## 8 0.7524 0.7473 0.7324 28.0112 2330.9555 1212.3847 2370.7190 8324.8247 21.6106 0.0550 0.2592
## 9 0.7550 0.7493 0.7325 25.7763 2328.8037 1210.3908 2372.5436 8259.0706 21.4930 0.0547 0.2578
## 10 0.7609 0.7546 0.7389 18.1535 2321.2040 1203.2971 2368.9202 8081.3720 21.0825 0.0537 0.2528
## 11 0.7665 0.7598 0.7432 11.0032 2313.8534 1196.5462 2365.5460 7912.5521 20.6929 0.0527 0.2482
## 12 0.7670 0.7596 0.7417 12.2123 2315.0347 1197.8513 2370.7036 7916.9066 20.7551 0.0529 0.2489
## 13 0.7671 0.7591 0.7408 14.0000 2316.8146 1199.7199 2376.4599 7933.3634 20.8492 0.0531 0.2500
## -----------------------------------------------------------------------------------------------------------------------------------------
## AIC: Akaike Information Criteria
## SBIC: Sawa's Bayesian Information Criteria
## SBC: Schwarz Bayesian Criteria
## MSEP: Estimated error of prediction, assuming multivariate normality
## FPE: Final Prediction Error
## HSP: Hocking's Sp
## APC: Amemiya Prediction Criteria
Pada pemilihan peubah dengan teknik best subset terlihat
nilai AIC paling rendah serta Adj. R-Squared paling tinggi dimiliki oleh
model ke-11. Pada model ini, peubah INDUS dan
AGE tidak dimasukkan ke dalam model.
olsrr::ols_step_forward_p(model.rumah)
##
## Selection Summary
## ---------------------------------------------------------------------------
## Variable Adj.
## Step Entered R-Square R-Square C(p) AIC RMSE
## ---------------------------------------------------------------------------
## 1 LSTAT 0.5527 0.5516 339.8339 2549.9570 6.1225
## 2 RM 0.6585 0.6568 169.1957 2445.6163 5.3565
## 3 PTRATIO 0.7037 0.7014 97.5344 2391.7494 4.9963
## 4 B 0.7157 0.7128 79.9140 2377.4286 4.9001
## 5 CHAS 0.7241 0.7206 68.1661 2367.5761 4.8332
## 6 DIS 0.7297 0.7255 60.9947 2361.4661 4.7899
## 7 NOX 0.7472 0.7426 34.5591 2337.2046 4.6389
## 8 ZN 0.7524 0.7473 28.0112 2330.9555 4.5965
## 9 CRIM 0.7550 0.7493 25.7763 2328.8037 4.5783
## 10 RAD 0.7587 0.7524 21.7362 2324.8055 4.5495
## 11 TAX 0.7665 0.7598 11.0032 2313.8534 4.4812
## ---------------------------------------------------------------------------
Hasil metode Stepwise Forward juga menunjukkan hal yang sama. Langkah
paling optimal berada pada langkah ke-11, yang mana belum memasukkan
peubah INDUS dan juga AGE ke dalam model.
olsrr::ols_step_backward_p(model.rumah)
##
##
## Elimination Summary
## --------------------------------------------------------------------------
## Variable Adj.
## Step Removed R-Square R-Square C(p) AIC RMSE
## --------------------------------------------------------------------------
## 1 INDUS 0.767 0.7596 12.2123 2315.0347 4.4824
## 2 AGE 0.7665 0.7598 11.0032 2313.8534 4.4812
## --------------------------------------------------------------------------
Pada metode Stepwise Backward, peubah INDUS dan juga
AGE dikeluarkan dari model. Menunjukkan bahwa metode Best
Subset, Stepwise Forward, dan Stepwise Backward menghasilkan kesimpulan
yang sama yaitu: Model terbaik diperoleh dengan tidak memasukkan peubah
INDUS dan AGE
olsrr::ols_step_both_p(model.rumah)
##
## Stepwise Selection Summary
## ---------------------------------------------------------------------------------------
## Added/ Adj.
## Step Variable Removed R-Square R-Square C(p) AIC RMSE
## ---------------------------------------------------------------------------------------
## 1 LSTAT addition 0.553 0.552 339.8340 2549.9570 6.1225
## 2 RM addition 0.659 0.657 169.1960 2445.6163 5.3565
## 3 PTRATIO addition 0.704 0.701 97.5340 2391.7494 4.9963
## 4 B addition 0.716 0.713 79.9140 2377.4286 4.9001
## 5 CHAS addition 0.724 0.721 68.1660 2367.5761 4.8332
## 6 DIS addition 0.730 0.726 60.9950 2361.4661 4.7899
## 7 NOX addition 0.747 0.743 34.5590 2337.2046 4.6389
## 8 ZN addition 0.752 0.747 28.0110 2330.9555 4.5965
## 9 CRIM addition 0.755 0.749 25.7760 2328.8037 4.5783
## 10 RAD addition 0.759 0.752 21.7360 2324.8055 4.5495
## 11 TAX addition 0.767 0.760 11.0030 2313.8534 4.4812
## ---------------------------------------------------------------------------------------
library(lmridge)
model.ridge.rumah<-lmridge(MEDV~., data=rumah)
summary(model.ridge.rumah)
##
## Call:
## lmridge.default(formula = MEDV ~ ., data = rumah)
##
##
## Coefficients: for Ridge parameter K= 0
## Estimate Estimate (Sc) StdErr (Sc) t-value (Sc) Pr(>|t|)
## Intercept 32.6801 12904.5510 5709.3279 2.2603 0.0244 *
## CRIM -0.0976 -17.8041 5.9135 -3.0108 0.0028 **
## ZN 0.0489 23.2235 6.8282 3.4011 0.0007 ***
## INDUS 0.0304 4.1605 9.0179 0.4614 0.6448
## CHAS1 2.7694 13.8883 4.6336 2.9973 0.0029 **
## NOX -17.9690 -40.2932 9.5015 -4.2407 <2e-16 ***
## RM 4.2832 59.2674 6.5047 9.1115 <2e-16 ***
## AGE -0.0130 -7.1822 7.9833 -0.8997 0.3689
## DIS -1.4585 -60.6777 8.7669 -6.9212 <2e-16 ***
## RAD 0.2859 48.9263 11.8448 4.1306 <2e-16 ***
## TAX -0.0132 -43.8652 13.1806 -3.3280 0.0010 ***
## PTRATIO -0.9146 -39.2798 6.0298 -6.5143 <2e-16 ***
## B 0.0097 17.0904 5.2495 3.2556 0.0012 **
## LSTAT -0.4237 -61.3817 7.9613 -7.7100 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Ridge Summary
## R2 adj-R2 DF ridge F AIC BIC
## 0.76710 0.75980 12.99999 96.53849 1194.69104 3601.06582
## Ridge minimum MSE= 898.8938 at K= 0
## P-value for F-test ( 12.99999 , 381 ) = 8.54227e-112
## -------------------------------------------------------------------
library(lares)
library(MASS)
library(elasticnet)
## Loading required package: lars
## Loaded lars 1.3
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
##
## select
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
model.lasso.rumah = lasso_vars(rumah, MEDV)
## >>> Searching for optimal lambda with CV...
## Warning in doTryCatch(return(expr), name, parentenv, handler): Reached maximum
## number of iterations 69!
## Found best lambda: 0.01331
## >>> Fetching most relevant variables...
## >>> Generating plots for MEDV...
## Warning in .font_global(font, quiet = FALSE): Font 'Arial Narrow' is not
## installed, has other name, or can't be found
## Elapsed time: 3.18s
model.lasso.rumah
## $coef
## # A tibble: 13 × 6
## names coefficients standardized_coefficients abs prc coef
## <chr> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 LSTAT -0.424 -3.10 3.10 0.147 negative
## 2 RM 4.30 3.00 3.00 0.142 positive
## 3 DIS -1.42 -2.98 2.98 0.141 negative
## 4 RAD 0.260 2.24 2.24 0.106 positive
## 5 TAX -0.0118 -1.98 1.98 0.0937 negative
## 6 PTRATIO -0.903 -1.96 1.96 0.0925 negative
## 7 NOX -17.1 -1.94 1.94 0.0917 negative
## 8 ZN 0.0467 1.12 1.12 0.0529 positive
## 9 CRIM -0.0936 -0.861 0.861 0.0407 negative
## 10 B 0.00951 0.849 0.849 0.0401 positive
## 11 CHAS_1 2.79 0.705 0.705 0.0333 positive
## 12 AGE -0.0121 -0.338 0.338 0.0160 negative
## 13 INDUS 0.0113 0.0779 0.0779 0.00369 positive
##
## $metrics
## # A tibble: 1 × 7
## rmse mae mape mse rsq rsqa bestlambda
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4.41 3.05 7.32 19.4 0.767 0.766 0.0133
##
## $model
## Model Details:
## ==============
##
## H2ORegressionModel: glm
## Model ID: GLM_model_R_1696504129979_8
## GLM Model: summary
## family link regularization number_of_predictors_total
## 1 gaussian identity Lasso (lambda = 0.01331 ) 13
## number_of_active_predictors number_of_iterations training_frame
## 1 13 1 temp_sid_8356_3
##
## Coefficients: glm coefficients
## names coefficients standardized_coefficients
## 1 Intercept 9.332268 0.000000
## 2 CRIM -0.093586 -0.861217
## 3 ZN 0.046689 1.118389
## 4 INDUS 0.011263 0.077811
## 5 NOX -17.131962 -1.937839
## 6 RM 4.295052 2.997881
## 7 AGE -0.012137 -0.338479
## 8 DIS -1.419989 -2.979949
## 9 RAD 0.259590 2.241156
## 10 TAX -0.011773 -1.981498
## 11 PTRATIO -0.903146 -1.956628
## 12 B 0.009506 0.848706
## 13 LSTAT -0.423986 -3.098672
## 14 CHAS_1 2.785423 0.704631
##
## H2ORegressionMetrics: glm
## ** Reported on training data. **
##
## MSE: 19.43043
## RMSE: 4.407996
## MAE: 3.052514
## RMSLE: NaN
## Mean Residual Deviance : 19.43043
## R^2 : 0.7669706
## Null Deviance :32852.47
## Null D.o.F. :393
## Residual Deviance :7655.59
## Residual D.o.F. :380
## AIC :2317.059
##
##
##
##
##
## $plot
# Menghitung nilai adjusted R-squared
n <- length(rumah$MEDV)
p <- ncol(rumah)
r_squared <- 0.7669706
adjusted_r_squared <- 1 - ((1 - r_squared) * (n - 1) / (n - p - 1))
adjusted_r_squared
## [1] 0.7583627
library(knitr)
# Membuat data untuk tabel
metode <- c("Klasik","Seleksi Peubah", "Ridge", "Lasso")
AIC <- c(AIC(model.rumah), 2313.8534, 1200.93975, 2323.129)
Adj.R2 <- c(0.7591 , 0.760 ,0.75980, 0.7583627)
# Membuat data frame
data_tabel <- data.frame(Metode = metode, AIC = AIC, `Adj R^2` = Adj.R2)
# Mencetak tabel menggunakan knitr
kable(data_tabel, format = "markdown")
| Metode | AIC | Adj.R.2 |
|---|---|---|
| Klasik | 2316.815 | 0.7591000 |
| Seleksi Peubah | 2313.853 | 0.7600000 |
| Ridge | 1200.940 | 0.7598000 |
| Lasso | 2323.129 | 0.7583627 |
Jika dilihat dari nilai R-Square, model regresi hasil seleksi peubah adalah yang terbaik. Namun, jika nilai AIC yang dijadikan acuan maka model Ridge adalah yang terbaik. Selisih nilai AIC model Ridge dengan kedua model lainnya, sangat besar sedangkan perbedaan nilai R-square diantara keempat model tidak jauh berbeda. Oleh karena itu, model Ridge dipilih sebagai model yang paling baik untuk data yang digunakan.
Baik model Klasik, Seleksi peubah, Ridge, maupun Lasso memiliki hasil
yang sama. Keempatnya menunjukkan bahwa dari 13 peubah penjelas yang
digunakan, 2 diantaranya (INDUS dan AGE) tidak
berpengaruh signifikan terhadap peubah respon. Meskipun demikian, peubah
tersebut tetap dipertahankan pada model Ridge maupun Lasso.
\[ MEDV = 32.4838 - 0.0945 CRIM + 0.0491 ZN + 0.0423 INDUS + 2.8016 CHAS_1 -18.3492 NOX + 4.3125 RM - 0.0131 AGE -1.4628 DIS + 0.2863 RAD - 0.0134 TAX -0.9284 PTRATIO + 0.0098 B - 0.4246 LSTAT \] Peubah penjelas yang signifikan:
- Kenaikan tingkat kriminalitas akan menurunkan nilai median rumah di wiayah Kota Boston.
- Semakin besar proporsi perumahan yang memiliki lahan lebih dari 25000 (kaki persegi) maka nilai median rumah di wialayah Kota Boston juga akan makin besar.
- Wilayah yang dilewati Sungai Charles memiliki nilai median rumah yang lebih tinggi dibandingkan yang tidak.
- Makin tinggi konsentrasi Nitrit Oksida di suatu wilayah maka makin rendah pula nilai median rumah di wilayah tersebut.
- Makin banyak rata-rata jumlah kamar akan meningkatkan nilai median rumah di wilayah tersebut.
- Makin dekat jarak perumahan ke 5 pusat pekerjaan di Kota Boston, maka nilai median rumah di wilayah tersebut akan semakin tinggi.
- Semakin mudah akses dari rumah ke jalan tol, maka semakin tinggi juga nilai median rumah di wilayah tersebut.
- Makin tinggi pajak properti di suatu wilayah Kota Boston, maka makin rendah pula nilai median rumah di wilayah tersebut.
- Jika jumlah murid lebih banyak dari guru, maka nilai median rumah di wilayah tersebut semakin rendah.
- Semakin besar proporsi orang kulit hitam yang tinggal di sautu wilayah Kota Boston maka nilai median rumah di wilayah tersebut akan meningkat.
- Makin sedikit proporsi masyarakat dari kalangan bawah, maka makin besar pula nilai median rumah di wilayah tersebut.
Peubah penjelas yang tidak signifikan:
- Makin besar proporsi binis non-retail di wilayah Kota Boston, akan relatif meningkatkan nilai median rumah di wilayah tersebut.
- Semakin besar roporsi rumah yang dibangun sebelum tahun 1940 akan membuat nilai median rumah di wilayah tersebut relatif lebih rendah.