library(tseries)
## Warning: package 'tseries' was built under R version 4.4.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(TSA)
## Warning: package 'TSA' was built under R version 4.4.3
## 
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
## 
##     acf, arima
## The following object is masked from 'package:utils':
## 
##     tar
library(forecast)
## Warning: package 'forecast' was built under R version 4.4.3
## Registered S3 methods overwritten by 'forecast':
##   method       from
##   fitted.Arima TSA 
##   plot.Arima   TSA

1. PEMBANGKITAN DATA

set.seed(456)

# Panjang data
n <- 200

# Parameter berbeda dari contoh
ar <- 0.5
ma <- -0.8

# Simulasi data ARIMA(1,1,1)
ts_arima <- arima.sim(
  model = list(order = c(1,1,1), ar = ar, ma = ma),
  n = n
)

# Plot data
ts.plot(ts_arima,
        main = "Simulasi Data ARIMA(1,1,1)",
        ylab = "Nilai",
        xlab = "Waktu")

Pada tahap ini dilakukan simulasi pembangkitan data deret waktu menggunakan model ARIMA(1,1,1) dengan parameter:

AR(1) = 0,5 MA(1) = −0,8 Jumlah observasi = 200

Data dibangkitkan secara acak menggunakan fungsi arima.sim(). Plot time series menunjukkan pola fluktuasi yang tidak stabil terhadap waktu, di mana data masih memperlihatkan adanya tren sehingga belum dapat dikatakan stasioner.

2. IDENTIFIKASI AWAL

# Plot ACF
acf(ts_arima, main="ACF Data Awal")

# Plot PACF
pacf(ts_arima, main="PACF Data Awal")

Pola ini mengindikasikan perlunya proses differencing agar data memenuhi asumsi stasioneritas.

3. UJI KESTASIONERAN

adf.test(ts_arima)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ts_arima
## Dickey-Fuller = -2.9183, Lag order = 5, p-value = 0.1915
## alternative hypothesis: stationary
# Jika p-value > 0.05 -> tidak stasioner

Data belum stasioner sehingga perlu dilakukan differencing.

4. DIFFERENCING

diff1 <- diff(ts_arima)

# Plot differencing
ts.plot(diff1, main="Data Setelah Differencing")

# ACF setelah differencing
acf(diff1, main="ACF Setelah Differencing")

# PACF setelah differencing
pacf(diff1, main="PACF Setelah Differencing")

Proses differencing bertujuan menghilangkan tren pada data. Setelah differencing, pola grafik time series menjadi lebih stabil di sekitar rata-rata. Setelah differencing, spike pada ACF mulai terpotong pada lag tertentu,hal ini menunjukkan komponen MA.PACF juga menunjukkan cutoff pada beberapa lag awal, hal ini menunjukkan kemungkinan adanya komponen AR.

5. UJI KESTASIONERAN SETELAH DIFFERENCING

adf.test(diff1)
## Warning in adf.test(diff1): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff1
## Dickey-Fuller = -8.6039, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
# Jika p-value < 0.05 -> data stasioner

Differencing orde 1 berhasil membuat data stasioner.

6. UBAH KE DATA TIME SERIES

data.ts <- ts(diff1)

head(data.ts)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]  1.4113475  0.6455221  1.1857087 -2.1710938  2.0144537  1.1862779

7. KANDIDAT MODEL

acf(data.ts)

pacf(data.ts)

# EACF
eacf(data.ts)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o x o o o o o o o  o  o  o 
## 1 x o o o o o o o o o o  o  o  o 
## 2 x o o o o o o o o o o  o  o  o 
## 3 x x x o o o o o o o o  o  o  o 
## 4 x o o x o o o o o o o  o  o  o 
## 5 x x o x o o o o o o o  o  o  o 
## 6 x o x x o o o o o o o  o  o  o 
## 7 o x x o o o o o o o o  o  o  o
# Auto ARIMA
auto.arima(data.ts)
## Series: data.ts 
## ARIMA(1,0,1) with zero mean 
## 
## Coefficients:
##          ar1      ma1
##       0.6314  -0.8969
## s.e.  0.0859   0.0479
## 
## sigma^2 = 0.9552:  log likelihood = -278.43
## AIC=562.87   AICc=562.99   BIC=572.76

8. PEMODELAN KANDIDAT

# Kandidat 1
model1 <- arima(data.ts, order=c(1,1,1), method="ML")
model1
## 
## Call:
## arima(x = data.ts, order = c(1, 1, 1), method = "ML")
## 
## Coefficients:
##           ar1      ma1
##       -0.2020  -1.0000
## s.e.   0.0698   0.0152
## 
## sigma^2 estimated as 1.012:  log likelihood = -286.43,  aic = 576.87
# Kandidat 2
model2 <- arima(data.ts, order=c(1,1,2), method="ML")
model2
## 
## Call:
## arima(x = data.ts, order = c(1, 1, 2), method = "ML")
## 
## Coefficients:
##          ar1      ma1     ma2
##       0.6526  -1.9001  0.9027
## s.e.  0.1015   0.0618  0.0633
## 
## sigma^2 estimated as 0.9585:  log likelihood = -281.14,  aic = 568.28
# Kandidat 3
model3 <- arima(data.ts, order=c(2,0,2), method="ML")
model3
## 
## Call:
## arima(x = data.ts, order = c(2, 0, 2), method = "ML")
## 
## Coefficients:
##          ar1     ar2      ma1      ma2  intercept
##       0.3769  0.2122  -0.6745  -0.2162    -0.0068
## s.e.  0.5392  0.3419   0.5404   0.4845     0.0193
## 
## sigma^2 estimated as 0.942:  log likelihood = -278.06,  aic = 566.11
# Kandidat 4
model4 <- arima(data.ts, order=c(0,1,1), method="ML")
model4
## 
## Call:
## arima(x = data.ts, order = c(0, 1, 1), method = "ML")
## 
## Coefficients:
##           ma1
##       -1.0000
## s.e.   0.0142
## 
## sigma^2 estimated as 1.057:  log likelihood = -290.52,  aic = 583.05

