DATA

data <- read.csv("D:/STATISTIKA/SEM 5/Modern Prediksi dan Machine Learning/Jurnal Tugas Pekan 2-3/bdims.csv")

dim(data)
## [1] 507  25
str(data)
## 'data.frame':    507 obs. of  25 variables:
##  $ bia_di: num  42.9 43.7 40.1 44.3 42.5 43.3 43.5 44.4 43.5 42 ...
##  $ bii_di: num  26 28.5 28.2 29.9 29.9 27 30 29.8 26.5 28 ...
##  $ bit_di: num  31.5 33.5 33.3 34 34 31.5 34 33.2 32.1 34 ...
##  $ che_de: num  17.7 16.9 20.9 18.4 21.5 19.6 21.9 21.8 15.5 22.5 ...
##  $ che_di: num  28 30.8 31.7 28.2 29.4 31.3 31.7 28.8 27.5 28 ...
##  $ elb_di: num  13.1 14 13.9 13.9 15.2 14 16.1 15.1 14.1 15.6 ...
##  $ wri_di: num  10.4 11.8 10.9 11.2 11.6 11.5 12.5 11.9 11.2 12 ...
##  $ kne_di: num  18.8 20.6 19.7 20.9 20.7 18.8 20.8 21 18.9 21.1 ...
##  $ ank_di: num  14.1 15.1 14.1 15 14.9 13.9 15.6 14.6 13.2 15 ...
##  $ sho_gi: num  106 110 115 104 108 ...
##  $ che_gi: num  89.5 97 97.5 97 97.5 ...
##  $ wai_gi: num  71.5 79 83.2 77.8 80 82.5 82 76.8 68.5 77.5 ...
##  $ nav_gi: num  74.5 86.5 82.9 78.8 82.5 80.1 84 80.5 69 81.5 ...
##  $ hip_gi: num  93.5 94.8 95 94 98.5 95.3 101 98 89.5 99.8 ...
##  $ thi_gi: num  51.5 51.5 57.3 53 55.4 57.5 60.9 56 50 59.8 ...
##  $ bic_gi: num  32.5 34.4 33.4 31 32 33 42.4 34.1 33 36.5 ...
##  $ for_gi: num  26 28 28.8 26.2 28.4 28 32.3 28 26 29.2 ...
##  $ kne_gi: num  34.5 36.5 37 37 37.7 36.6 40.1 39.2 35.5 38.3 ...
##  $ cal_gi: num  36.5 37.5 37.3 34.8 38.6 36.1 40.3 36.7 35 38.6 ...
##  $ ank_gi: num  23.5 24.5 21.9 23 24.4 23.5 23.6 22.5 22 22.2 ...
##  $ wri_gi: num  16.5 17 16.9 16.6 18 16.9 18.8 18 16.5 16.9 ...
##  $ age   : int  21 23 28 23 22 21 26 27 23 21 ...
##  $ wgt   : num  65.6 71.8 80.7 72.6 78.8 74.8 86.4 78.4 62 81.6 ...
##  $ hgt   : num  174 175 194 186 187 ...
##  $ sex   : int  1 1 1 1 1 1 1 1 1 1 ...
names(data)
##  [1] "bia_di" "bii_di" "bit_di" "che_de" "che_di" "elb_di" "wri_di" "kne_di"
##  [9] "ank_di" "sho_gi" "che_gi" "wai_gi" "nav_gi" "hip_gi" "thi_gi" "bic_gi"
## [17] "for_gi" "kne_gi" "cal_gi" "ank_gi" "wri_gi" "age"    "wgt"    "hgt"   
## [25] "sex"
head(data)
##   bia_di bii_di bit_di che_de che_di elb_di wri_di kne_di ank_di sho_gi che_gi
## 1   42.9   26.0   31.5   17.7   28.0   13.1   10.4   18.8   14.1  106.2   89.5
## 2   43.7   28.5   33.5   16.9   30.8   14.0   11.8   20.6   15.1  110.5   97.0
## 3   40.1   28.2   33.3   20.9   31.7   13.9   10.9   19.7   14.1  115.1   97.5
## 4   44.3   29.9   34.0   18.4   28.2   13.9   11.2   20.9   15.0  104.5   97.0
## 5   42.5   29.9   34.0   21.5   29.4   15.2   11.6   20.7   14.9  107.5   97.5
## 6   43.3   27.0   31.5   19.6   31.3   14.0   11.5   18.8   13.9  119.8   99.9
##   wai_gi nav_gi hip_gi thi_gi bic_gi for_gi kne_gi cal_gi ank_gi wri_gi age
## 1   71.5   74.5   93.5   51.5   32.5   26.0   34.5   36.5   23.5   16.5  21
## 2   79.0   86.5   94.8   51.5   34.4   28.0   36.5   37.5   24.5   17.0  23
## 3   83.2   82.9   95.0   57.3   33.4   28.8   37.0   37.3   21.9   16.9  28
## 4   77.8   78.8   94.0   53.0   31.0   26.2   37.0   34.8   23.0   16.6  23
## 5   80.0   82.5   98.5   55.4   32.0   28.4   37.7   38.6   24.4   18.0  22
## 6   82.5   80.1   95.3   57.5   33.0   28.0   36.6   36.1   23.5   16.9  21
##    wgt   hgt sex
## 1 65.6 174.0   1
## 2 71.8 175.3   1
## 3 80.7 193.5   1
## 4 72.6 186.5   1
## 5 78.8 187.2   1
## 6 74.8 181.5   1

MENENTUKAN VARIABEL

