Analisis Regresi Linear Berganda dan Regresi LASSO pada Data Persentase Lemak Tubuh Pria
Library
library(corrplot)
library(car)
library(glmnet)
library(factoextra)Data
Dataset yang digunakan merupakan data kandungan persentase lemak tubuh dari 252 amatan, yaitu pria, beserta 14 pengukuran kondisi tubuh yang seluruhnya bertipe numerik.
dt.model <- read.csv("C:\\Users\\ASUS\\Downloads\\Soal UAS Smt 5\\dataModel.csv", sep = ";")
head(dt.model)## No Y X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
## 1 1 12.6 23 70.0 172.1 23.7 36.2 93.1 85.2 94.5 59.0 37.3 21.9 32.0 27.4
## 2 2 6.9 22 78.6 183.5 23.4 38.5 93.6 83.0 98.7 58.7 37.3 23.4 30.5 28.9
## 3 3 24.6 22 69.9 168.3 24.7 34.0 95.8 87.9 99.2 59.6 38.9 24.0 28.8 25.2
## 4 4 10.9 26 83.8 183.5 24.9 37.4 101.8 86.4 101.2 60.1 37.3 22.8 32.4 29.4
## 5 5 27.8 24 83.6 181.0 25.6 34.4 97.3 100.0 101.9 63.2 42.2 24.0 32.2 27.7
## 6 6 20.6 24 95.4 189.9 26.5 39.0 104.5 94.4 107.8 66.0 42.0 25.6 35.7 30.6
## X14
## 1 17.1
## 2 18.2
## 3 16.6
## 4 18.2
## 5 17.7
## 6 18.8
Menghapus Kolom No
Dilakukan penghapusan terhadap kolom yang tidak digunakan dalam analisis, yaitu kolom No.
dt.model1 <- dt.model[,-1]Periksa Korelasi
Dilakukan pemeriksaan terhadap korelasi antar peubah penjelas. Korelasi yang kuat antar peubah penjelas ini dapat mengindikasikan adanya multikolinearitas.
kor <- cor(dt.model1[,-1])
corrplot(kor, method = "number",
is.corr = T, type = "lower",
diag = F, number.cex = 0.8)Plot korelasi di atas memperlihatkan hubungan antar peubah penjelas pada data. Dapat dilihat bahwa terdapat korelasi yang kuat antara peubah X2 dengan seluruh peubah penjelas lainnya, kecuali X1 dan X3. Sebagian besar korelasi bernilai positif dan mendekati satu, yang mengindikasikan adanya multikolinearitas antar peubah penjelas.
Periksa Multikolinearitas
mod1 <- lm(Y~., data = dt.model1)
vif(mod1)## X1 X2 X3 X4 X5 X6 X7 X8
## 2.251927 33.722299 2.253757 16.151978 4.430814 10.685381 13.350737 15.143865
## X9 X10 X11 X12 X13 X14
## 7.962503 4.827959 1.945075 3.675477 2.193314 3.380745
Indikasi adanya multikolinearitas ditandai dengan nilai VIF > 10. Berdasarkan output di atas, terdapat lima peubah dengan nilai VIF yang besar (VIF > 10), yaitu X2, X4, X6, X7, dan X8.
Regresi Linier Berganda
summary(mod1)##
## Call:
## lm(formula = Y ~ ., data = dt.model1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10.262 -2.590 -0.106 2.906 9.281
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -15.08665 16.09640 -0.937 0.34957
## X1 0.05690 0.03004 1.894 0.05938 .
## X2 -0.17844 0.10989 -1.624 0.10573
## X3 -0.02090 0.04070 -0.513 0.60816
## X4 0.06094 0.27788 0.219 0.82660
## X5 -0.44552 0.21842 -2.040 0.04248 *
## X6 -0.03114 0.09780 -0.318 0.75048
## X7 0.87895 0.08547 10.283 < 2e-16 ***
## X8 -0.20381 0.13702 -1.487 0.13822
## X9 0.22750 0.13558 1.678 0.09466 .
## X10 -0.00151 0.22980 -0.007 0.99476
## X11 0.15667 0.20756 0.755 0.45110
## X12 0.14848 0.16006 0.928 0.35453
## X13 0.42908 0.18487 2.321 0.02114 *
## X14 -1.47923 0.49678 -2.978 0.00321 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.996 on 237 degrees of freedom
## Multiple R-squared: 0.749, Adjusted R-squared: 0.7342
## F-statistic: 50.52 on 14 and 237 DF, p-value: < 2.2e-16
Berdasarkan hasil uji signifikansi parameter di atas, tidak seluruh parameter signifikan pada taraf nyata 5%. Peubah yang memiliki p-value < α = 0.05 adalah X5, X7, X13, dan X14 sehingga keempat peubah tersebut signifikan terhadap model yang digunakan, yaitu model penuh dengan seluruh peubah penjelas. Sepuluh peubah penjelas lainnya tidak signifikan pada model penuh yang digunakan.
Regresi LASSO
Regresi LASSO merupakan metode regresi berganda yang
digunakan untuk menyusutkan koefisien taksiran mendekati angka nol, juga
menyeleksi peubah-peubah penjelas sehingga menghasilkan model dengan
peubah yang memiliki pengaruh terhadap peubah respon. Peubah penjelas
yang tidak memiliki pengaruh terhadap peubah respon (tidak signifikan
dalam model) dikeluarkan dari model. Regresi LASSO digunakan pada peubah
yang berdistribusi normal baku sehingga diatur
standardize = TRUE
set.seed(123)
lambdas <- 10^seq(2, -3, by = -.1)
lasso_reg <- cv.glmnet(as.matrix(dt.model1[,-1]), dt.model1[,1], alpha = 1,
lambda = lambdas, standardize = TRUE, nfolds = 5)
# Best lambda
lambda_best <- lasso_reg$lambda.min
lambda_best## [1] 0.03981072
Model regresi LASSO dibangun dengan alpha = 1. Dilakukan
setting nilai lambda yang akan dikeluarkan, yaitu 10^seq(2, -3,
by = -.1) yang berjumlah 51 lambda dari nilai 100 sampai dengan 0.001.
Lambda optimum bernilai 0.0398 yang didapatkan dari
lambda minimum lasso_reg
lasso_model <- glmnet(as.matrix(dt.model1[,-1]), dt.model1[,1], alpha = 1,
lambda = lambda_best, standardize = TRUE)
lasso_model##
## Call: glmnet(x = as.matrix(dt.model1[, -1]), y = dt.model1[, 1], alpha = 1, lambda = lambda_best, standardize = TRUE)
##
## Df %Dev Lambda
## 1 11 74.71 0.03981
Output di atas menghasilkan persentase deviasi dari lambda optimum, yaitu 74.71%.
coef(lasso_reg, s = "lambda.min")## 15 x 1 sparse Matrix of class "dgCMatrix"
## s1
## (Intercept) -12.80156732
## X1 0.05429336
## X2 -0.13208900
## X3 -0.03396280
## X4 .
## X5 -0.39346800
## X6 .
## X7 0.81893191
## X8 -0.13601518
## X9 0.15375537
## X10 .
## X11 0.06467199
## X12 0.10353417
## X13 0.37693849
## X14 -1.42397649
Output di atas merupakan nilai intersep dan koefisien regresi dari masing-masing peubah penjelas yang selanjutnya digunakan untuk membuat persamaan model regresi LASSO. Pada output tersebut, terlihat tidak ada koefisien untuk peubah X4, X6, dan X10 yang berarti peubah penjelas tersebut tidak memiliki pengaruh terhadap peubah respon sehingga dikeluarkan dari model.