## Warning: package 'forecast' was built under R version 4.5.3
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Warning: package 'readxl' was built under R version 4.5.3
data <- read_excel(
"~/PROJECT SEMESTER 6/PROJECT STATISTIKA 1/DATA PROJECT UAS JST.xlsx"
)
head(data)## # A tibble: 6 × 2
## Tanggal Terakhir
## <chr> <chr>
## 1 30/12/2025 8.646,94
## 2 29/12/2025 8.644,26
## 3 24/12/2025 8.537,91
## 4 23/12/2025 8.584,78
## 5 22/12/2025 8.645,84
## 6 19/12/2025 8.609,55
## tibble [474 × 2] (S3: tbl_df/tbl/data.frame)
## $ Tanggal : chr [1:474] "30/12/2025" "29/12/2025" "24/12/2025" "23/12/2025" ...
## $ Terakhir: chr [1:474] "8.646,94" "8.644,26" "8.537,91" "8.584,78" ...
## Tanggal Terakhir
## Length:474 Length:474
## Class :character Class :character
## Mode :character Mode :character
# Mengubah format angka Indonesia menjadi numerik
data$Terakhir <- as.numeric(
gsub(",", ".",
gsub("\\.", "", data$Terakhir))
)
# Mengubah tanggal menjadi format Date
data$Tanggal <- as.Date(
data$Tanggal,
format = "%d/%m/%Y"
)
# Mengurutkan data berdasarkan tanggal
data <- data[order(data$Tanggal), ]
# Mengecek missing value
sum(is.na(data$Terakhir))## [1] 0
## # A tibble: 6 × 2
## Tanggal Terakhir
## <date> <dbl>
## 1 2024-01-15 7224
## 2 2024-01-16 7243.
## 3 2024-01-17 7201.
## 4 2024-01-18 7253.
## 5 2024-01-19 7227.
## 6 2024-01-22 7248.
ts_data <- ts(data$Terakhir)
plot(
ts_data,
main = "Plot Data IHSG",
ylab = "Harga Penutupan",
xlab = "Waktu",
col = "blue"
)
# UJI STASIONERITAS AWAL
##
## Augmented Dickey-Fuller Test
##
## data: ts_data
## Dickey-Fuller = -1.9426, Lag order = 7, p-value = 0.6023
## alternative hypothesis: stationary
Interpretasi: Jika p-value > 0.05 maka data tidak stasioner
diff1 <- diff(ts_data)
plot(
diff1,
main = "Differencing Orde 1",
ylab = "Differencing",
xlab = "Waktu",
col = "red"
)## Warning in adf.test(diff1): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff1
## Dickey-Fuller = -7.2105, Lag order = 7, p-value = 0.01
## alternative hypothesis: stationary
# MEMBAGI DATA TRAINING DAN TESTING
n <- length(ts_data)
train_size <- floor(0.8 * n)
train <- ts_data[1:train_size]
test <- ts_data[(train_size + 1):n]
length(train)## [1] 379
## [1] 95
## Series: train
## ARIMA(0,1,0)
##
## sigma^2 = 10429: log likelihood = -2285.06
## AIC=4572.11 AICc=4572.12 BIC=4576.05
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.3596464 101.9897 67.13956 -0.01570036 0.9305611 0.9976447
## ACF1
## Training set -0.0276924
forecast_arima <- forecast(
model_arima,
h = length(test)
)
plot(
forecast_arima,
main = "Forecasting ARIMA"
)
# EVALUASI MODEL ARIMA
## ME RMSE MAE MPE MAPE MASE
## Training set -0.3596464 101.9897 67.13956 -0.01570036 0.9305611 0.9976447
## Test set 225.7737895 303.3168 249.63779 3.01616523 3.3615990 3.7094347
## ACF1
## Training set -0.0276924
## Test set NA
## Series: train
## ARIMA(0,1,0)
##
## sigma^2 = 10429: log likelihood = -2285.06
## AIC=4572.11 AICc=4572.12 BIC=4576.05
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.3596464 101.9897 67.13956 -0.01570036 0.9305611 0.9976447
## ACF1
## Training set -0.0276924
forecast_sarima <- forecast(
model_sarima,
h = length(test)
)
plot(
forecast_sarima,
main = "Forecasting SARIMA"
)
# EVALUASI MODEL SARIMA
## ME RMSE MAE MPE MAPE MASE
## Training set -0.3596464 101.9897 67.13956 -0.01570036 0.9305611 0.9976447
## Test set 225.7737895 303.3168 249.63779 3.01616523 3.3615990 3.7094347
## ACF1
## Training set -0.0276924
## Test set NA
perbandingan <- data.frame(
Model = c(
"ARIMA",
"SARIMA"
),
RMSE = c(
akurasi_arima[2, "RMSE"],
akurasi_sarima[2, "RMSE"]
),
MAE = c(
akurasi_arima[2, "MAE"],
akurasi_sarima[2, "MAE"]
),
MAPE = c(
akurasi_arima[2, "MAPE"],
akurasi_sarima[2, "MAPE"]
),
AIC = c(
AIC(model_arima),
AIC(model_sarima)
)
)
perbandingan## Model RMSE MAE MAPE AIC
## 1 ARIMA 303.3168 249.6378 3.361599 4572.114
## 2 SARIMA 303.3168 249.6378 3.361599 4572.114
if(
min(perbandingan$RMSE) ==
perbandingan$RMSE[1]
){
cat("Model terbaik adalah ARIMA")
} else {
cat("Model terbaik adalah SARIMA")
}## Model terbaik adalah ARIMA
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,0)
## Q* = 8.9193, df = 10, p-value = 0.5398
##
## Model df: 0. Total lags used: 10
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,0)
## Q* = 8.9193, df = 10, p-value = 0.5398
##
## Model df: 0. Total lags used: 10
forecast_30 <- forecast(
model_arima,
h = 30
)
plot(
forecast_30,
main = "Forecast 30 Hari Kedepan"
)## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 380 7080.47 6949.592 7211.348 6880.310 7280.630
## 381 7080.47 6895.381 7265.559 6797.400 7363.540
## 382 7080.47 6853.783 7307.157 6733.782 7427.158
## 383 7080.47 6818.714 7342.226 6680.149 7480.791
## 384 7080.47 6787.818 7373.122 6632.898 7528.042
## 385 7080.47 6759.886 7401.054 6590.179 7570.761
## 386 7080.47 6734.200 7426.740 6550.895 7610.045
## 387 7080.47 6710.292 7450.648 6514.331 7646.609
## 388 7080.47 6687.836 7473.104 6479.989 7680.951
## 389 7080.47 6666.598 7494.342 6447.507 7713.433
## 390 7080.47 6646.397 7514.543 6416.613 7744.327
## 391 7080.47 6627.096 7533.844 6387.094 7773.846
## 392 7080.47 6608.583 7552.357 6358.782 7802.158
## 393 7080.47 6590.770 7570.170 6331.538 7829.402
## 394 7080.47 6573.582 7587.358 6305.252 7855.688
## 395 7080.47 6556.959 7603.981 6279.829 7881.111
## 396 7080.47 6540.847 7620.093 6255.188 7905.752
## 397 7080.47 6525.202 7635.738 6231.261 7929.679
## 398 7080.47 6509.987 7650.953 6207.991 7952.949
## 399 7080.47 6495.167 7665.773 6185.326 7975.614
## 400 7080.47 6480.712 7680.228 6163.220 7997.720
## 401 7080.47 6466.599 7694.341 6141.635 8019.305
## 402 7080.47 6452.802 7708.138 6120.535 8040.405
## 403 7080.47 6439.302 7721.638 6099.888 8061.052
## 404 7080.47 6426.081 7734.859 6079.668 8081.272
## 405 7080.47 6413.121 7747.819 6059.848 8101.092
## 406 7080.47 6400.409 7760.531 6040.406 8120.534
## 407 7080.47 6387.930 7773.010 6021.321 8139.619
## 408 7080.47 6375.671 7785.269 6002.573 8158.367
## 409 7080.47 6363.623 7797.317 5984.146 8176.794