#=========================================================
# SIMULASI DAN PEMODELAN ARIMA(1,1,1)
#=========================================================

# Memanggil package
library(forecast)
## Warning: package 'forecast' was built under R version 4.5.3
library(tseries)
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
#=========================================================
# 1. MEMBANGKITKAN DATA ARIMA(1,1,1)
#=========================================================

set.seed(123)

data_sim <- arima.sim(
  n = 200,
  model = list(
    order = c(1,1,1),
    ar = 0.7,
    ma = -0.4
  )
)

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

#=========================================================
# 2. IDENTIFIKASI AWAL
#=========================================================

par(mfrow=c(1,2))
acf(data_sim, main="ACF Data Awal")
pacf(data_sim, main="PACF Data Awal")

par(mfrow=c(1,1))

#=========================================================
# 3. UJI STASIONERITAS DATA AWAL
#=========================================================

cat("ADF TEST DATA AWAL\n")
## ADF TEST DATA AWAL
adf_awal <- adf.test(data_sim)
print(adf_awal)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data_sim
## Dickey-Fuller = -2.4799, Lag order = 5, p-value = 0.3751
## alternative hypothesis: stationary
#=========================================================
# 4. DIFFERENCING ORDE 1
#=========================================================

data_diff <- diff(data_sim)

plot.ts(data_diff,
        main="Data Setelah Differencing",
        ylab="Nilai",
        xlab="Waktu")

#=========================================================
# 5. UJI STASIONERITAS SETELAH DIFFERENCING
#=========================================================

cat("\nADF TEST SETELAH DIFFERENCING\n")
## 
## ADF TEST SETELAH DIFFERENCING
adf_diff <- adf.test(data_diff)
## Warning in adf.test(data_diff): p-value smaller than printed p-value
print(adf_diff)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data_diff
## Dickey-Fuller = -5.2211, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
#=========================================================
# 6. IDENTIFIKASI ACF DAN PACF SETELAH DIFFERENCING
#=========================================================

par(mfrow=c(1,2))
acf(data_diff, main="ACF Setelah Differencing")
pacf(data_diff, main="PACF Setelah Differencing")

par(mfrow=c(1,1))

#=========================================================
# 7. MEMBENTUK KANDIDAT MODEL
#=========================================================

model1 <- arima(data_sim, order=c(1,1,0))
model2 <- arima(data_sim, order=c(0,1,1))
model3 <- arima(data_sim, order=c(1,1,1))
model4 <- arima(data_sim, order=c(2,1,1))
model5 <- arima(data_sim, order=c(1,1,2))

#=========================================================
# 8. MEMBANDINGKAN NILAI AIC
#=========================================================

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

print(hasil_aic)
##          Model      AIC
## 1 ARIMA(1,1,0) 549.1614
## 2 ARIMA(0,1,1) 551.0231
## 3 ARIMA(1,1,1) 548.3375
## 4 ARIMA(2,1,1) 550.2827
## 5 ARIMA(1,1,2) 550.2547
#=========================================================
# 9. MENENTUKAN MODEL TERBAIK
#=========================================================

model_terbaik <- hasil_aic[which.min(hasil_aic$AIC), ]

cat("\nMODEL TERBAIK BERDASARKAN AIC\n")
## 
## MODEL TERBAIK BERDASARKAN AIC
print(model_terbaik)
##          Model      AIC
## 3 ARIMA(1,1,1) 548.3375

#Kesimpulan #Berdasarkan hasil simulasi data time series menggunakan model ARIMA(1,1,1) dengan parameter AR(1)=0,7 dan MA(1)=-0,4, diperoleh bahwa data awal belum stasioner berdasarkan hasil ADF Test dengan p-value sebesar 0,3751. Setelah dilakukan differencing orde pertama, data menjadi stasioner dengan p-value sebesar 0,01. Berdasarkan identifikasi melalui plot ACF dan PACF diperoleh beberapa kandidat model, yaitu ARIMA(1,1,0), ARIMA(0,1,1), ARIMA(1,1,1), ARIMA(2,1,1), dan ARIMA(1,1,2). Pemilihan model terbaik menggunakan kriteria AIC menunjukkan bahwa ARIMA(1,1,1) memiliki nilai AIC terkecil sebesar 548,3375. Model terbaik tersebut sama dengan model yang digunakan pada proses pembangkitan data, sehingga dapat disimpulkan bahwa proses pemodelan berhasil mengidentifikasi struktur data yang sebenarnya.