Y <- data$wgt
X1  <- data$bia_di
X2  <- data$bii_di
X3  <- data$bit_di
X4  <- data$che_de
X5  <- data$che_di
X6  <- data$elb_di
X7  <- data$wri_di
X8  <- data$kne_di
X9  <- data$ank_di
X10 <- data$sho_gi
X11 <- data$che_gi
X12 <- data$wai_gi
X13 <- data$nav_gi
X14 <- data$hip_gi
X15 <- data$thi_gi
X16 <- data$bic_gi
X17 <- data$for_gi
X18 <- data$kne_gi
X19 <- data$cal_gi
X20 <- data$ank_gi
X21 <- data$wri_gi
X22 <- data$age
X23 <- data$hgt

MEMBENTUK DATA REGRESI

data_reg <- data.frame(Y, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19,X20, X21, X22, X23)

head(data_reg)
##      Y   X1   X2   X3   X4   X5   X6   X7   X8   X9   X10  X11  X12  X13  X14
## 1 65.6 42.9 26.0 31.5 17.7 28.0 13.1 10.4 18.8 14.1 106.2 89.5 71.5 74.5 93.5
## 2 71.8 43.7 28.5 33.5 16.9 30.8 14.0 11.8 20.6 15.1 110.5 97.0 79.0 86.5 94.8
## 3 80.7 40.1 28.2 33.3 20.9 31.7 13.9 10.9 19.7 14.1 115.1 97.5 83.2 82.9 95.0
## 4 72.6 44.3 29.9 34.0 18.4 28.2 13.9 11.2 20.9 15.0 104.5 97.0 77.8 78.8 94.0
## 5 78.8 42.5 29.9 34.0 21.5 29.4 15.2 11.6 20.7 14.9 107.5 97.5 80.0 82.5 98.5
## 6 74.8 43.3 27.0 31.5 19.6 31.3 14.0 11.5 18.8 13.9 119.8 99.9 82.5 80.1 95.3
##    X15  X16  X17  X18  X19  X20  X21 X22   X23
## 1 51.5 32.5 26.0 34.5 36.5 23.5 16.5  21 174.0
## 2 51.5 34.4 28.0 36.5 37.5 24.5 17.0  23 175.3
## 3 57.3 33.4 28.8 37.0 37.3 21.9 16.9  28 193.5
## 4 53.0 31.0 26.2 37.0 34.8 23.0 16.6  23 186.5
## 5 55.4 32.0 28.4 37.7 38.6 24.4 18.0  22 187.2
## 6 57.5 33.0 28.0 36.6 36.1 23.5 16.9  21 181.5
dim(data_reg)
## [1] 507  24

PREPROCESSING DATA

colSums(is.na(data_reg))
##   Y  X1  X2  X3  X4  X5  X6  X7  X8  X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 
##   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 
## X20 X21 X22 X23 
##   0   0   0   0
sum(duplicated(data_reg))
## [1] 0
summary(data_reg)
##        Y                X1              X2              X3       
##  Min.   : 42.00   Min.   :32.40   Min.   :18.70   Min.   :24.70  
##  1st Qu.: 58.40   1st Qu.:36.20   1st Qu.:26.50   1st Qu.:30.60  
##  Median : 68.20   Median :38.70   Median :28.00   Median :32.00  
##  Mean   : 69.15   Mean   :38.81   Mean   :27.83   Mean   :31.98  
##  3rd Qu.: 78.85   3rd Qu.:41.15   3rd Qu.:29.25   3rd Qu.:33.35  
##  Max.   :116.40   Max.   :47.40   Max.   :34.70   Max.   :38.00  
##        X4              X5              X6              X7       
##  Min.   :14.30   Min.   :22.20   Min.   : 9.90   Min.   : 8.10  
##  1st Qu.:17.30   1st Qu.:25.65   1st Qu.:12.40   1st Qu.: 9.80  
##  Median :19.00   Median :27.80   Median :13.30   Median :10.50  
##  Mean   :19.23   Mean   :27.97   Mean   :13.39   Mean   :10.54  
##  3rd Qu.:20.90   3rd Qu.:29.95   3rd Qu.:14.40   3rd Qu.:11.20  
##  Max.   :27.50   Max.   :35.60   Max.   :16.70   Max.   :13.30  
##        X8              X9             X10              X11        
##  Min.   :15.70   Min.   : 9.90   Min.   : 85.90   Min.   : 72.60  
##  1st Qu.:17.90   1st Qu.:13.00   1st Qu.: 99.45   1st Qu.: 85.30  
##  Median :18.70   Median :13.80   Median :108.20   Median : 91.60  
##  Mean   :18.81   Mean   :13.86   Mean   :108.20   Mean   : 93.33  
##  3rd Qu.:19.60   3rd Qu.:14.80   3rd Qu.:116.55   3rd Qu.:101.15  
##  Max.   :24.30   Max.   :17.20   Max.   :134.80   Max.   :118.70  
##       X12              X13              X14              X15       
##  Min.   : 57.90   Min.   : 64.00   Min.   : 78.80   Min.   :46.30  
##  1st Qu.: 68.00   1st Qu.: 78.85   1st Qu.: 92.00   1st Qu.:53.70  
##  Median : 75.80   Median : 84.60   Median : 96.00   Median :56.30  
##  Mean   : 76.98   Mean   : 85.65   Mean   : 96.68   Mean   :56.86  
##  3rd Qu.: 84.50   3rd Qu.: 91.60   3rd Qu.:101.00   3rd Qu.:59.50  
##  Max.   :113.20   Max.   :121.10   Max.   :128.30   Max.   :75.70  
##       X16             X17             X18             X19       
##  Min.   :22.40   Min.   :19.60   Min.   :29.00   Min.   :28.40  
##  1st Qu.:27.60   1st Qu.:23.60   1st Qu.:34.40   1st Qu.:34.10  
##  Median :31.00   Median :25.80   Median :36.00   Median :36.00  
##  Mean   :31.17   Mean   :25.94   Mean   :36.20   Mean   :36.08  
##  3rd Qu.:34.45   3rd Qu.:28.40   3rd Qu.:37.95   3rd Qu.:38.00  
##  Max.   :42.40   Max.   :32.50   Max.   :49.00   Max.   :47.70  
##       X20             X21            X22             X23       
##  Min.   :16.40   Min.   :13.0   Min.   :18.00   Min.   :147.2  
##  1st Qu.:21.00   1st Qu.:15.0   1st Qu.:23.00   1st Qu.:163.8  
##  Median :22.00   Median :16.1   Median :27.00   Median :170.3  
##  Mean   :22.16   Mean   :16.1   Mean   :30.18   Mean   :171.1  
##  3rd Qu.:23.30   3rd Qu.:17.1   3rd Qu.:36.00   3rd Qu.:177.8  
##  Max.   :29.30   Max.   :19.6   Max.   :67.00   Max.   :198.1
sapply(data_reg, sd)
##         Y        X1        X2        X3        X4        X5        X6        X7 
## 13.345762  3.059132  2.206308  2.030916  2.515877  2.741650  1.352906  0.944361 
##        X8        X9       X10       X11       X12       X13       X14       X15 
##  1.347595  1.247351 10.374834 10.027621 11.012688  9.424128  6.680623  4.459889 
##       X16       X17       X18       X19       X20       X21       X22       X23 
##  4.246941  2.830579  2.617570  2.847661  1.862337  1.380931  9.608472  9.407205
sapply(data_reg, function(x) var(x) == 0)
##     Y    X1    X2    X3    X4    X5    X6    X7    X8    X9   X10   X11   X12 
## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
##   X13   X14   X15   X16   X17   X18   X19   X20   X21   X22   X23 
## FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

