US Crime Rate in 1960

Margareth Devina

16 Januari 2021

Pengantar

RMarkdown ini diperuntukkan untuk analisa model linear regresi yang dapat diterapkan pada data laporan kriminalitas di beberapa negara bagian di US pada tahun 1960. Model linear regresi yang dihasilkan diharapkan dapat menunjukkan pengaruh variabel-variabel kondisi sosial-ekonomi kepada target variabel tingkat kriminalitas atau crime_rate sehingga dapat ditemukan cara-cara yang dapat menurunkan tingkat kriminalitas di US.

Dengan mempelajari variabel-variabel yang dipertimbangkan oleh negara lain seperti US, ada kemungkinan variabel-variabel tersebut dapat menjadi referensi untuk mengecek tingkat kriminalitas atau crime_rate negara kita sendiri.

Library yang digunakan

Library yang dipergunakan dalam analisa ini adalah sebagai berikut:

library(tidyverse)
library(GGally)
library(lmtest)
library(car)
library(MLmetrics)

Membaca dataset

Kita read / load data laporan kriminalitas di beberapa negara bagian di US pada tahun 1960 dan untuk meringkas data yang akan kita analisa, kita deselect kolom X karena kolom tersebut hanya berisi indeks sehingga tidak relevan untuk analisa model regresi linear yang akan dilakukan.

crime <- read.csv("data_input/crime.csv")
crime <- crime %>% 
  select(-X) %>% 
  setNames(c("percent_m", "is_south", "mean_education", "police_exp60", 
             "police_exp59", "labour_participation", "m_per1000f", "state_pop", 
             "nonwhites_per1000", "unemploy_m24", "unemploy_m39", "gdp", "inequality", 
             "prob_prison", "time_prison", "crime_rate"))

Exploratory Data Analysis

Kita cek dulu tipe data dari setiap variabel atau kolom di dataset:

str(crime)
## 'data.frame':    47 obs. of  16 variables:
##  $ percent_m           : int  151 143 142 136 141 121 127 131 157 140 ...
##  $ is_south            : int  1 0 1 0 0 0 1 1 1 0 ...
##  $ mean_education      : int  91 113 89 121 121 110 111 109 90 118 ...
##  $ police_exp60        : int  58 103 45 149 109 118 82 115 65 71 ...
##  $ police_exp59        : int  56 95 44 141 101 115 79 109 62 68 ...
##  $ labour_participation: int  510 583 533 577 591 547 519 542 553 632 ...
##  $ m_per1000f          : int  950 1012 969 994 985 964 982 969 955 1029 ...
##  $ state_pop           : int  33 13 18 157 18 25 4 50 39 7 ...
##  $ nonwhites_per1000   : int  301 102 219 80 30 44 139 179 286 15 ...
##  $ unemploy_m24        : int  108 96 94 102 91 84 97 79 81 100 ...
##  $ unemploy_m39        : int  41 36 33 39 20 29 38 35 28 24 ...
##  $ gdp                 : int  394 557 318 673 578 689 620 472 421 526 ...
##  $ inequality          : int  261 194 250 167 174 126 168 206 239 174 ...
##  $ prob_prison         : num  0.0846 0.0296 0.0834 0.0158 0.0414 ...
##  $ time_prison         : num  26.2 25.3 24.3 29.9 21.3 ...
##  $ crime_rate          : int  791 1635 578 1969 1234 682 963 1555 856 705 ...

