#Package

library(car)
## Loading required package: carData
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
lapply(c("glmnet","lmridge"),library,character.only=T)[[1]]
## Loading required package: Matrix
## Loaded glmnet 4.1-8
## 
## Attaching package: 'lmridge'
## The following object is masked from 'package:car':
## 
##     vif
##  [1] "glmnet"    "Matrix"    "lmtest"    "zoo"       "car"       "carData"  
##  [7] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"  
## [13] "base"
library(readxl)

#Input Data

data <- read_excel("C:/Users/yasmi/Documents/SEMESTER 5/PSD/data.xlsx", 
    sheet = "data fix")

Data yang digunakan merupakan data Faktor-Faktor Penyebab Kemiskinan di Papua pada tahun 2020 yang diambil dari 29 provinsi di Papua. Peubah Respon (Y) yang digunakan yaitu Persentase penduduk miskin di Papua tahun 2020 berdasarkan provinsi. Sementara peubah bebas yang digunakan yaitu sebanyak 10 peubah yang secara berturut-turut yaitu Luas Daerah (x1), Jumlah Penduduk (x2), Jumlah desa/kelurahan yang memiliki fasilitas sekolah (x3), Indeks pembangunan manusia (x4), Angka harapan hidup (x5), Rata rata pengeluaran perkapita (x6), Produk domestik regional bruto atas dasar harga (x7), Rata-rata upah/gaji bersih sebulan pekerja formal (x8), Laju pertumbuhan penduduk (x9), dan Kepadatan penduduk (x10).

x<-data.matrix(data[, -1])
y<-data$y

Regresi Linier Berganda

modelrlb<-lm(y~x1+x2+x3+x4+x5+x6+x7+x8+x9+x10, data=data)
modelrlb
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + 
##     x10, data = data)
## 
## Coefficients:
## (Intercept)           x1           x2           x3           x4           x5  
##   6.639e+01   -4.202e-04    1.160e-05    1.773e-02   -5.831e-01    2.449e-02  
##          x6           x7           x8           x9          x10  
##  -9.178e-07   -8.020e-05   -1.314e-06    4.918e-01   -1.263e-02
summary(modelrlb)
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + 
##     x10, data = data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -8.5679 -1.5844  0.0096  2.4644  8.5032 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  6.639e+01  2.688e+01   2.470  0.02376 * 
## x1          -4.202e-04  1.526e-04  -2.753  0.01309 * 
## x2           1.160e-05  2.602e-05   0.446  0.66088   
## x3           1.773e-02  3.982e-02   0.445  0.66146   
## x4          -5.831e-01  1.849e-01  -3.154  0.00549 **
## x5           2.449e-02  4.250e-01   0.058  0.95469   
## x6          -9.178e-07  3.625e-06  -0.253  0.80301   
## x7          -8.020e-05  1.466e-04  -0.547  0.59092   
## x8          -1.314e-06  1.672e-06  -0.786  0.44217   
## x9           4.918e-01  5.630e-01   0.874  0.39388   
## x10         -1.263e-02  1.947e-02  -0.649  0.52461   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.541 on 18 degrees of freedom
## Multiple R-squared:  0.7915, Adjusted R-squared:  0.6757 
## F-statistic: 6.834 on 10 and 18 DF,  p-value: 0.0002324

Diperoleh nilai R-Square sebesar 0.7915.

car::vif(modelrlb)
##       x1       x2       x3       x4       x5       x6       x7       x8 
## 2.284501 5.927847 4.949536 3.967938 2.312765 1.651870 3.190166 2.111733 
##       x9      x10 
## 2.004853 2.450555

Melalui pemeriksaan multikolinearitas, nilai VIF tiap peubah penjelas tidak ada yang nilainya >10, maka dapat dinyatakan tidak ada multikolinearitas.

Regresi Ridge