MEMBAGI DATA TRAINING DAN TESTING

set.seed(7)
n <- nrow(data_reg)
index_train <- sample(1:n, size = 0.8 * n)
train_data <- data_reg[index_train, ]
test_data <- data_reg[-index_train, ]

nrow(train_data)
## [1] 405
nrow(test_data)
## [1] 102

MENYIAPKAN DATA TRAINING DAN TESTING

x_train <- as.matrix(train_data[, paste0("X", 1:23)])
y_train <- train_data$Y
x_test <- as.matrix(test_data[, paste0("X", 1:23)])
y_test <- test_data$Y

EKSPLORASI VARIABEL DEPENDEN

hist(
  train_data$Y,
  main = "Histogram Berat Badan",
  xlab = "Berat Badan (kg)",
  ylab = "Frekuensi"
)

KORELASI ANTAR VARIABEL INDEPENDEN

cor_X <- cor(train_data[, paste0("X", 1:23)])

round(cor_X, 2)
##       X1   X2   X3   X4   X5   X6   X7   X8   X9  X10  X11  X12  X13  X14   X15
## X1  1.00 0.35 0.53 0.59 0.78 0.77 0.72 0.64 0.67 0.80 0.73 0.66 0.35 0.38  0.13
## X2  0.35 1.00 0.69 0.36 0.35 0.35 0.29 0.45 0.38 0.31 0.34 0.45 0.61 0.58  0.42
## X3  0.53 0.69 1.00 0.48 0.54 0.54 0.49 0.62 0.51 0.50 0.50 0.58 0.61 0.74  0.51
## X4  0.59 0.36 0.48 1.00 0.67 0.67 0.61 0.54 0.60 0.73 0.80 0.80 0.62 0.55  0.34
## X5  0.78 0.35 0.54 0.67 1.00 0.77 0.73 0.67 0.68 0.88 0.87 0.80 0.51 0.54  0.32
## X6  0.77 0.35 0.54 0.67 0.77 1.00 0.85 0.73 0.83 0.82 0.81 0.70 0.44 0.44  0.19
## X7  0.72 0.29 0.49 0.61 0.73 0.85 1.00 0.71 0.78 0.77 0.77 0.68 0.41 0.43  0.19
## X8  0.64 0.45 0.62 0.54 0.67 0.73 0.71 1.00 0.72 0.68 0.65 0.61 0.46 0.58  0.43
## X9  0.67 0.38 0.51 0.60 0.68 0.83 0.78 0.72 1.00 0.69 0.71 0.63 0.43 0.40  0.17
## X10 0.80 0.31 0.50 0.73 0.88 0.82 0.77 0.68 0.69 1.00 0.92 0.83 0.52 0.54  0.32
## X11 0.73 0.34 0.50 0.80 0.87 0.81 0.77 0.65 0.71 0.92 1.00 0.89 0.63 0.58  0.35
## X12 0.66 0.45 0.58 0.80 0.80 0.70 0.68 0.61 0.63 0.83 0.89 1.00 0.76 0.69  0.41
## X13 0.35 0.61 0.61 0.62 0.51 0.44 0.41 0.46 0.43 0.52 0.63 0.76 1.00 0.81  0.58
## X14 0.38 0.58 0.74 0.55 0.54 0.44 0.43 0.58 0.40 0.54 0.58 0.69 0.81 1.00  0.82
## X15 0.13 0.42 0.51 0.34 0.32 0.19 0.19 0.43 0.17 0.32 0.35 0.41 0.58 0.82  1.00
## X16 0.71 0.34 0.51 0.74 0.81 0.80 0.77 0.69 0.69 0.89 0.91 0.81 0.57 0.57  0.41
## X17 0.75 0.33 0.51 0.72 0.83 0.86 0.82 0.72 0.74 0.89 0.89 0.79 0.50 0.52  0.34
## X18 0.53 0.47 0.63 0.56 0.62 0.60 0.60 0.74 0.56 0.64 0.62 0.66 0.60 0.74  0.65
## X19 0.52 0.41 0.61 0.55 0.61 0.58 0.59 0.68 0.54 0.63 0.61 0.63 0.52 0.69  0.63
## X20 0.59 0.35 0.56 0.57 0.63 0.65 0.64 0.63 0.65 0.67 0.67 0.66 0.54 0.60  0.44
## X21 0.77 0.29 0.52 0.68 0.77 0.85 0.86 0.73 0.76 0.83 0.83 0.74 0.45 0.48  0.24
## X22 0.10 0.23 0.27 0.32 0.20 0.21 0.22 0.17 0.26 0.18 0.26 0.37 0.42 0.21 -0.04
## X23 0.76 0.42 0.52 0.57 0.65 0.75 0.68 0.59 0.68 0.68 0.64 0.57 0.36 0.38  0.13
##      X16  X17  X18  X19  X20  X21   X22  X23
## X1  0.71 0.75 0.53 0.52 0.59 0.77  0.10 0.76
## X2  0.34 0.33 0.47 0.41 0.35 0.29  0.23 0.42
## X3  0.51 0.51 0.63 0.61 0.56 0.52  0.27 0.52
## X4  0.74 0.72 0.56 0.55 0.57 0.68  0.32 0.57
## X5  0.81 0.83 0.62 0.61 0.63 0.77  0.20 0.65
## X6  0.80 0.86 0.60 0.58 0.65 0.85  0.21 0.75
## X7  0.77 0.82 0.60 0.59 0.64 0.86  0.22 0.68
## X8  0.69 0.72 0.74 0.68 0.63 0.73  0.17 0.59
## X9  0.69 0.74 0.56 0.54 0.65 0.76  0.26 0.68
## X10 0.89 0.89 0.64 0.63 0.67 0.83  0.18 0.68
## X11 0.91 0.89 0.62 0.61 0.67 0.83  0.26 0.64
## X12 0.81 0.79 0.66 0.63 0.66 0.74  0.37 0.57
## X13 0.57 0.50 0.60 0.52 0.54 0.45  0.42 0.36
## X14 0.57 0.52 0.74 0.69 0.60 0.48  0.21 0.38
## X15 0.41 0.34 0.65 0.63 0.44 0.24 -0.04 0.13
## X16 1.00 0.95 0.65 0.65 0.68 0.85  0.19 0.61
## X17 0.95 1.00 0.67 0.68 0.71 0.90  0.17 0.67
## X18 0.65 0.67 1.00 0.80 0.75 0.66  0.15 0.55
## X19 0.65 0.68 0.80 1.00 0.78 0.66  0.11 0.47
## X20 0.68 0.71 0.75 0.78 1.00 0.75  0.16 0.55
## X21 0.85 0.90 0.66 0.66 0.75 1.00  0.21 0.70
## X22 0.19 0.17 0.15 0.11 0.16 0.21  1.00 0.11
## X23 0.61 0.67 0.55 0.47 0.55 0.70  0.11 1.00