Berikut adalah keterangan dari setiap kolom:

  • percent_m: persentase pria berumur 14 - 24 tahun
  • is_south: apakah termasuk di wilayah selatan atau southern state. 1 untuk Yes / iya, 0 untuk No / tidak
  • mean_education: rata-rata lama tahun bersekolah
  • police_exp60: pengeluaran dana kepolisian pada tahun 1960
  • police_exp59: pengeluaran dana kepolisian pada tahun 1959
  • labour_participation: tingkat partisipasi angkatan kerja
  • m_per1000f: jumlah pria per 1000 perempuan
  • state_pop: populasi negara bagian
  • nonwhites_per1000: jumlah penduduk non-kulit putih per 1000 orang
  • unemploy_m24: tingkat pengangguran pria perkotaan berusia 14-24
  • unemploy_m39: tingkat pengangguran pria perkotaan berusia 35-39
  • gdp: produk domestik bruto per kepala (gross domestic product per head)
  • inequality: ketimpangan pendapatan
  • prob_prison: kemungkinan hukuman penjara
  • time_prison: rata-rata waktu bertugas di penjara
  • crime_rate: tingkat kriminalitas / kejahatan dalam kategori yang tidak ditentukan menghasilkan sebuah model linear

Kita ubah tipe data di kolom is_south menjadi kategorikal atau factor.

crime <- crime %>% 
  mutate_at("is_south", function(x) ifelse(x==0, "No", "Yes")) %>%
  mutate (is_south = factor(is_south))

str(crime)

summary(crime)

Kita cek terlebih dahulu apakah setiap kolom dalam dataset kita ada yang bernilai NA.

colSums(is.na(crime))
##            percent_m             is_south       mean_education 
##                    0                    0                    0 
##         police_exp60         police_exp59 labour_participation 
##                    0                    0                    0 
##           m_per1000f            state_pop    nonwhites_per1000 
##                    0                    0                    0 
##         unemploy_m24         unemploy_m39                  gdp 
##                    0                    0                    0 
##           inequality          prob_prison          time_prison 
##                    0                    0                    0 
##           crime_rate 
##                    0

Menggunakan ggcorr, kita akan mengecek korelasi setiap variabel untuk melihat variabel prediktor mana saja yang memungkinkan untuk menentukan target variabel crime_rate.

ggcorr(crime, label=T, label_size = 2)

Berdasarkan chunk ggcorr di atas, dapat terlihat variabel nonwhites_per1000 dan crime_rate menunjukkan nilai korelasi 0 sehingga bisa dibilang variabel nonwhites_per1000 tidak cocok digunakan sebagai variabel prediktor.

Pembuatan model regresi linear

Sebelum membuat model, kita pecah dataset kita menjadi data_train dan data_test terlebih dahulu supaya kita dapat melatih model terlebih dahulu via data train baru dilanjutkan dengan evaluasi model via data test.

RNGkind(sample.kind = "Rounding")
set.seed(123)
row_data <- nrow(crime)
index <- sample(row_data, row_data*0.8)

data_train <- crime[ index, ]
data_test <- crime[ -index, ]

Dari pengecekkan korelasi antar variabel di chunk sebelumnya, kita buat model linear sederhana menggunakan salah satu variabel yang memiliki korelasi tinggi dengan variabel crime_rate, yaitu variabel police_exp60.

model_crime <- lm(crime_rate ~ police_exp60, data_train)

summary(model_crime)
## 
## Call:
## lm(formula = crime_rate ~ police_exp60, data = data_train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -587.13 -138.38   25.91  150.55  566.20 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   164.930    150.015   1.099    0.279    
## police_exp60    8.775      1.616   5.431 4.35e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 306.9 on 35 degrees of freedom
## Multiple R-squared:  0.4573, Adjusted R-squared:  0.4418 
## F-statistic:  29.5 on 1 and 35 DF,  p-value: 4.346e-06

Dari model yang sudah kita buat memiliki nilai R-Squared sebesar 0.4573, artinya model dapat menjelaskan 45.73% dari data, sedangkan sisanya sebanyak 54.27% dijelaskan oleh variabel atau faktor-faktor lain yang tidak kita masukkan ke dalam model.

R-Squared sendiri memiliki range antara 0-1 (0-100%) dan R-Squared yang baik adalah mendekati 1. Namun, mencari R-square tertinggi belum tentu menjamin memberikan model yang terbaik karena R-square hanya mempertimbangkan seberapa baik model mengikuti pola data yang dimiliki sekarang dan tidak mencerminkan kemampuan model dalam memprediksi data baru. Ukuran yang lebih tepat apabila ingin mencari trade-off antara kemampuan model mengikuti pola data dan kemampuan prediksinya adalah menggunakan Akaike Information Criterion (AIC), dan model yang baik memiliki AIC yang rendah.