alpha_ridge = 0
model_Ridge <- glmnet::cv.glmnet(x,y,alpha=alpha_ridge)
## Warning: Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per
## fold
summary(model_Ridge)
##            Length Class  Mode     
## lambda     100    -none- numeric  
## cvm        100    -none- numeric  
## cvsd       100    -none- numeric  
## cvup       100    -none- numeric  
## cvlo       100    -none- numeric  
## nzero      100    -none- numeric  
## call         4    -none- call     
## name         1    -none- character
## glmnet.fit  12    elnet  list     
## lambda.min   1    -none- numeric  
## lambda.1se   1    -none- numeric  
## index        2    -none- numeric
# Hasil Regresi Ridge
print(model_Ridge)
## 
## Call:  glmnet::cv.glmnet(x = x, y = y, alpha = alpha_ridge) 
## 
## Measure: Mean-Squared Error 
## 
##     Lambda Index Measure    SE Nonzero
## min  12.03    70   59.11 20.34      10
## 1se 102.24    47   78.84 16.38      10
# Memilih nilai lambda terbaik
best_lambda <- model_Ridge$lambda.min
cat("Lambda terbaik:", best_lambda, "\n")
## Lambda terbaik: 12.03155
# Melakukan prediksi dengan model Ridge terbaik
predictions <- predict(model_Ridge, s = best_lambda, newx = x)

# koefisien Ridge
coef(model_Ridge, s = best_lambda)
## 11 x 1 sparse Matrix of class "dgCMatrix"
##                        s1
## (Intercept)  5.312719e+01
## x1          -1.614226e-04
## x2           1.745281e-06
## x3          -1.716374e-02
## x4          -2.022097e-01
## x5          -1.593297e-01
## x6          -6.876147e-08
## x7          -1.122639e-04
## x8          -1.943576e-08
## x9           3.891269e-01
## x10         -2.682708e-03
# R-squared untuk model Ridge
r_squared_ridge <- 1 - sum((y - predictions)^2) / sum((y - mean(y))^2)
r_squared_ridge
## [1] 0.6331937

Diperoleh nilai R-Square sebesar 0.6451721.

Regresi Lasso

alpha_Lasso = 1
model_Lasso <- glmnet::cv.glmnet(x,y,alpha=alpha_Lasso)
## Warning: Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per
## fold
model_Lasso
## 
## Call:  glmnet::cv.glmnet(x = x, y = y, alpha = alpha_Lasso) 
## 
## Measure: Mean-Squared Error 
## 
##     Lambda Index Measure    SE Nonzero
## min  1.666    17   38.00 9.168       4
## 1se  2.912    11   45.36 8.960       2
# Hasil regresi Lasso
print(model_Lasso)
## 
## Call:  glmnet::cv.glmnet(x = x, y = y, alpha = alpha_Lasso) 
## 
## Measure: Mean-Squared Error 
## 
##     Lambda Index Measure    SE Nonzero
## min  1.666    17   38.00 9.168       4
## 1se  2.912    11   45.36 8.960       2
# Memilih nilai lambda terbaik
best_lambdal <- model_Lasso$lambda.min
cat("Lambda terbaik:", best_lambdal, "\n")
## Lambda terbaik: 1.666233
# Melakukan prediksi dengan model Lasso terbaik
predictions_lasso <- predict(model_Lasso, s = best_lambdal, newx = x)

# Koefisien Lasso
coef(model_Lasso, s = best_lambdal)
## 11 x 1 sparse Matrix of class "dgCMatrix"
##                        s1
## (Intercept)  5.746161e+01
## x1          -2.183511e-04
## x2           .           
## x3           .           
## x4          -4.653061e-01
## x5           .           
## x6           .           
## x7          -2.238455e-05
## x8           .           
## x9           2.070266e-02
## x10          .
# R-squared untuk model Lasso
r_squared_lasso <- 1 - sum((y - predictions_lasso)^2) / sum((y - mean(y))^2)
r_squared_lasso
## [1] 0.6933823

Diperoleh nilai R-Square sebesar 0.6933823.

Berdasarkan perbandingan 3 metode diperoleh metode terbaik yaitu metode Regresi Linear Berganda dengan nilai R-Square terbesar yaitu 0.7915.