VISUALISASI KORELASI

library(corrplot)
## corrplot 0.95 loaded
corrplot(cor_X, method = "color", type = "lower", tl.col = "black", tl.cex = 0.7)

MENCARI PASANGAN X DENGAN KORELASI TINGGI

cor_pairs <- which(abs(cor_X) >= 0.80 & upper.tri(cor_X), arr.ind = TRUE)

hasil_korelasi <- data.frame(
  Variabel_1 = rownames(cor_X)[cor_pairs[, 1]],
  Variabel_2 = colnames(cor_X)[cor_pairs[, 2]],
  Korelasi = cor_X[cor_pairs]
)

hasil_korelasi
##    Variabel_1 Variabel_2  Korelasi
## 1          X6         X7 0.8499839
## 2          X6         X9 0.8264952
## 3          X1        X10 0.8011856
## 4          X5        X10 0.8821236
## 5          X6        X10 0.8195398
## 6          X4        X11 0.8048939
## 7          X5        X11 0.8748057
## 8          X6        X11 0.8061236
## 9         X10        X11 0.9249950
## 10         X4        X12 0.8020188
## 11        X10        X12 0.8253376
## 12        X11        X12 0.8859260
## 13        X13        X14 0.8111445
## 14        X14        X15 0.8216325
## 15         X5        X16 0.8106560
## 16         X6        X16 0.8039710
## 17        X10        X16 0.8938637
## 18        X11        X16 0.9083007
## 19        X12        X16 0.8134074
## 20         X5        X17 0.8253807
## 21         X6        X17 0.8587246
## 22         X7        X17 0.8155432
## 23        X10        X17 0.8899042
## 24        X11        X17 0.8914032
## 25        X16        X17 0.9466780
## 26         X6        X21 0.8482830
## 27         X7        X21 0.8582021
## 28        X10        X21 0.8328684
## 29        X11        X21 0.8272033
## 30        X16        X21 0.8494313
## 31        X17        X21 0.8997243

REGRESI LINEAR AWAL

model_awal <- lm(Y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + X11 + X12 + X13 + X14 + X15 + X16 + X17 + X18 + X19 + X20 + X21 + X22 + X23,
                 data = train_data)