Mari kita coba melakukan pemilihan variabel prediktor menggunakan metode stepwise dengan direction = both dan diawali dari model dengan variabel prediktor lengkap, untuk mendapatkan AIC serendah mungkin.

model_full <- lm(crime_rate ~., data_train)
model_step <- step(model_full, direction="both")
## Start:  AIC=414.49
## crime_rate ~ percent_m + is_south + mean_education + police_exp60 + 
##     police_exp59 + labour_participation + m_per1000f + state_pop + 
##     nonwhites_per1000 + unemploy_m24 + unemploy_m39 + gdp + inequality + 
##     prob_prison + time_prison
## 
##                        Df Sum of Sq     RSS    AIC
## - labour_participation  1       653 1143026 412.52
## - time_prison           1      1921 1144294 412.56
## - police_exp59          1      2875 1145248 412.59
## - state_pop             1      3010 1145383 412.59
## - is_south              1      8757 1151130 412.78
## - nonwhites_per1000     1     13116 1155489 412.92
## - gdp                   1     13142 1155515 412.92
## - police_exp60          1     28035 1170408 413.39
## - m_per1000f            1     45287 1187660 413.93
## <none>                              1142373 414.49
## - prob_prison           1     70404 1212777 414.71
## - percent_m             1     97608 1239981 415.53
## - unemploy_m24          1    103796 1246169 415.71
## - mean_education        1    200844 1343218 418.49
## - unemploy_m39          1    228152 1370525 419.23
## - inequality            1    244314 1386687 419.67
## 
## Step:  AIC=412.52
## crime_rate ~ percent_m + is_south + mean_education + police_exp60 + 
##     police_exp59 + m_per1000f + state_pop + nonwhites_per1000 + 
##     unemploy_m24 + unemploy_m39 + gdp + inequality + prob_prison + 
##     time_prison
## 
##                        Df Sum of Sq     RSS    AIC
## - police_exp59          1      2351 1145376 410.59
## - time_prison           1      2678 1145704 410.60
## - state_pop             1      4131 1147157 410.65
## - is_south              1      8388 1151414 410.79
## - gdp                   1     12638 1155664 410.92
## - nonwhites_per1000     1     13220 1156246 410.94
## - police_exp60          1     27439 1170465 411.39
## - m_per1000f            1     52705 1195731 412.18
## <none>                              1143026 412.52
## - prob_prison           1     71104 1214130 412.75
## - percent_m             1    103075 1246101 413.71
## - unemploy_m24          1    121084 1264110 414.24
## + labour_participation  1       653 1142373 414.49
## - mean_education        1    200303 1343329 416.49
## - unemploy_m39          1    227521 1370547 417.23
## - inequality            1    246070 1389096 417.73
## 
## Step:  AIC=410.59
## crime_rate ~ percent_m + is_south + mean_education + police_exp60 + 
##     m_per1000f + state_pop + nonwhites_per1000 + unemploy_m24 + 
##     unemploy_m39 + gdp + inequality + prob_prison + time_prison
## 
##                        Df Sum of Sq     RSS    AIC
## - state_pop             1      3598 1148975 408.71
## - time_prison           1      6058 1151435 408.79
## - is_south              1      8688 1154064 408.87
## - nonwhites_per1000     1     11027 1156404 408.95
## - gdp                   1     11041 1156418 408.95
## <none>                              1145376 410.59
## - prob_prison           1     68965 1214341 410.76
## - m_per1000f            1     88286 1233663 411.34
## - percent_m             1    102660 1248036 411.77
## - unemploy_m24          1    122681 1268058 412.36
## + police_exp59          1      2351 1143026 412.52
## + labour_participation  1       129 1145248 412.59
## - mean_education        1    203773 1349149 414.65
## - unemploy_m39          1    233268 1378645 415.45
## - inequality            1    245177 1390554 415.77
## - police_exp60          1    358986 1504363 418.68
## 
## Step:  AIC=408.71
## crime_rate ~ percent_m + is_south + mean_education + police_exp60 + 
##     m_per1000f + nonwhites_per1000 + unemploy_m24 + unemploy_m39 + 
##     gdp + inequality + prob_prison + time_prison
## 
##                        Df Sum of Sq     RSS    AIC
## - time_prison           1      3983 1152958 406.84
## - gdp                   1      9092 1158067 407.00
## - is_south              1      9896 1158871 407.03
## - nonwhites_per1000     1     12118 1161093 407.10
## <none>                              1148975 408.71
## - prob_prison           1     68307 1217282 408.84
## - percent_m             1    105640 1254614 409.96
## + state_pop             1      3598 1145376 410.59
## + police_exp59          1      1818 1147157 410.65
## + labour_participation  1       789 1148186 410.68
## - unemploy_m24          1    142101 1291075 411.02
## - m_per1000f            1    152198 1301173 411.31
## - mean_education        1    206104 1355079 412.81
## - unemploy_m39          1    246722 1395697 413.91
## - inequality            1    274184 1423159 414.63
## - police_exp60          1    402260 1551235 417.81
## 
## Step:  AIC=406.84
## crime_rate ~ percent_m + is_south + mean_education + police_exp60 + 
##     m_per1000f + nonwhites_per1000 + unemploy_m24 + unemploy_m39 + 
##     gdp + inequality + prob_prison
## 
##                        Df Sum of Sq     RSS    AIC
## - is_south              1     10049 1163007 405.16
## - gdp                   1     10978 1163937 405.19
## - nonwhites_per1000     1     17994 1170952 405.41
## <none>                              1152958 406.84
## - percent_m             1    111548 1264506 408.25
## + police_exp59          1      4347 1148611 408.70
## + time_prison           1      3983 1148975 408.71
## + state_pop             1      1523 1151435 408.79
## + labour_participation  1      1016 1151943 408.80
## - prob_prison           1    142080 1295039 409.14
## - unemploy_m24          1    144421 1297379 409.20
## - m_per1000f            1    148215 1301173 409.31
## - mean_education        1    202307 1355265 410.82
## - unemploy_m39          1    251866 1404825 412.15
## - inequality            1    271850 1424809 412.67
## - police_exp60          1    398984 1551942 415.83
## 
## Step:  AIC=405.16
## crime_rate ~ percent_m + mean_education + police_exp60 + m_per1000f + 
##     nonwhites_per1000 + unemploy_m24 + unemploy_m39 + gdp + inequality + 
##     prob_prison
## 
##                        Df Sum of Sq     RSS    AIC
## - gdp                   1     11334 1174342 403.52
## - nonwhites_per1000     1     13901 1176909 403.60
## <none>                              1163007 405.16
## - percent_m             1    103127 1266134 406.30
## + is_south              1     10049 1152958 406.84
## + police_exp59          1      4698 1158310 407.01
## + time_prison           1      4136 1158871 407.03
## + state_pop             1      2286 1160721 407.08
## + labour_participation  1       100 1162907 407.15
## - unemploy_m24          1    135954 1298961 407.25
## - m_per1000f            1    148204 1311211 407.60
## - prob_prison           1    213993 1377000 409.41
## - mean_education        1    231928 1394935 409.89
## - unemploy_m39          1    242747 1405754 410.17
## - inequality            1    262973 1425981 410.70
## - police_exp60          1    389276 1552284 413.84
## 
## Step:  AIC=403.52
## crime_rate ~ percent_m + mean_education + police_exp60 + m_per1000f + 
##     nonwhites_per1000 + unemploy_m24 + unemploy_m39 + inequality + 
##     prob_prison
## 
##                        Df Sum of Sq     RSS    AIC
## - nonwhites_per1000     1      9466 1183808 401.81
## <none>                              1174342 403.52
## - percent_m             1     95312 1269653 404.40
## + gdp                   1     11334 1163007 405.16
## + is_south              1     10405 1163937 405.19
## + time_prison           1      6091 1168250 405.32
## + police_exp59          1      3274 1171067 405.41
## + state_pop             1       540 1173802 405.50
## + labour_participation  1       455 1173887 405.50
## - unemploy_m24          1    143492 1317833 405.78
## - m_per1000f            1    177963 1352305 406.74
## - mean_education        1    227959 1402300 408.08
## - prob_prison           1    242508 1416850 408.46
## - unemploy_m39          1    249410 1423751 408.64
## - inequality            1    286285 1460626 409.59
## - police_exp60          1    616530 1790872 417.13
## 
## Step:  AIC=401.81
## crime_rate ~ percent_m + mean_education + police_exp60 + m_per1000f + 
##     unemploy_m24 + unemploy_m39 + inequality + prob_prison
## 
##                        Df Sum of Sq     RSS    AIC
## <none>                              1183808 401.81
## + time_prison           1     10289 1173518 403.49
## + nonwhites_per1000     1      9466 1174342 403.52
## + gdp                   1      6899 1176909 403.60
## + is_south              1      6684 1177123 403.60
## + labour_participation  1      1948 1181860 403.75
## + police_exp59          1      1540 1182267 403.76
## + state_pop             1       647 1183160 403.79
## - unemploy_m24          1    134893 1318700 403.81
## - percent_m             1    149388 1333195 404.21
## - m_per1000f            1    169039 1352847 404.75
## - mean_education        1    220608 1404416 406.14
## - prob_prison           1    237275 1421082 406.57
## - unemploy_m39          1    239975 1423783 406.64
## - inequality            1    461989 1645796 412.00
## - police_exp60          1   1025300 2209107 422.90
summary(model_full)
## 
## Call:
## lm(formula = crime_rate ~ ., data = data_train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -356.59 -131.61   -6.69  127.93  415.48 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)   
## (Intercept)          -7334.2000  2327.6113  -3.151  0.00482 **
## percent_m                7.1664     5.3500   1.340  0.19472   
## is_southYes            -79.9456   199.2543  -0.401  0.69231   
## mean_education          18.0178     9.3770   1.921  0.06835 . 
## police_exp60            12.4150    17.2940   0.718  0.48074   
## police_exp59            -4.3954    19.1200  -0.230  0.82041   
## labour_participation    -0.2101     1.9179  -0.110  0.91381   
## m_per1000f               3.3102     3.6280   0.912  0.37191   
## state_pop               -0.4162     1.7697  -0.235  0.81632   
## nonwhites_per1000        0.4357     0.8874   0.491  0.62850   
## unemploy_m24            -7.8713     5.6984  -1.381  0.18170   
## unemploy_m39            23.0303    11.2456   2.048  0.05328 . 
## gdp                      0.6426     1.3074   0.492  0.62816   
## inequality               6.4449     3.0411   2.119  0.04616 * 
## prob_prison          -3304.2217  2904.4492  -1.138  0.26808   
## time_prison              1.8181     9.6743   0.188  0.85273   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 233.2 on 21 degrees of freedom
## Multiple R-squared:  0.812,  Adjusted R-squared:  0.6777 
## F-statistic: 6.046 on 15 and 21 DF,  p-value: 0.0001131
summary(model_step)
## 
## Call:
## lm(formula = crime_rate ~ percent_m + mean_education + police_exp60 + 
##     m_per1000f + unemploy_m24 + unemploy_m39 + inequality + prob_prison, 
##     data = data_train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -394.74 -125.65   27.95  128.24  465.39 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -7289.928   1383.644  -5.269 1.33e-05 ***
## percent_m          7.636      4.062   1.880   0.0706 .  
## mean_education    16.603      7.269   2.284   0.0301 *  
## police_exp60       9.219      1.872   4.925 3.41e-05 ***
## m_per1000f         3.712      1.857   2.000   0.0553 .  
## unemploy_m24      -7.495      4.196  -1.786   0.0849 .  
## unemploy_m39      22.563      9.471   2.382   0.0242 *  
## inequality         5.625      1.702   3.306   0.0026 ** 
## prob_prison    -3837.725   1619.981  -2.369   0.0250 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 205.6 on 28 degrees of freedom
## Multiple R-squared:  0.8052, Adjusted R-squared:  0.7495 
## F-statistic: 14.46 on 8 and 28 DF,  p-value: 4.236e-08

