Metode Box-Jenkins (ARIMA) terdiri dari serangkaian proses iteratif untuk menemukan model peramalan terbaik. Berikut adalah landasan teori dari masing-masing tahapan analisis:
Syarat utama dalam pemodelan ARIMA adalah data harus stasioner dalam varian dan rata-rata (mean).
Stasioneritas dalam Varian: Jika data tidak stasioner dalam varian, dilakukan transformasi data, misalnya menggunakan transformasi Box-Cox dengan parameter \(\lambda\).
Stasioneritas dalam Rata-rata: Jika data tidak stasioner dalam rata-rata, dilakukan proses diferensiasi (differencing). Rumus diferensiasi orde pertama adalah:\[\Delta Y_t = Y_t - Y_{t-1}\]
Identifikasi kandidat model ARIMA(\(p,d,q\)) dilakukan dengan mengamati perilaku plot Autocorrelation Function (ACF) dan Partial Autocorrelation Function (PACF) dari data yang sudah stasioner.
Bentuk umum persamaan model ARIMA adalah: \[\phi_p(B)(1-B)^d Z_t = \theta_q(B)a_t\]
Pengujian parameter bertujuan untuk menentukan apakah parameter model ARIMA yang diestimasi memiliki pengaruh signifikan terhadap model. Pilih \(\delta\) sebagai himpunan parameter model (yang terdiri atas \(\phi\) dan \(\theta\)) serta \(se(\hat{\delta})\) sebagai standar eror dari \(\hat{\delta}\). Tahapan pengujiannya adalah:
Hipotesis: \[H_{0} : \delta = 0\] \[H_{1} : \delta \neq 0\]
Taraf Signifikansi: \(\alpha = 0.05\)
Statistik Uji: \[t_{hitung} = \frac{\hat{\delta}}{se(\hat{\delta})}\] Untuk perhitungan manual parameter, standar error parameter didapatkan melalui: \[SE(\text{parameter}) = \sqrt{\frac{1-(\text{parameter})^2}{n}}\]
Daerah Penolakan: \(H_{0}\) ditolak jika \(|t_{hitung}| > t_{\alpha/2; db=n-n_{p}}\) dengan \(n\) adalah banyak data dan \(n_p\) adalah banyak parameter.
Model dikatakan layak jika residualnya memenuhi asumsi White Noise, yaitu:
Normalitas: Diuji dengan Jarque-Bera Test. Residual harus berdistribusi normal (\(p-value > \alpha\)).
Independensi (Tidak ada autokorelasi): Diuji dengan Ljung-Box Test (\(p-value > \alpha\)).
Homoskedastisitas (Varian konstan): Diuji dengan ARCH Test (\(p-value > \alpha\)).
Untuk mengukur akurasi dari peramalan (forecasting), digunakan beberapa metrik kesalahan pengukuran berikut:
library(tidyverse)
library(MASS)
library(forecast)
library(tseries)
library(lmtest)
library(FinTS)
library(knitr)
Data yang digunakan adalah harga saham AMRT periode 1 April 2024 - 26 Juni 2024 sebanyak 50 observasi yang diimpor dari file CSV. Frekuensi awal ini dibagi menjadi data training dan data testing dengan rasio 80:20, yaitu 40 data training dan 10 data testing.
# 1. Membaca file CSV
data_csv <- read.csv("D:/Komlan B/Sumber Alfaria Trijaya Stock Price History.csv", sep = ";")
head(data_csv)
## Date Price Open High Low Vol. Change..
## 1 01/04/2024 2,910 2,910 2,920 2,890 43.18M 0.00%
## 2 02/04/2024 2,910 2,920 2,920 2,890 30.48M 0.00%
## 3 03/04/2024 2,890 2,910 2,910 2,880 36.87M -0.69%
## 4 04/04/2024 2,900 2,900 2,910 2,880 18.54M 0.35%
## 5 05/04/2024 2,880 2,900 2,900 2,870 9.75M -0.69%
## 6 16/04/2024 2,700 2,670 2,790 2,660 52.99M -6.25%
# 2. Mengambil data dari kolom ke-2 (Kolom Price)
amrt_raw <- data_csv[, 2]
# 3. MENGUBAH TEKS JADI ANGKA MURNI
amrt_clean <- as.numeric(gsub(",", "", amrt_raw))
# 4. Mengubah data menjadi format Time Series
ts_amrt <- ts(amrt_clean)
# 5. Membagi data (45 training, 5 testing)
train_data <- window(ts_amrt, end = 40)
test_data <- window(ts_amrt, start = 41)
Melakukan identifikasi stasioneritas (plot data, Box-Cox, uji ADF).
Melakukan transformasi dan differencing jika diperlukan.
Mengidentifikasi kandidat model dari plot ACF dan PACF.
Estimasi dan pengujian parameter model untuk mendapatkan model yang parameternya signifikan.
Uji diagnostik residual model terpilih.
Peramalan (forecasting) dan perhitungan tingkat kesalahan (MAPE, SMAPE, RMSE).
Langkah pertama dalam pemodelan ARIMA adalah memastikan bahwa data telah stasioner, baik dalam varian maupun dalam rata-rata.
Untuk menguji apakah data sudah stasioner dalam varian, kita dapat melihat plot Box-Cox dan menghitung nilai \(\lambda\) (Lambda) optimalnya.
# Plot Box-Cox untuk melihat posisi lambda
boxcox(lm(train_data ~ 1), lambda = seq(-2, 6, 0.01))
# Menghitung Lambda optimal secara matematis
lambda_opt <- BoxCox.lambda(train_data)
cat("Nilai Lambda Optimal: ", lambda_opt, "\n")
## Nilai Lambda Optimal: 1.999924
Berdasarkan hasil uji Box-Cox, nilai \(\lambda\) optimal adalah 1.9999242. Karena nilai tersebut tidak sama dengan 1, maka data perlu ditransformasi untuk menstabilkan varian. Dengan hasil transformasi sebagai berikut.
# Melakukan transformasi Box-Cox pada data training
train_trans <- BoxCox(train_data, lambda = lambda_opt)
# Plot data hasil transformasi
autoplot(train_trans) +
ggtitle("Plot Runtun Waktu Data Hasil Transformasi Box-Cox") +
theme_minimal()
Setelah varian stabil, kita perlu memastikan data stasioner dalam rata-rata menggunakan uji Augmented Dickey-Fuller (ADF)
# Uji ADF pada data transformasi
adf_trans <- adf.test(train_trans)
print(adf_trans)
##
## Augmented Dickey-Fuller Test
##
## data: train_trans
## Dickey-Fuller = -2.399, Lag order = 3, p-value = 0.4169
## alternative hypothesis: stationary
Karena data hasil transformasi belum stasioner dalam mean (p-value = 0.4168766 > 0.05), maka perlu dilakukan proses differencing orde 1 untuk menstabilkan rata-ratanya. Dengan hasil differencing didapatkan sebagai berikut.
# Melakukan differencing orde 1 (d=1)
train_diff <- diff(train_trans, differences = 1)
# Plot data setelah differencing untuk melihat kestabilan secara visual
autoplot(train_diff) +
ggtitle("Plot Runtun Waktu Data AMRT Setelah Differencing Orde 1") +
theme_minimal()
# Uji formal menggunakan Augmented Dickey-Fuller (ADF) Test
adf_diff <- adf.test(train_diff)
print(adf_diff)
##
## Augmented Dickey-Fuller Test
##
## data: train_diff
## Dickey-Fuller = -3.5986, Lag order = 3, p-value = 0.0461
## alternative hypothesis: stationary
Setelah dilakukan differencing, secara formal didapat nilai p-value = 0.0460958 < 0.05 dimana nilai ini menunjukkan bahwa data telah stasioner dalam mean.
Setelah data stasioner melalui transformasi Box-Cox dan differencing orde 1 (\(d=1\)), langkah selanjutnya adalah menentukan orde Autoregressive (\(p\)) dan Moving Average (\(q\)) dengan mengamati plot korelasi.
# Menampilkan plot ACF dan PACF secara berdampingan
ggtsdisplay(train_diff, main = "Plot ACF dan PACF Data AMRT (Stasioner)")
Berdasarkan pengamatan pada plot ACF dan PACF di atas:PACF:
Kandidat model yang akan diuji adalah ARIMA(1,1,0), ARIMA(0,1,1), dan ARIMA(1,1,1).
Tahap ini bertujuan untuk menentukan apakah parameter model ARIMA yang diestimasi memiliki pengaruh signifikan. Kita akan menguji ketiga kandidat model yang telah diidentifikasi.
# 1. Uji Model ARIMA(1,1,0)
mod1 <- Arima(train_data, order = c(1,1,0), lambda = lambda_opt, include.constant = FALSE)
cat("--- Signifikansi Parameter ARIMA(1,1,0) ---\n")
## --- Signifikansi Parameter ARIMA(1,1,0) ---
coeftest(mod1)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.35895 0.14741 -2.4351 0.01489 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 2. Uji Model ARIMA(0,1,1)
mod2 <- Arima(train_data, order = c(0,1,1), lambda = lambda_opt, include.constant = FALSE)
cat("\n--- Signifikansi Parameter ARIMA(0,1,1) ---\n")
##
## --- Signifikansi Parameter ARIMA(0,1,1) ---
coeftest(mod2)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.47694 0.17226 -2.7686 0.005629 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 3. Uji Model ARIMA(1,1,1)
mod3 <- Arima(train_data, order = c(1,1,1), lambda = lambda_opt, include.constant = FALSE)
cat("\n--- Signifikansi Parameter ARIMA(1,1,1) ---\n")
##
## --- Signifikansi Parameter ARIMA(1,1,1) ---
coeftest(mod3)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.37615 0.25782 1.4590 0.1446
## ma1 -0.81955 0.17669 -4.6385 3.51e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan hasil estimasi yang dilakukan pada ketiga kandidat model, didapatkan ringkasan sebagai berikut:
Oleh karena itu, model yang layak untuk dilanjutkan ke tahap pengujian berikutnya adalah ARIMA(1,1,0) dan ARIMA(0,1,1). Untuk menentukan model terbaik di antara keduanya, kita membandingkan nilai AIC (Akaike Information Criterion).
Tahap ini bertujuan untuk memastikan residual dari kedua kandidat model yang signifikan (ARIMA(1,1,0) dan ARIMA(0,1,1)) telah memenuhi asumsi White Noise, yaitu berdistribusi normal, tidak ada autokorelasi (independen), dan variannya konstan (homoskedastis).
# 1. Mengambil residual masing-masing model
res_mod1 <- residuals(mod1) # ARIMA(1,1,0)
res_mod2 <- residuals(mod2) # ARIMA(0,1,1)
# 2. Fungsi untuk menghitung p-value semua uji
hitung_asumsi <- function(res) {
jb_p <- jarque.bera.test(res)$p.value
lb_p <- Box.test(res, type = "Ljung-Box", lag = 10)$p.value
arch_p <- ArchTest(res, lags = 1)$p.value
return(c(Normalitas = jb_p, Independensi = lb_p, Homoskedastisitas = arch_p))
}
# 3. Membuat Tabel Perbandingan
tabel_asumsi <- data.frame(
Asumsi = c("Normalitas (Jarque-Bera)", "Independensi (Ljung-Box)", "Homoskedastisitas (ARCH)"),
ARIMA_1_1_0 = hitung_asumsi(res_mod1),
ARIMA_0_1_1 = hitung_asumsi(res_mod2)
)
kable(tabel_asumsi, digits = 5, caption = "Perbandingan P-Value Uji Asumsi Kedua Kandidat Model")
| Asumsi | ARIMA_1_1_0 | ARIMA_0_1_1 | |
|---|---|---|---|
| Normalitas | Normalitas (Jarque-Bera) | 0.09404 | 0.02167 |
| Independensi | Independensi (Ljung-Box) | 0.96737 | 0.97565 |
| Homoskedastisitas.Chi-squared | Homoskedastisitas (ARCH) | 0.98852 | 0.87400 |
Berdasarkan tabel perbandingan uji asumsi di atas, diperoleh hasil sebagai berikut:
Berdasarkan hasil uji diagnostik residual, model ARIMA(0,1,1) dinyatakan gugur karena gagal memenuhi asumsi normalitas. Sebaliknya, model ARIMA(1,1,0) berhasil memenuhi seluruh asumsi White Noise. Oleh karena itu, model ARIMA(1,1,0) secara mutlak ditetapkan sebagai model terbaik dan akan digunakan pada tahap peramalan (forecasting).
Setelah mendapatkan model terbaik yang memenuhi semua asumsi kelayakan, yaitu ARIMA(1,1,0), langkah selanjutnya adalah menggunakan model tersebut untuk meramalkan harga saham AMRT pada 10 periode ke depan. Hasil peramalan ini akan dibandingkan dengan data aktual (testing data pada observasi ke-41 hingga 50) untuk mengevaluasi tingkat akurasi model.
# 1. Melakukan peramalan 10 hari ke depan
fc_final <- forecast(mod1, h = 10)
# 2. Membuat tabel hasil evaluasi beserta perhitungan metrik error
hasil_evaluasi <- data.frame(
Data_Ke = 41:50,
Aktual = as.numeric(test_data),
Ramalan = as.numeric(fc_final$mean)
) %>%
mutate(
Error = Aktual - Ramalan,
APE = abs(Error / Aktual) * 100,
SAPE = (abs(Error) / ((Aktual + Ramalan) / 2)) * 100,
SE = Error^2
)
# 3. Menghitung nilai rata-rata metrik evaluasi
mape_val <- mean(hasil_evaluasi$APE)
smape_val <- mean(hasil_evaluasi$SAPE)
rmse_val <- sqrt(mean(hasil_evaluasi$SE))
# 4. Menampilkan tabel perbandingan (Aktual vs Ramalan dan Error)
kable(hasil_evaluasi[, 1:4], digits = 2, caption = "Tabel Perbandingan Harga Aktual vs Ramalan")
| Data_Ke | Aktual | Ramalan | Error |
|---|---|---|---|
| 41 | 2740 | 2785.71 | -45.71 |
| 42 | 2730 | 2790.85 | -60.85 |
| 43 | 2720 | 2789.00 | -69.00 |
| 44 | 2720 | 2789.66 | -69.66 |
| 45 | 2710 | 2789.43 | -79.43 |
| 46 | 2720 | 2789.51 | -69.51 |
| 47 | 2700 | 2789.48 | -89.48 |
| 48 | 2740 | 2789.49 | -49.49 |
| 49 | 2720 | 2789.49 | -69.49 |
| 50 | 2730 | 2789.49 | -59.49 |
Untuk melihat pergerakan hasil peramalan secara visual dibandingkan dengan data historis dan data aktual, dapat dilihat pada plot berikut:
# Membuat plot peramalan vs aktual
autoplot(fc_final) +
autolayer(test_data, series = "Data Aktual") +
ggtitle("Plot Peramalan Harga Saham AMRT dengan ARIMA(1,1,0)") +
xlab("Waktu") + ylab("Harga Saham") +
theme_minimal()
Berdasarkan perhitungan evaluasi peramalan, diperoleh tingkat kesalahan
model sebagai berikut:
MAPE (Mean Absolute Percentage Error): 2.43%
SMAPE (Symmetric Mean Absolute Percentage Error): 2.4%
RMSE (Root Mean Squared Error): 67.36
Nilai MAPE yang berada di bawah 10% menunjukkan bahwa model ARIMA(1,1,0) memiliki kriteria akurasi yang Sangat Baik dalam memprediksi harga saham AMRT.
Berdasarkan serangkaian analisis runtun waktu yang telah dilakukan terhadap data harga saham Sumber Alfaria Trijaya (AMRT) periode 1 April - 26 Juni 2024, dapat ditarik beberapa kesimpulan sebagai berikut:
Data awal harga saham AMRT tidak stasioner dalam varian dan rata-rata. Kestabilan varian dicapai melalui transformasi Box-Cox dengan nilai \(\lambda = 1.99992\), sedangkan kestabilan rata-rata (mean) dicapai melalui proses diferensiasi orde pertama (\(d=1\)).
Identifikasi melalui plot ACF dan PACF serta pengujian parameter menghasilkan model ARIMA(1,1,0) tanpa konstanta sebagai model yang optimal. Parameter pada model ini terbukti signifikan (\(p\)-value \(< 0.05\)) dan residual model telah memenuhi seluruh asumsi kelayakan diagnostik (White Noise), yaitu berdistribusi normal, independen (tidak ada autokorelasi), dan homoskedastis (varian konstan).
Evaluasi akurasi peramalan pada 10 data testing menunjukkan performa prediksi yang sangat akurat dengan tingkat kesalahan MAPE sebesar 2.43%, SMAPE sebesar 2.4%, dan RMSE sebesar 67.36. Dengan tingkat kesalahan yang sangat kecil tersebut, model ARIMA(1,1,0) dinyatakan sangat layak dan direkomendasikan untuk digunakan dalam meramalkan pergerakan harga saham AMRT di masa mendatang.