summary(model_awal)
## 
## Call:
## lm(formula = Y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + 
##     X10 + X11 + X12 + X13 + X14 + X15 + X16 + X17 + X18 + X19 + 
##     X20 + X21 + X22 + X23, data = train_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.6861 -1.1858  0.0108  1.1398  9.1100 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.193e+02  2.765e+00 -43.156  < 2e-16 ***
## X1          -2.721e-02  7.128e-02  -0.382 0.702845    
## X2           3.141e-02  7.399e-02   0.425 0.671433    
## X3           1.282e-02  9.941e-02   0.129 0.897470    
## X4           2.181e-01  7.688e-02   2.838 0.004789 ** 
## X5           1.006e-01  9.152e-02   1.100 0.272152    
## X6           2.786e-01  2.031e-01   1.372 0.170879    
## X7           1.619e-01  2.439e-01   0.664 0.507366    
## X8           4.355e-01  1.486e-01   2.930 0.003596 ** 
## X9           5.009e-02  1.680e-01   0.298 0.765740    
## X10          7.107e-02  3.387e-02   2.098 0.036555 *  
## X11          1.591e-01  4.121e-02   3.861 0.000133 ***
## X12          3.297e-01  2.772e-02  11.897  < 2e-16 ***
## X13          2.445e-02  2.723e-02   0.898 0.369826    
## X14          2.048e-01  5.088e-02   4.026 6.86e-05 ***
## X15          3.478e-01  5.769e-02   6.028 3.93e-09 ***
## X16          8.471e-02  9.163e-02   0.924 0.355814    
## X17          3.427e-01  1.513e-01   2.265 0.024052 *  
## X18          1.695e-01  8.759e-02   1.935 0.053757 .  
## X19          3.331e-01  7.552e-02   4.411 1.34e-05 ***
## X20          8.653e-03  1.103e-01   0.078 0.937490    
## X21         -9.753e-02  2.191e-01  -0.445 0.656457    
## X22         -4.889e-02  1.361e-02  -3.592 0.000371 ***
## X23          2.950e-01  2.020e-02  14.604  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.04 on 381 degrees of freedom
## Multiple R-squared:  0.9778, Adjusted R-squared:  0.9764 
## F-statistic:   728 on 23 and 381 DF,  p-value: < 2.2e-16

UJI MULTIKOLINEARITAS DENGAN VIF

library(car)
## Loading required package: carData
vif_result <- vif(model_awal)

vif_result
##        X1        X2        X3        X4        X5        X6        X7        X8 
##  4.770068  2.535674  3.980244  3.497700  6.136984  7.591746  5.203242  3.913427 
##        X9       X10       X11       X12       X13       X14       X15       X16 
##  4.321714 11.644877 16.189237  8.992152  5.984285 10.497777  6.257007 14.727049 
##       X17       X18       X19       X20       X21       X22       X23 
## 17.340366  4.914002  4.605499  4.181067  8.970191  1.641241  3.428665

BEST-SUBSET SELECTION

library(leaps)

best_subset <- regsubsets(Y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + X11 + X12 + X13 + X14 + X15 + X16 + X17 + X18 + X19 + X20 + X21 + X22 + X23,
                          data = train_data,
                          method = "exhaustive",
                          nvmax = 23)

summary_best <- summary(best_subset)

