# LOAD LIBRARY
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. SIMULASI DATA ARIMA(1,1,1)
# Set seed agar hasil replikasi sama
set.seed(456)
# Banyak data
n <- 200
# Parameter berbeda dari contoh
ar <- 0.4
ma <- 0.6
# Simulasi data
ts_arima <- arima.sim(
model = list(
order = c(1,1,1),
ar = ar,
ma = ma
),
n = n
)
# Plot data hasil simulasi
ts.plot(ts_arima,
main = "Simulasi Data ARIMA(1,1,1)",
col = "blue")

# INTERPRETASI:
# Data hasil simulasi masih menunjukkan pola fluktuatif
# dan diduga belum stasioner karena terdapat differencing
# orde 1 pada model ARIMA(1,1,1)
# 2. IDENTIFIKASI AWAL ACF & PACF
acf(ts_arima,
main = "ACF Data Awal")

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

# INTERPRETASI:
# ACF menurun secara lambat (slow decay)
# PACF belum menunjukkan cut off yang jelas
# sehingga data diduga belum stasioner
# 3. UJI STASIONERITAS ADF
adf_awal <- adf.test(ts_arima)
adf_awal
##
## Augmented Dickey-Fuller Test
##
## data: ts_arima
## Dickey-Fuller = -2.3894, Lag order = 5, p-value = 0.413
## alternative hypothesis: stationary
# INTERPRETASI:
# Jika p-value > 0.05 maka data tidak stasioner
# sehingga perlu dilakukan differencing
# 4. DIFFERENCING
diff1 <- diff(ts_arima)
ts.plot(diff1,
main = "Data Setelah Differencing",
col = "pink")

# INTERPRETASI:
# Differencing dilakukan sebanyak 1 kali
# karena model awal memiliki d = 1
# 5. ACF & PACF SETELAH DIFFERENCING
acf(diff1,
main = "ACF Setelah Differencing")

pacf(diff1,
main = "PACF Setelah Differencing")

# INTERPRETASI:
# Setelah differencing pola ACF dan PACF
# menjadi lebih stabil sehingga kandidat
# model mulai dapat diidentifikasi
# 6. UJI ADF SETELAH DIFFERENCING
adf_diff <- adf.test(diff1)
## Warning in adf.test(diff1): p-value smaller than printed p-value
adf_diff
##
## Augmented Dickey-Fuller Test
##
## data: diff1
## Dickey-Fuller = -5.0485, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
# INTERPRETASI:
# Jika p-value < 0.05 maka data sudah stasioner
# 7. UBAH MENJADI DATA TS
data.ts <- ts(diff1)
head(data.ts)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 1.7418301 0.1248623 0.8115561 2.1000072 3.0871674 0.7864189
# 8. MENENTUKAN KANDIDAT MODEL
acf(data.ts)

pacf(data.ts)

eacf(data.ts)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x o o o o o o o o o x x x
## 1 x x o x o o o o o o o o o o
## 2 x x x o o o o o o o o o o o
## 3 x x x x o o o o o o o o o o
## 4 x x x x o o o o o o o o o o
## 5 o x x x x o o o o o o o o o
## 6 o x x x o x o o o o o o o o
## 7 o x x o o o o o o o o o o o
# Misal kandidat model:
# ARIMA(1,1,1)
# ARIMA(1,1,2)
# ARIMA(2,1,1)
# ARIMA(2,1,2)
# 9. AUTO ARIMA
auto_model <- auto.arima(ts_arima)
auto_model
## Series: ts_arima
## ARIMA(1,1,1)
##
## Coefficients:
## ar1 ma1
## 0.4593 0.5656
## s.e. 0.0801 0.0804
##
## sigma^2 = 0.969: log likelihood = -280.17
## AIC=566.35 AICc=566.47 BIC=576.24
# Digunakan sebagai pembanding model otomatis
# 10. ESTIMASI MODEL KANDIDAT
model1 <- arima(ts_arima,
order = c(1,1,1),
method = "ML")
model2 <- arima(ts_arima,
order = c(1,1,2),
method = "ML")
model3 <- arima(ts_arima,
order = c(2,1,1),
method = "ML")
model4 <- arima(ts_arima,
order = c(2,1,2),
method = "ML")
# 11. MEMBANDINGKAN NILAI AIC
AIC_table <- data.frame(
Model = c("ARIMA(1,1,1)",
"ARIMA(1,1,2)",
"ARIMA(2,1,1)",
"ARIMA(2,1,2)"),
AIC = c(model1$aic,
model2$aic,
model3$aic,
model4$aic)
)
AIC_table
## Model AIC
## 1 ARIMA(1,1,1) 564.3457
## 2 ARIMA(1,1,2) 566.2587
## 3 ARIMA(2,1,1) 566.1541
## 4 ARIMA(2,1,2) 567.7088
# Model terbaik
best_model <- AIC_table[which.min(AIC_table$AIC), ]
best_model
## Model AIC
## 1 ARIMA(1,1,1) 564.3457
# KESIMPULAN
cat("Model pembangkitan awal adalah ARIMA(1,1,1)\n")
## Model pembangkitan awal adalah ARIMA(1,1,1)
cat("Dengan parameter AR = 0.4 dan MA = 0.6\n\n")
## Dengan parameter AR = 0.4 dan MA = 0.6
cat("Setelah dilakukan identifikasi, uji stasioneritas,\n")
## Setelah dilakukan identifikasi, uji stasioneritas,
cat("differencing, serta perbandingan AIC,\n")
## differencing, serta perbandingan AIC,
cat("diperoleh model terbaik berdasarkan AIC terkecil.\n\n")
## diperoleh model terbaik berdasarkan AIC terkecil.
cat("Model terbaik dapat sama atau berbeda\n")
## Model terbaik dapat sama atau berbeda
cat("dengan model pembangkitan awal.\n\n")
## dengan model pembangkitan awal.
cat("Jika berbeda, penyebabnya antara lain:\n")
## Jika berbeda, penyebabnya antara lain:
cat("1. Adanya unsur random pada simulasi data\n")
## 1. Adanya unsur random pada simulasi data
cat("2. Ukuran sampel terbatas\n")
## 2. Ukuran sampel terbatas
cat("3. Pola ACF dan PACF tidak selalu jelas\n")
## 3. Pola ACF dan PACF tidak selalu jelas
cat("4. AIC memilih model paling efisien\n")
## 4. AIC memilih model paling efisien
cat(" berdasarkan data hasil simulasi.\n")
## berdasarkan data hasil simulasi.