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 agar hasil tetap sama
set.seed(456)
# Panjang data
n <- 200
# Parameter ARIMA(1,1,1)
# Dibuat berbeda dari contoh dosen
ar <- 0.5
ma <- 0.3
# Simulasi data
ts_arima <- arima.sim(
model = list(
order = c(1,1,1),
ar = ar,
ma = ma
),
n = n
)
# Plot data time series
ts.plot(
ts_arima,
main = "Simulasi Data ARIMA(1,1,1)"
)
## 2. Plot ACF dan PACF Awal
acf(ts_arima)
pacf(ts_arima)
#Interpretasi: #Digunakan untuk melihat pola awal data #dan membantu
identifikasi model awal
adf.test(ts_arima)
##
## Augmented Dickey-Fuller Test
##
## data: ts_arima
## Dickey-Fuller = -2.5036, Lag order = 5, p-value = 0.3652
## alternative hypothesis: stationary
#Interpretasi: #Jika p-value > 0.05 #maka data belum stasioner #sehingga perlu differencing
diff1 <- diff(ts_arima)
#Karena model awal ARIMA(1,1,1) #maka differencing dilakukan 1 kali
acf(diff1)
pacf(diff1)
## 6. 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 = -5.0984, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
#Interpretasi: #Jika p-value < 0.05 #maka data sudah stasioner #dan siap dimodelkan
data.ts <- ts(diff1)
head(data.ts)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 1.0461694 1.9051402 2.9031167 0.5069317 1.7685807 3.2054335
#Karena differencing sudah dilakukan manual, #maka pemodelan berikutnya menggunakan #ARIMA(p,0,q)
acf(data.ts)
pacf(data.ts)
#EACF digunakan untuk membantu #menentukan kandidat model
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 o
## 1 x x x x o o o o o o o o o o
## 2 x o x 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 x x o o o o o o o o o o o
## 5 x o o x o o o o o o o o o o
## 6 x o o x o o o o o o o o o o
## 7 x o o x o o o o o o o o o o
#Berdasarkan ACF, PACF, dan EACF #kandidat model yang mungkin adalah:
#1. ARIMA(1,0,1) #2. ARIMA(1,0,2) #3. ARIMA(0,0,1) #4. ARIMA(2,0,2)
# auto.arima pada data hasil differencing
auto.arima(data.ts)
## Series: data.ts
## ARIMA(3,0,3) with zero mean
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 ma3
## 1.6194 -1.4098 0.3988 -0.8145 0.5984 0.2430
## s.e. 0.1650 0.2109 0.1362 0.1716 0.1593 0.1299
##
## sigma^2 = 0.9429: log likelihood = -275.43
## AIC=564.86 AICc=565.44 BIC=587.95
# auto.arima pada data asli
auto.arima(ts_arima)
## Series: ts_arima
## ARIMA(3,1,3)
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 ma3
## 1.6192 -1.4093 0.3985 -0.8142 0.5980 0.2433
## s.e. 0.1650 0.2112 0.1363 0.1716 0.1594 0.1298
##
## sigma^2 = 0.9429: log likelihood = -275.43
## AIC=564.86 AICc=565.44 BIC=587.95
#Digunakan sebagai pembanding #dengan model manual yang dipilih
#-------------------------------
# Model 1 : ARIMA(1,0,1)
#-------------------------------
model1 <- arima(
data.ts,
order = c(1,0,1),
method = "ML"
)
model1
##
## Call:
## arima(x = data.ts, order = c(1, 0, 1), method = "ML")
##
## Coefficients:
## ar1 ma1 intercept
## 0.5629 0.2568 0.0375
## s.e. 0.0813 0.0950 0.1971
##
## sigma^2 estimated as 0.953: log likelihood = -279.33, aic = 564.66
AIC(model1)
## [1] 566.6602
#-------------------------------
# Model 2 : ARIMA(1,0,2)
#-------------------------------
model2 <- arima(
data.ts,
order = c(1,0,2),
method = "ML"
)
model2
##
## Call:
## arima(x = data.ts, order = c(1, 0, 2), method = "ML")
##
## Coefficients:
## ar1 ma1 ma2 intercept
## 0.5237 0.2932 0.0537 0.0357
## s.e. 0.1161 0.1225 0.1031 0.1938
##
## sigma^2 estimated as 0.9517: log likelihood = -279.2, aic = 566.4
AIC(model2)
## [1] 568.3975
#-------------------------------
# Model 3 : ARIMA(0,0,1)
#-------------------------------
model3 <- arima(
data.ts,
order = c(0,0,1),
method = "ML"
)
model3
##
## Call:
## arima(x = data.ts, order = c(0, 0, 1), method = "ML")
##
## Coefficients:
## ma1 intercept
## 0.6503 0.0240
## s.e. 0.0451 0.1226
##
## sigma^2 estimated as 1.109: log likelihood = -294.38, aic = 592.76
AIC(model3)
## [1] 594.7621
#-------------------------------
# Model 4 : ARIMA(2,0,2)
#-------------------------------
model4 <- arima(
data.ts,
order = c(2,0,2),
method = "ML"
)
model4
##
## Call:
## arima(x = data.ts, order = c(2, 0, 2), method = "ML")
##
## Coefficients:
## ar1 ar2 ma1 ma2 intercept
## 1.1446 -0.4362 -0.3358 0.0355 0.0260
## s.e. 0.2412 0.1526 0.2436 0.1481 0.1643
##
## sigma^2 estimated as 0.9406: log likelihood = -278.05, aic = 566.09
AIC(model4)
## [1] 568.0948
AIC(model1)
## [1] 566.6602
AIC(model2)
## [1] 568.3975
AIC(model3)
## [1] 594.7621
AIC(model4)
## [1] 568.0948
#Model dengan nilai AIC terkecil dipilih sebagai model terbaik
#Model pembangkitan awal: ARIMA(1,1,1) #Model terbaik hasil pemodelan: Model l1 #Model terbaik hasil pemodelan: ARIMA(1,0,1)
#Jika model terbaik berbeda dari model pembangkitan awal, hal ini dapat terjadi karena: #1. Adanya unsur random dalam proses simulasi data #2. Ukuran sampel yang terbatas dapat memengaruhi estimasi parameter #3. Karakteristik data hasil simulasi tidak selalu identik dengan model teoritis #4. Estimasi parameter ARIMA tidak selalu menghasilkan model yang sama dengan model awal #5. auto.arima dan AIC memilih model terbaik berdasarkan data aktual, bukan berdasarkan model pembangkitan
#Kesimpulan akhir: Data yang dibangkitkan dengan model, ARIMA(1,1,1) belum tentu menghasilkan model terbaik yang sama setelah proses identifikasi dan estimasi dilakukan.