summary_best
## Subset selection object
## Call: regsubsets.formula(Y ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 + 
##     X9 + X10 + X11 + X12 + X13 + X14 + X15 + X16 + X17 + X18 + 
##     X19 + X20 + X21 + X22 + X23, data = train_data, method = "exhaustive", 
##     nvmax = 23)
## 23 Variables  (and intercept)
##     Forced in Forced out
## X1      FALSE      FALSE
## X2      FALSE      FALSE
## X3      FALSE      FALSE
## X4      FALSE      FALSE
## X5      FALSE      FALSE
## X6      FALSE      FALSE
## X7      FALSE      FALSE
## X8      FALSE      FALSE
## X9      FALSE      FALSE
## X10     FALSE      FALSE
## X11     FALSE      FALSE
## X12     FALSE      FALSE
## X13     FALSE      FALSE
## X14     FALSE      FALSE
## X15     FALSE      FALSE
## X16     FALSE      FALSE
## X17     FALSE      FALSE
## X18     FALSE      FALSE
## X19     FALSE      FALSE
## X20     FALSE      FALSE
## X21     FALSE      FALSE
## X22     FALSE      FALSE
## X23     FALSE      FALSE
## 1 subsets of each size up to 23
## Selection Algorithm: exhaustive
##           X1  X2  X3  X4  X5  X6  X7  X8  X9  X10 X11 X12 X13 X14 X15 X16 X17
## 1  ( 1 )  " " " " " " " " " " " " " " " " " " " " " " "*" " " " " " " " " " "
## 2  ( 1 )  " " " " " " " " " " " " " " " " " " " " "*" " " " " " " " " " " " "
## 3  ( 1 )  " " " " " " " " " " " " " " " " " " " " " " "*" " " " " "*" " " " "
## 4  ( 1 )  " " " " " " " " " " " " " " " " " " " " " " "*" " " " " "*" " " "*"
## 5  ( 1 )  " " " " " " " " " " " " " " " " " " " " "*" "*" " " " " "*" " " " "
## 6  ( 1 )  " " " " " " " " " " " " " " "*" " " " " "*" "*" " " " " "*" " " " "
## 7  ( 1 )  " " " " " " " " " " " " " " " " " " " " "*" "*" " " "*" "*" " " "*"
## 8  ( 1 )  " " " " " " " " " " " " " " "*" " " " " "*" "*" " " "*" "*" " " "*"
## 9  ( 1 )  " " " " " " " " " " " " " " "*" " " " " "*" "*" " " "*" "*" " " "*"
## 10  ( 1 ) " " " " " " "*" " " " " " " "*" " " " " "*" "*" " " "*" "*" " " "*"
## 11  ( 1 ) " " " " " " "*" " " " " " " "*" " " "*" "*" "*" " " "*" "*" " " "*"
## 12  ( 1 ) " " " " " " "*" " " "*" " " "*" " " "*" "*" "*" " " "*" "*" " " "*"
## 13  ( 1 ) " " " " " " "*" " " "*" " " "*" " " "*" "*" "*" " " "*" "*" " " "*"
## 14  ( 1 ) " " " " " " "*" " " "*" " " "*" " " "*" "*" "*" "*" "*" "*" " " "*"
## 15  ( 1 ) " " " " " " "*" "*" "*" " " "*" " " "*" "*" "*" "*" "*" "*" " " "*"
## 16  ( 1 ) " " " " " " "*" "*" "*" " " "*" " " "*" "*" "*" "*" "*" "*" "*" "*"
## 17  ( 1 ) " " " " " " "*" "*" "*" "*" "*" " " "*" "*" "*" "*" "*" "*" "*" "*"
## 18  ( 1 ) " " "*" " " "*" "*" "*" "*" "*" " " "*" "*" "*" "*" "*" "*" "*" "*"
## 19  ( 1 ) " " "*" " " "*" "*" "*" "*" "*" " " "*" "*" "*" "*" "*" "*" "*" "*"
## 20  ( 1 ) "*" "*" " " "*" "*" "*" "*" "*" " " "*" "*" "*" "*" "*" "*" "*" "*"
## 21  ( 1 ) "*" "*" " " "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*"
## 22  ( 1 ) "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*"
## 23  ( 1 ) "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*" "*"
##           X18 X19 X20 X21 X22 X23
## 1  ( 1 )  " " " " " " " " " " " "
## 2  ( 1 )  "*" " " " " " " " " " "
## 3  ( 1 )  " " " " " " " " " " "*"
## 4  ( 1 )  " " " " " " " " " " "*"
## 5  ( 1 )  " " "*" " " " " " " "*"
## 6  ( 1 )  " " "*" " " " " " " "*"
## 7  ( 1 )  " " "*" " " " " " " "*"
## 8  ( 1 )  " " "*" " " " " " " "*"
## 9  ( 1 )  " " "*" " " " " "*" "*"
## 10  ( 1 ) " " "*" " " " " "*" "*"
## 11  ( 1 ) " " "*" " " " " "*" "*"
## 12  ( 1 ) " " "*" " " " " "*" "*"
## 13  ( 1 ) "*" "*" " " " " "*" "*"
## 14  ( 1 ) "*" "*" " " " " "*" "*"
## 15  ( 1 ) "*" "*" " " " " "*" "*"
## 16  ( 1 ) "*" "*" " " " " "*" "*"
## 17  ( 1 ) "*" "*" " " " " "*" "*"
## 18  ( 1 ) "*" "*" " " " " "*" "*"
## 19  ( 1 ) "*" "*" " " "*" "*" "*"
## 20  ( 1 ) "*" "*" " " "*" "*" "*"
## 21  ( 1 ) "*" "*" " " "*" "*" "*"
## 22  ( 1 ) "*" "*" " " "*" "*" "*"
## 23  ( 1 ) "*" "*" "*" "*" "*" "*"
id_adjr2 <- which.max(summary_best$adjr2)
id_cp <- which.min(summary_best$cp)
id_bic <- which.min(summary_best$bic)

id_adjr2
## [1] 15
id_cp
## [1] 13
id_bic
## [1] 11
summary_best$adjr2[id_adjr2]
## [1] 0.9767766
summary_best$cp[id_cp]
## [1] 8.339215
summary_best$bic[id_bic]
## [1] -1456.492
coef(best_subset, id = id_adjr2)
##   (Intercept)            X4            X5            X6            X8 
## -119.97616018    0.21113001    0.08926929    0.32988356    0.47086009 
##           X10           X11           X12           X13           X14 
##    0.07060256    0.16848840    0.32955526    0.03215492    0.20291202 
##           X15           X17           X18           X19           X22 
##    0.36250741    0.41751009    0.15636152    0.33284265   -0.04661985 
##           X23 
##    0.29501045
coef(best_subset, id = id_cp)
##   (Intercept)            X4            X6            X8           X10 
## -120.07250819    0.20380697    0.35448301    0.46343499    0.07159654 
##           X11           X12           X14           X15           X17 
##    0.18481502    0.34410646    0.22736443    0.36639819    0.40369723 
##           X18           X19           X22           X23 
##    0.16275700    0.32461622   -0.04233033    0.29649349
coef(best_subset, id = id_bic)
##   (Intercept)            X4            X8           X10           X11 
## -121.38765539    0.21041238    0.60427967    0.07572829    0.18574862 
##           X12           X14           X15           X17           X19 
##    0.34195897    0.24036443    0.36703876    0.49840601    0.37130479 
##           X22           X23 
##   -0.03949161    0.31568819

MODEL BEST-SUBSET BERDASARKAN BIC

model_best <- lm(Y ~ X4 + X8 + X10 + X11 + X12 + X14 + X15 + X17 + X19 + X22 + X23,data = train_data)

