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
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.
# 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.
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.
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.
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.
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
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
# 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
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
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
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
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.