Latihan S2
# Membuat data
set.seed(12345)
n <- 100
# Membangkitkan X1, X2, dan X3 dari Normal(mu = 2, sigma^2 = 1.5)
X1 <- rnorm(n, mean = 2, sd = sqrt(1.5))
X2 <- rnorm(n, mean = 2, sd = sqrt(1.5))
X3 <- rnorm(n, mean = 2, sd = sqrt(1.5))
# Membangkitkan error berdistribusi Normal(0,1)
eps4 <- rnorm(n, mean = 0, sd = 1)
eps5 <- rnorm(n, mean = 0, sd = 1)
epsY <- rnorm(n, mean = 0, sd = 1)
# Membentuk X4 dan X5
X4 <- (0.6 * X1)^2 + eps4
X5 <- 0.7 * X1 + eps5
# Menentukan nilai koefisien regresi
beta0 <- 1
beta1 <- 3
beta2 <- 3
beta3 <- 0
beta4 <- 4
beta5 <- 4
# Membentuk variabel Y
Y <- beta0 + beta1*X1 + beta2*X2 +
beta3*X3 + beta4*X4 + beta5*X5 + epsY
# Menyimpan data sebagai DATAKU
DATAKU <- data.frame(Y, X1, X2, X3, X4, X5)
# Melihat beberapa data pertama
head(DATAKU)
## Y X1 X2 X3 X4 X5
## 1 37.393909 2.7171234 2.2742515 0.2410879 3.18007565 2.529951505
## 2 28.824451 2.8689149 0.5839214 1.2293175 2.97283586 2.010384357
## 3 24.250471 1.8661313 2.5173549 2.2982520 0.81315441 1.590669651
## 4 13.368997 1.4445817 0.3775128 3.2962237 1.95074336 0.009428078
## 5 34.641469 2.7420576 2.1727923 3.0181902 2.58932818 1.302218359
## 6 7.093114 -0.2265322 1.3434780 2.1288576 0.05668386 0.669621666
# Melihat ringkasan data
summary(DATAKU)
## Y X1 X2 X3
## Min. :-6.081 Min. :-0.9153 Min. :-0.6008 Min. :-0.8047
## 1st Qu.:16.556 1st Qu.: 1.2773 1st Qu.: 1.3718 1st Qu.: 1.2074
## Median :31.225 Median : 2.5924 Median : 2.0318 Median : 2.0165
## Mean :31.521 Mean : 2.3003 Mean : 2.0554 Mean : 1.9434
## 3rd Qu.:45.303 3rd Qu.: 3.1027 3rd Qu.: 2.8553 3rd Qu.: 2.7731
## Max. :76.204 Max. : 5.0338 Max. : 5.2527 Max. : 5.3649
## X4 X5
## Min. :-2.1853 Min. :-1.7363
## 1st Qu.: 0.8335 1st Qu.: 0.5684
## Median : 2.4555 Median : 1.7569
## Mean : 2.7845 Mean : 1.5630
## 3rd Qu.: 4.1171 3rd Qu.: 2.5431
## Max. : 9.0648 Max. : 4.0981
# Least Squares
# Membentuk model regresi linear dengan seluruh prediktor
LS <- lm(Y ~ X1 + X2 + X3 + X4 + X5,
data = DATAKU)
# Melihat hasil model Least Squares
summary(LS)
##
## Call:
## lm(formula = Y ~ X1 + X2 + X3 + X4 + X5, data = DATAKU)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.6085 -0.6144 -0.0071 0.7052 3.3449
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.73007 0.35205 2.074 0.0408 *
## X1 2.79490 0.20286 13.778 <2e-16 ***
## X2 3.11461 0.09108 34.197 <2e-16 ***
## X3 0.05665 0.10019 0.565 0.5731
## X4 4.05465 0.09353 43.353 <2e-16 ***
## X5 4.19708 0.12597 33.317 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.094 on 94 degrees of freedom
## Multiple R-squared: 0.9968, Adjusted R-squared: 0.9967
## F-statistic: 5907 on 5 and 94 DF, p-value: < 2.2e-16
# Melihat koefisien Least Squares
coef(LS)
## (Intercept) X1 X2 X3 X4 X5
## 0.73007015 2.79490198 3.11460931 0.05665268 4.05464915 4.19708036
# Ridge Regression
# Memanggil paket glmnet
library(glmnet)
## Warning: package 'glmnet' was built under R version 4.5.3
## Loading required package: Matrix
## Loaded glmnet 5.0
# Menentukan matriks prediktor dan variabel respon
X <- as.matrix(DATAKU[, c("X1", "X2", "X3", "X4", "X5")])
Y <- DATAKU$Y
# Membentuk model Ridge
# alpha = 0 menunjukkan Ridge
ridge <- glmnet(X, Y, alpha = 0)
# Plot jalur koefisien Ridge
plot(ridge)