summary(model_best)
## 
## Call:
## lm(formula = Y ~ X4 + X8 + X10 + X11 + X12 + X14 + X15 + X17 + 
##     X19 + X22 + X23, data = train_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.2419 -1.4067  0.0441  1.1311  8.8919 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -121.38766    2.54200 -47.753  < 2e-16 ***
## X4             0.21041    0.07521   2.798  0.00540 ** 
## X8             0.60428    0.12438   4.858 1.71e-06 ***
## X10            0.07573    0.02983   2.538  0.01152 *  
## X11            0.18575    0.03706   5.012 8.17e-07 ***
## X12            0.34196    0.02526  13.538  < 2e-16 ***
## X14            0.24036    0.04036   5.955 5.77e-09 ***
## X15            0.36704    0.05081   7.223 2.65e-12 ***
## X17            0.49841    0.09791   5.090 5.55e-07 ***
## X19            0.37130    0.06216   5.974 5.19e-09 ***
## X22           -0.03949    0.01266  -3.119  0.00195 ** 
## X23            0.31569    0.01661  19.010  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.041 on 393 degrees of freedom
## Multiple R-squared:  0.977,  Adjusted R-squared:  0.9764 
## F-statistic:  1521 on 11 and 393 DF,  p-value: < 2.2e-16

RIDGE REGRESSION

library(glmnetUtils)

set.seed(7)

model_ridge <- cv.glmnet(
  Y ~ .,
  data = train_data,
  alpha = 0,
  type.measure = "mse",
  family = "gaussian",
  nfolds = 5
)
lambda_ridge <- model_ridge$lambda.min

cat("Lambda terbaik Ridge:", lambda_ridge, "\n")
## Lambda terbaik Ridge: 1.197007
plot(model_ridge)

coef_ridge <- coef(model_ridge, s = "lambda.min")

coef_ridge
## 24 x 1 sparse Matrix of class "dgCMatrix"
##                lambda.min
## (Intercept) -117.04325200
## X1             0.06669775
## X2             0.07276288
## X3             0.05740606
## X4             0.34132790
## X5             0.21652588
## X6             0.26159567
## X7             0.26856870
## X8             0.34965781
## X9             0.11934438
## X10            0.09223510
## X11            0.12996283
## X12            0.21846760
## X13            0.07302086
## X14            0.20337302
## X15            0.28181412
## X16            0.15365483
## X17            0.26797391
## X18            0.25846306
## X19            0.29916655
## X20            0.05179781
## X21            0.09462680
## X22           -0.04466173
## X23            0.22482871

LASSO REGRESSION

set.seed(7)

model_lasso <- cv.glmnet(
  Y ~ .,
  data = train_data,
  alpha = 1,
  type.measure = "mse",
  family = "gaussian",
  nfolds = 5
)
lambda_lasso <- model_lasso$lambda.min

cat("Lambda terbaik LASSO:", lambda_lasso, "\n")
## Lambda terbaik LASSO: 0.04106296
plot(model_lasso)

coef_lasso <- coef(model_lasso, s = "lambda.min")

coef_lasso
## 24 x 1 sparse Matrix of class "dgCMatrix"
##                lambda.min
## (Intercept) -118.83682586
## X1             .         
## X2             0.02557922
## X3             .         
## X4             0.20528394
## X5             0.08972769
## X6             0.27845262
## X7             0.07624486
## X8             0.41984391
## X9             0.03264934
## X10            0.06564886
## X11            0.16428337
## X12            0.32665534
## X13            0.01775265
## X14            0.21481679
## X15            0.34666285
## X16            0.08574257
## X17            0.33160216
## X18            0.17387073
## X19            0.33189513
## X20            .         
## X21            .         
## X22           -0.03967619
## X23            0.29220330

ELASTIC NET

set.seed(7)

alpha_grid <- seq(from = 0.1, to = 0.9, by = 0.1)

cv_enet <- lapply(alpha_grid,
                  function(i) {
                    cv.glmnet(
                      Y ~ .,
                      data = train_data,
                      alpha = i,
                      type.measure = "mse",
                      family = "gaussian",
                      nfolds = 5
                    )
                  })
par(mfrow = c(3,3))

for(i in 1:length(alpha_grid)){
  plot(cv_enet[[i]],
       main = paste("alpha =", alpha_grid[i]))
}

par(mfrow = c(1,1))
cv_errors <- sapply(cv_enet,
                    function(model) min(model$cvm))

alpha_result <- data.frame(
  alpha = alpha_grid,
  CV_Error = cv_errors)

alpha_result
##   alpha CV_Error
## 1   0.1 4.393482
## 2   0.2 4.472229
## 3   0.3 4.368814
## 4   0.4 4.663017
## 5   0.5 4.534121
## 6   0.6 4.419727
## 7   0.7 4.514367
## 8   0.8 4.352008
## 9   0.9 4.454233
id_alpha <- which.min(cv_errors)

alpha_best <- alpha_grid[id_alpha]

cat("Alpha terbaik Elastic Net:", alpha_best, "\n")
## Alpha terbaik Elastic Net: 0.8
model_enet <- cv_enet[[id_alpha]]

lambda_enet <- model_enet$lambda.min

cat("Lambda terbaik Elastic Net:",lambda_enet,"\n")
## Lambda terbaik Elastic Net: 0.0467688
coef_enet <- coef(model_enet, s = "lambda.min")

coef_enet
## 24 x 1 sparse Matrix of class "dgCMatrix"
##                lambda.min
## (Intercept) -118.88953757
## X1             .         
## X2             0.02628044
## X3             .         
## X4             0.20809603
## X5             0.09234897
## X6             0.27540456
## X7             0.08159181
## X8             0.41850720
## X9             0.03752258
## X10            0.06689765
## X11            0.16334211
## X12            0.32466323
## X13            0.01959682
## X14            0.21459908
## X15            0.34524773
## X16            0.08699430
## X17            0.32953152
## X18            0.17495924
## X19            0.33236843
## X20            .         
## X21            .         
## X22           -0.04046033
## X23            0.29150005

EVALUASI BEST-SUBSET

pred_best <- predict(model_best, newdata = test_data)

mse_best <- mean((y_test - pred_best)^2)