9. MEMBANDINGKAN NILAI AIC

aic_values <- data.frame(
  Model = c("ARIMA(1,1,1)",
            "ARIMA(1,1,2)",
            "ARIMA(2,0,2)",
            "ARIMA(0,1,1)"),
  AIC = c(model1$aic,
          model2$aic,
          model3$aic,
          model4$aic)
)

print(aic_values)
##          Model      AIC
## 1 ARIMA(1,1,1) 576.8693
## 2 ARIMA(1,1,2) 568.2790
## 3 ARIMA(2,0,2) 566.1130
## 4 ARIMA(0,1,1) 583.0469
# Model terbaik
best_model <- aic_values[which.min(aic_values$AIC), ]
print(best_model)
##          Model     AIC
## 3 ARIMA(2,0,2) 566.113

10. AUTO ARIMA PADA DATA ASLI

auto.arima(ts_arima)
## Series: ts_arima 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1      ma1
##       0.6314  -0.8969
## s.e.  0.0859   0.0479
## 
## sigma^2 = 0.9552:  log likelihood = -278.43
## AIC=562.87   AICc=562.99   BIC=572.76

11. DIAGNOSTIK MODEL TERBAIK

checkresiduals(model3)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,0,2) with non-zero mean
## Q* = 8.5741, df = 6, p-value = 0.199
## 
## Model df: 4.   Total lags used: 10

12. FORECAST

best_final <- auto.arima(ts_arima)

summary(best_final)
## Series: ts_arima 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1      ma1
##       0.6314  -0.8969
## s.e.  0.0859   0.0479
## 
## sigma^2 = 0.9552:  log likelihood = -278.43
## AIC=562.87   AICc=562.99   BIC=572.76
## 
## Training set error measures:
##                        ME     RMSE       MAE      MPE     MAPE    MASE
## Training set 4.021268e-05 0.970021 0.7907551 24.78494 75.62453 0.94491
##                     ACF1
## Training set -0.02220327
# Forecast 20 periode ke depan
forecast_best <- forecast(best_final, h=20)

# Plot forecast
plot(forecast_best,
     main="Forecast 20 Periode ke Depan",
     xlab="Waktu",
     ylab="Nilai")

# Tampilkan hasil forecast
forecast_best
##     Point Forecast      Lo 80    Hi 80      Lo 95    Hi 95
## 202       1.668348  0.4158339 2.920862 -0.2472071 3.583903
## 203       1.422123 -0.1319389 2.976184 -0.9546094 3.798855
## 204       1.266657 -0.4419025 2.975216 -1.3463590 3.879672
## 205       1.168496 -0.6349903 2.971982 -1.5896982 3.926690
## 206       1.106517 -0.7633194 2.976354 -1.7531511 3.966186
## 207       1.067384 -0.8537151 2.988483 -1.8706836 4.005452
## 208       1.042676 -0.9211590 3.006510 -1.9607502 4.046101
## 209       1.027075 -0.9744105 3.028560 -2.0339327 4.088082
## 210       1.017224 -1.0187363 3.053185 -2.0965086 4.130957
## 211       1.011005 -1.0573594 3.079369 -2.1522851 4.174294
## 212       1.007078 -1.0922756 3.106431 -2.2036061 4.217761
## 213       1.004598 -1.1247310 3.133927 -2.2519298 4.261126
## 214       1.003033 -1.1555086 3.161574 -2.2981713 4.304237
## 215       1.002044 -1.1851034 3.189192 -2.3429094 4.346998
## 216       1.001420 -1.2138305 3.216671 -2.3865133 4.389353
## 217       1.001026 -1.2418921 3.243944 -2.4292212 4.431273
## 218       1.000777 -1.2694193 3.270974 -2.4711887 4.472743
## 219       1.000620 -1.2964985 3.297739 -2.5125195 4.513760
## 220       1.000521 -1.3231876 3.324229 -2.5532846 4.554326
## 221       1.000458 -1.3495268 3.350443 -2.5935337 4.594450

#Kesimpulan Berdasarkan hasil simulasi dan pemodelan time series, data berhasil dibangkitkan menggunakan model ARIMA(1,1,1) dengan parameter AR = 0,5 dan MA = −0,8.

Hasil uji stasioneritas awal menunjukkan bahwa data belum stasioner sehingga diperlukan differencing orde 1. Setelah differencing, data menjadi stasioner berdasarkan hasil uji ADF.

Melalui analisis ACF, PACF, EACF, dan perbandingan nilai AIC, diperoleh model terbaik yaitu ARIMA(2,0,2).

Model terbaik hasil estimasi tidak selalu sama dengan model pembangkitan. Perbedaan ini disebabkan oleh unsur acak pada proses simulasi, keterbatasan jumlah data, serta karakteristik estimasi parameter.