# Cross-validation untuk menentukan lambda terbaik
cv.ridge <- cv.glmnet(X, Y, alpha = 0)
# Plot hasil cross-validation
plot(cv.ridge)

# Lambda terbaik Ridge
cv.ridge$lambda.min
## [1] 1.773819
# Membentuk model Ridge dengan lambda terbaik
ridge.best <- glmnet(X, Y,
alpha = 0,
lambda = cv.ridge$lambda.min)
# Melihat koefisien Ridge
coef(ridge.best)
## 6 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) 1.6576394
## X1 3.8775579
## X2 2.8708141
## X3 -0.1639049
## X4 3.3366325
## X5 3.8842437
# LASSO Regression
# Membentuk model LASSO
# alpha = 1 menunjukkan LASSO
lasso <- glmnet(X, Y, alpha = 1)
# Plot jalur koefisien LASSO
plot(lasso)

# Cross-validation untuk menentukan lambda terbaik
cv.lasso <- cv.glmnet(X, Y, alpha = 1)
# Plot hasil cross-validation
plot(cv.lasso)

# Lambda terbaik LASSO
cv.lasso$lambda.min
## [1] 0.0882834
# Membentuk model LASSO dengan lambda terbaik
lasso.best <- glmnet(X, Y,
alpha = 1,
lambda = cv.lasso$lambda.min)
# Melihat koefisien LASSO
coef(lasso.best)
## 6 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) 1.088174
## X1 2.837117
## X2 3.038536
## X3 .
## X4 4.021203
## X5 4.135903
# Perbandingan koefisien ketiga metode
hasil_perbandingan <- data.frame(
Variabel = c("(Intercept)", "X1", "X2", "X3", "X4", "X5"),
Least_Squares = as.numeric(coef(LS)),
Ridge = as.numeric(coef(ridge.best)),
LASSO = as.numeric(coef(lasso.best))
)
# Menampilkan perbandingan koefisien
hasil_perbandingan
## Variabel Least_Squares Ridge LASSO
## 1 (Intercept) 0.73007015 1.6576394 1.088174
## 2 X1 2.79490198 3.8775579 2.837117
## 3 X2 3.11460931 2.8708141 3.038536
## 4 X3 0.05665268 -0.1639049 0.000000
## 5 X4 4.05464915 3.3366325 4.021203
## 6 X5 4.19708036 3.8842437 4.135903
# Prediksi menggunakan ketiga metode
pred_LS <- predict(LS, newdata = DATAKU)
pred_Ridge <- predict(ridge.best, newx = X)
pred_LASSO <- predict(lasso.best, newx = X)
# Menghitung MSE
MSE_LS <- mean((Y - pred_LS)^2)
MSE_Ridge <- mean((Y - pred_Ridge)^2)
MSE_LASSO <- mean((Y - pred_LASSO)^2)
# Menghitung RMSE
RMSE_LS <- sqrt(MSE_LS)
RMSE_Ridge <- sqrt(MSE_Ridge)
RMSE_LASSO <- sqrt(MSE_LASSO)
# Membandingkan MSE dan RMSE
hasil_error <- data.frame(
Metode = c("Least Squares", "Ridge", "LASSO"),
MSE = c(MSE_LS, MSE_Ridge, MSE_LASSO),
RMSE = c(RMSE_LS, RMSE_Ridge, RMSE_LASSO)
)
hasil_error
## Metode MSE RMSE
## 1 Least Squares 1.125471 1.060882
## 2 Ridge 2.202041 1.483928
## 3 LASSO 1.146074 1.070548
# R-squared dan Adjusted R-squared untuk Least Squares
summary(LS)$r.squared
## [1] 0.9968274
summary(LS)$adj.r.squared
## [1] 0.9966587