Data Preparataion

Penjelasan terkait data

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

Input data

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)

Data cleaning

# Menghapus baris dengan nilai NA
rumah <- na.omit(rumah)

# Mengubah tipe data peubah CHAS menjadi factor
rumah$CHAS = as.factor(rumah$CHAS)

Pemodelan Regresi

Pembentukan model regresi awal

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

Pemeriksaan asumsi

Multikolinearitas

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

Seleksi peubah penjelas

Best Subset Selection

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.

Forward Selection

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.

Backward Elimination

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

Stepwise Selection

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

Regresi Ridge

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

Regresi Lasso

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

Perbandingan Metode Klasik, Ridge, dan Lasso

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.

Peubah yang berpengaruh

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.

Interpretasi Model Terbaik

\[ 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.