Ketika kita menggunakan lebih dari satu prediktor, R-Square akan selalu bertambah seiring dengan bertambahnya variabel prediktor baru meskipun belum tentu memiliki pengaruh terhadap model. Untuk mengatasi hal ini, dibuat metrik baru bernama Adjusted R-Square yang menghitung nilai R-Square tetapi juga mempertimbangkan jumlah variabel yang digunakan sehingga nilai R-Square yang ditampilkan lebih tepat.

Dari model dengan variabel prediktor lengkap kita memperoleh nilai Adjusted R-square sebesar 0.6777. Sementara, dari model regresi linear yang dihasilkan melalui seleksi variabel prediktor secara stepwise, didapat Adjusted R-Square sebesar 0.7495.

Lebih lanjut, model regresi linear hasil seleksi secara stepwise (model_step) menunjukkan R-squared yang lebih tinggi jika dibandingkan dengan model_crime.

Oleh karena itu, kita akan analisa lebih jauh model_step:

crime_rate = -7289.92 + 7.63 percent_m + 16.60 mean_education + 9.21 police_exp60 + 3.71 m_per1000f -
7.49 unemploy_m24 + 22.56 unemploy_m39 + 5.62 inequality - 3837.72 prob_prison

Prediksi dan evaluasi model

Prediksi dan evaluasi yang dilakukan pada bagian ini ditujukkan untuk mengecek apakah performa model di data train ataupun data test menunjukkan salah satu kondisi berikut:

  • Overfitting: Model terlalu bagus dalam mengikuti pola di data train, menyebabkan model kurang mampu memprediksi data baru
  • Underfitting: Model kurang bisa menangkap pola di data train
  • Optimum: Model mampu mengikui pola data train tetapi masih memiliki kemampuan yang baik dalam memprediksi data baru