r2_best <- 1 - sum((y_test - pred_best)^2) /sum((y_test - mean(y_test))^2)

pred_best_train <- predict(model_best, newdata = train_data)

mse_best_train <- mean((y_train - pred_best_train)^2)

mae_best_train <- mean(abs(y_train - pred_best_train))

mae_best_test <- mean(abs(y_test - pred_best))

r2_best_train <- 1 - sum((y_train - pred_best_train)^2) /
  sum((y_train - mean(y_train))^2)

EVALUASI RIDGE

pred_ridge_train <- predict(model_ridge, newdata = train_data, na.action = na.pass)

rss_ridge <- sum((train_data$Y - pred_ridge_train)^2)

tss_ridge <- sum((train_data$Y - mean(train_data$Y))^2)

r2_ridge_train <- 1 -(rss_ridge / tss_ridge)

pred_ridge_test <- predict(model_ridge, newdata = test_data, na.action = na.pass)

mse_ridge <- mean((y_test - pred_ridge_test)^2)

r2_ridge <- 1 -sum((y_test - pred_ridge_test)^2) / sum((y_test - mean(y_test))^2)

mse_ridge_train <- mean((y_train - pred_ridge_train)^2)

mae_ridge_train <- mean(abs(y_train - pred_ridge_train))

mae_ridge_test <- mean(abs(y_test - pred_ridge_test))

EVALUASI LASSO

pred_lasso_train <- predict(model_lasso, newdata = train_data, na.action = na.pass)

rss_lasso <- sum((train_data$Y - pred_lasso_train)^2)

tss_lasso <- sum((train_data$Y - mean(train_data$Y))^2)

r2_lasso_train <- 1 - (rss_lasso / tss_lasso)

pred_lasso_test <- predict(model_lasso, newdata = test_data, na.action = na.pass)

mse_lasso <- mean((y_test - pred_lasso_test)^2)

r2_lasso <- 1 - sum((y_test - pred_lasso_test)^2) / sum((y_test - mean(y_test))^2)

mse_lasso_train <- mean((y_train - pred_lasso_train)^2)

mae_lasso_train <- mean(abs(y_train - pred_lasso_train))

mae_lasso_test <- mean(abs(y_test - pred_lasso_test))

EVALUASI ELASTIC NET

pred_enet_train <- predict(model_enet, newdata = train_data, na.action = na.pass)

rss_enet <- sum((train_data$Y - pred_enet_train)^2)

tss_enet <- sum((train_data$Y - mean(train_data$Y))^2)

r2_enet_train <- 1 - (rss_enet / tss_enet)

pred_enet_test <- predict(model_enet, newdata = test_data, na.action = na.pass)

mse_enet <- mean((y_test - pred_enet_test)^2)

r2_enet <- 1 - sum((y_test - pred_enet_test)^2) / sum((y_test - mean(y_test))^2)

mse_enet_train <- mean((y_train - pred_enet_train)^2)

mae_enet_train <- mean(abs(y_train - pred_enet_train))

mae_enet_test <- mean(abs(y_test - pred_enet_test))

PERBANDINGAN SEMUA MODEL

hasil_model <- data.frame(
  Model = c("Best-Subset (BIC)", "Ridge", "LASSO", "Elastic Net"),
  Jumlah_Variabel = c(11, 23, 19, 19),
  MSE_Training = c(mse_best_train, mse_ridge_train, mse_lasso_train, mse_enet_train),
  MAE_Training = c(mae_best_train, mae_ridge_train, mae_lasso_train, mae_enet_train),
  R2_Training = c(r2_best_train, r2_ridge_train, r2_lasso_train, r2_enet_train),
  MSE_Testing = c(mse_best, mse_ridge, mse_lasso, mse_enet),
  MAE_Testing = c(mae_best_test, mae_ridge_test, mae_lasso_test, mae_enet_test),
  R2_Testing = c(r2_best, r2_ridge, r2_lasso, r2_enet)
)

hasil_model
##               Model Jumlah_Variabel MSE_Training MAE_Training R2_Training
## 1 Best-Subset (BIC)              11     4.040315     1.554568   0.9770438
## 2             Ridge              23     4.708593     1.624273   0.9732468
## 3             LASSO              19     4.359813     1.565700   0.9752285
## 4       Elastic Net              19     4.444336     1.584725   0.9747483
##   MSE_Testing MAE_Testing R2_Testing
## 1    6.263749    1.954801  0.9660736
## 2    7.144075    2.132281  0.9613055
## 3    6.336633    1.986016  0.9656789
## 4    6.391132    1.998235  0.9653837

PERINGKAT MODEL BERDASARKAN MSE

hasil_model_mse <- hasil_model[
  order(hasil_model$MSE_Testing),]

hasil_model_mse
##               Model Jumlah_Variabel MSE_Training MAE_Training R2_Training
## 1 Best-Subset (BIC)              11     4.040315     1.554568   0.9770438
## 3             LASSO              19     4.359813     1.565700   0.9752285
## 4       Elastic Net              19     4.444336     1.584725   0.9747483
## 2             Ridge              23     4.708593     1.624273   0.9732468
##   MSE_Testing MAE_Testing R2_Testing
## 1    6.263749    1.954801  0.9660736
## 3    6.336633    1.986016  0.9656789
## 4    6.391132    1.998235  0.9653837
## 2    7.144075    2.132281  0.9613055
model_terbaik <- hasil_model_mse[1, ]

model_terbaik
##               Model Jumlah_Variabel MSE_Training MAE_Training R2_Training
## 1 Best-Subset (BIC)              11     4.040315     1.554568   0.9770438
##   MSE_Testing MAE_Testing R2_Testing
## 1    6.263749    1.954801  0.9660736