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