Mari kita prediksi performa model di data train:

pred_train <- predict(model_step, data_train)

data.frame(MAE = MAE(pred_train, data_train$crime_rate),
           MAPE = MAPE(pred_train, data_train$crime_rate),
           RMSE = RMSE(pred_train, data_train$crime_rate)
           )
##       MAE      MAPE     RMSE
## 1 146.433 0.1835156 178.8709

Kemudian kita prediksi performa model di data test:

pred_test <- predict(model_step, data_test)

data.frame(MAE = MAE(pred_test, data_test$crime_rate),
           MAPE = MAPE(pred_test, data_test$crime_rate),
           RMSE = RMSE(pred_test, data_test$crime_rate)
           )
##        MAE      MAPE     RMSE
## 1 164.2806 0.2299896 189.1708

Dari kedua performa model di atas, terlihat bahwa pada data train dan data test performanya mirip atau tidak berbeda jauh. Maka kita dapat simpulkan bahwa model tidak mengalami overfit maupun underfit.

Asumsi model regresi linear

Normalitas

Residual atau error dari data perlu berdistribusi normal. Ketika kita membuat sebuah model regresi linear, persamaan yang akan kita dapat adalah sebagai berikut:

\[ y = \alpha + \beta\times x + \epsilon \\ \epsilon \sim Normal(0, \sigma) \]

Tanda e (\(\epsilon\)) atau epsilon di belakang menunjukkan adanya error atau residual yang tidak ditangkap model. Model berasumsi bahwa error ini memiliki distribusi normal yang berpusat di angka 0. Untuk memeriksa distribusi dari nilai residual apakah berdistribusi normal (membentuk kurva lonceng) atau tidak, kita bisa menggunakan histogram.

hist(model_step$residuals)

Alternatif lainnya adalah melakukan uji statistik menggunakan uji Shapiro-Wilk, dengan hipotesis berikut: \[ H_0 = Data\ berdistribusi\ normal\\ H_1 = Data\ tidak\ berdistribusi\ normal\\ \]

Penentuan:

  • p-value > 0.05: Tidak menolak \(H_0\) atau residual berdistribusi normal
  • p-value < 0.05: Menolak \(H_0\) atau residual tidak berdistribusi normal
shapiro.test(model_step$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  model_step$residuals
## W = 0.98774, p-value = 0.9498

Berdasarkan histogram terlihat sekilas bahwa residual model_step berdistribusi normal. Lebih lanjut, uji Shapiro-Wilk menunjukkan p-value > 0.05 sehingga \(H_0\) diterima yang berarti residual atau error terdistribusi secara normal.

Constant Variance of Error (Homocesdasticity) menggunakan uji statistik Breusch-Pagan

Homocesdasticity menunjukkan bahwa residual atau error bersifat konstan atau tidak membentuk pola tertentu. Jika error membentuk pola tertentu seperti garis linear atau mengerucut, maka kita sebut dengan Heterocesdasticity dan akan berpengaruh pada nilai standard error pada estimate/koefisien prediktor yang bias (terlalu sempit atau terlalu lebar).

Kita gunakan uji statistik Breusch-Pagan untuk melihat apakah error bersifat konstan atau tidak dengan hipotesis berikut: \[ H_0 = error\ bersifat\ konstan\ (Homocesdasticity)\\ H_1 = error\ bersifat\ tidak\ konstan\ (Heteroscesdasticity) \]

Penentuan:

  • p-value > 0.05: Tidak menolak \(H_0\) atau error bersifat konstan (Homocesdasticity)
  • p-value < 0.05: Menolak \(H_0\) atau error bersifat tidak konstan (Heteroscesdasticity)
bptest(model_step)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_step
## BP = 11.85, df = 8, p-value = 0.158

Uji statistik Breusch-Pagan menunjukkan p-value > 0.05 sehingga \(H_0\) diterima dan dapat diartikan residual tidak membentuk pola tertentu sehingga kita bisa menyimpulkan bahwa model sudah memiliki error yang bersifat konstan.

Multikolinearitas (Variance Inflation Factor)

Multikolinearitas terjadi ketika antar variabel prediktor yang digunakan pada model memiliki hubungan yang kuat. Ada atau tidak multikolinearitas dapat dilihat dari nilai VIF (Variance Inflation Factor). VIF merupakan ukuran yang menjelaskan seberapa besar variansi koefisien yang meningkat karena multikolinearitas. Ketika nilai VIF lebih dari 10 artinya terjadi multikolinearitas.

vif(model_step)
##      percent_m mean_education   police_exp60     m_per1000f   unemploy_m24 
##       2.298626       5.609506       2.990798       2.276976       4.760707 
##   unemploy_m39     inequality    prob_prison 
##       5.522660       4.416847       1.392422

Dari uji multikolinearitas di atas, tidak terdapat nilai VIF sama dengan atau lebih dari 10 sehingga tidak ditemukan multikolinearitas antar variabel (antar variabel prediktor saling independen).

Kesimpulan

Berdasarkan hasil prediksi, evaluasi model, dan uji asumsi yang telah dilakukan sebelumnya, model_step:

crime_rate = -7289.92 + 7.63 percent_m + 16.60 mean_education + 9.21 police_exp60 + 3.71 m_per1000f -
7.49 unemploy_m24 + 22.56 unemploy_m39 + 5.62 inequality - 3837.72 prob_prison

memiliki kriteria yang baik sebagai model regresi linear. Kemudian, selain interpretasi model_step yang telah diuraikan pada pengujian-pengujian yang dilakukan, berikut beberapa interpretasi lainnya:

  • Ketika semua variabel prediktor bernilai 0, maka crime_rate adalah sebesar -7289.92
  • Setiap kenaikan percent_m sebanyak 1 persen akan diikuti kenaikan nilai crime_rate sebesar 7.63
  • Setiap kenaikan mean_education sebanyak 1 tahun akan diikuti kenaikan nilai crime_rate sebesar 16.60
  • Setiap kenaikan police_exp60 sebanyak 1 dollar akan diikuti kenaikan nilai crime_rate sebesar 9.21
  • Setiap kenaikan m_per1000f sebanyak 1 orang akan diikuti kenaikan nilai crime_rate sebesar 3.71
  • Setiap kenaikan unemploy_m24 sebanyak 1 persen akan diikuti penurunan nilai crime_rate sebesar 7.49
  • Setiap kenaikan unemploy_m39 sebanyak 1 persen akan diikuti kenaikan nilai crime_rate sebesar 22.56
  • Setiap kenaikan inequality sebanyak 1 dollar akan diikuti kenaikan nilai crime_rate sebesar 5.62
  • Setiap kenaikan prob_prison sebanyak 1 persen akan diikuti penurunan nilai crime_rate sebesar 3837.72

Melalui interpretasi - interpretasi yang telah diuraikan di atas, untuk menurunkan tingkat kriminalitas atau crime_rate, pemerintah US dapat melakukan:

Penurunan budget spending kepolisian dan kemungkinan penggunaan variabel prediktor lainnya di luar dari data yang sudah ada, yang terkait dengan kepolisian dan dirasa lebih tepat untuk digunakan.

Berdasarkan model yang dihasilkan dari model step, terlihat kenaikan 1 dollar police_exp60 akan diikuti dengan kenaikan nilai crime_rate. Oleh karena bisa dibilang sebaiknya budget pengeluaran kepolisian tidak mengalami kenaikan atau mungkin dapat diturunkan untuk mengurangi tingkat kriminalitas.

Lebih lanjut, berdasarkan studi yang dilakukan oleh para peneliti terutama Wilson (1968, https://www.ncjrs.gov/pdffiles1/Digitization/58531NCJRS.pdf halaman 10 paragraf 3), untuk dapat menurunkan crime_rate secara lebih tepat, variabel yang perlu dipertimbangkan bukanlah jumlah polisi yang direcruit, jumlah pengeluaran yang dilakukan, ataupun jumlah polisi yang berpatroli melainkan perilaku dari polisi yang berpatroli. Perilaku pertama yang dapat ditunjukkan oleh polisi dapat berupa “agresif” atau aktif melakukan observasi dan pengecekkan. Perilaku kedua yang dapat ditunjukkan adalah “pasif” atau non-aktif seperti: 1) Polisi tidak memberhentikan dan memberikan sanksi kepada pengendara kendaraan yang melanggar peraturan lalu lintas, 2) Polisi tidak mengecek orang atau kendaraan yang mencurigakan, 3) Kepolisian jarang mengecek atau berpura-pura menjadi “decoy” di daerah yang tingkat kriminalitasnya tinggi.

Salah satu penelitian yang mendukung pendapat Wilson adalah penelitian yang dilakukan oleh Boydstun (1975, https://www.ncjrs.gov/pdffiles1/Digitization/58531NCJRS.pdf halaman 10 paragraf 4 - halaman 11 paragraf 1). Penelitian Boydstun menunjukkan bahwa area di kota San Diego yang kepolisiannya menerapkan interogasi lapangan ataupun pemberhentian pengendara (“street stops”), mengalami penurunan beberapa tipe tindakan kriminalitas secara signifkan. Tipe kriminalitas yang dimaksud adalah perampokan, pencurian, pemerkosaan atau tindakan asusila lainnya, dan penipuan berbahaya. Sementara, area di kota San Diego yang kepolisiannya tidak menerapkan interogasi lapangan ataupun street stops, tidak mengalami perubahan tingkat kriminalitas.