library(forecast)
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(TSA)
## Registered S3 methods overwritten by 'TSA':
## method from
## fitted.Arima forecast
## plot.Arima forecast
##
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
##
## acf, arima
## The following object is masked from 'package:utils':
##
## tar
Data digenerate sebanyank \(200\), kemudian \(50\) data pertama dihapus sehingga data yang digunakan data ke \(51-200\) untuk dianalisis
set.seed(123)
n_total <- 200
phi <- c(0.5, -0.7)
theta <- c(-0.3, -0.5)
data <- arima.sim(n = n_total,
model = list(ar = phi, ma = theta),
sd = sqrt(1.18))
# Buang 50 data pertama
data <- data[51:200]
ts_data <- ts(data)
# Plot manual
plot(ts_data, type="l", col="blue",
main="Time Series Data",
ylab="Y_t", xlab="Waktu")
xx
train_size <- 120
train <- ts_data[1:train_size]
test <- ts_data[(train_size+1):150]
plot(train, type="l", col="blue", main="Train Data")
lines(test, col="red")
legend("topleft", legend=c("Train","Test"),
col=c("blue","red"), lty=1)
untuk menguji kestasioneran data dilakukan dengan uji ADF
adf.test(train)
## Warning in adf.test(train): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: train
## Dickey-Fuller = -7.7141, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
acf(train, lag.max = 20, col = "blue")
Plot ACF menunjukkan korelasi yang signifikan pada lag 2 dan 3 secara
negatif, serta lag 4 dan 5 secara positif. Karena pola korelasi terputus
(cuts off) secara signifikan setelah lag-lag awal, hal ini
mengindikasikan bahwa model deret waktu tersebut memiliki komponen
Moving Average (MA).”
pacf(train, lag.max = 20, col = "blue")
batas signifikansi (biasanya selang kepercayaan 95%). Jika batang
(spike) melewati garis ini, maka korelasi pada lag tersebut dianggap
signifikan secara statistik.
eacf(train)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x x x o x o x o o x o x
## 1 x x x x x o x o x o o x o x
## 2 o x o x o o o o o o o o o o
## 3 x x o x x o o o o o o o o o
## 4 x x o x o o o o o o o o o o
## 5 o x o x o o o o o o o o o o
## 6 x x x o x o o o o o o o o o
## 7 x x x o x x o o o o o o o o
#ARIMA(0,0,2)
arima002 <- arima(train, order = c(0,0,2), include.mean = TRUE, method = "ML")
arima002
##
## Call:
## arima(x = train, order = c(0, 0, 2), include.mean = TRUE, method = "ML")
##
## Coefficients:
## ma1 ma2 intercept
## -0.0284 -0.9716 -0.0106
## s.e. 0.0403 0.0395 0.0066
##
## sigma^2 estimated as 1.671: log likelihood = -204.23, aic = 414.47
#ARIMA(2,0,0)
arima200 <- arima(train, order = c(2,0,0), include.mean = TRUE, method = "ML")
arima200
##
## Call:
## arima(x = train, order = c(2, 0, 0), include.mean = TRUE, method = "ML")
##
## Coefficients:
## ar1 ar2 intercept
## 0.3910 -0.8121 -0.0192
## s.e. 0.0524 0.0507 0.0783
##
## sigma^2 estimated as 1.464: log likelihood = -194.23, aic = 394.45
#ARIMA(2,0,3)
arima203 <- arima(train, order = c(2,0,3), include.mean = TRUE, method = "ML")
arima203
##
## Call:
## arima(x = train, order = c(2, 0, 3), include.mean = TRUE, method = "ML")
##
## Coefficients:
## ar1 ar2 ma1 ma2 ma3 intercept
## 0.5185 -0.6840 -0.3934 -0.6457 0.1869 -0.0146
## s.e. 0.0996 0.0717 0.1318 0.1096 0.1455 0.0130
##
## sigma^2 estimated as 1.073: log likelihood = -176.58, aic = 365.15
AICKandidatModel <- c(411.38, 391.36, 362.06)
KndidatModelARIMA <- c("ARIMA(0,0,2)", "ARIMA(2,0,0)", "ARIMA(2,0,3)")
compmodelARIMA <- cbind(KndidatModelARIMA, AICKandidatModel)
colnames(compmodelARIMA) <- c("Kandidat Model", "Nilai AIC")
compmodelARIMA <- as.data.frame(compmodelARIMA)
compmodelARIMA
## Kandidat Model Nilai AIC
## 1 ARIMA(0,0,2) 411.38
## 2 ARIMA(2,0,0) 391.36
## 3 ARIMA(2,0,3) 362.06
ARIMA203diag <- stats::arima(train, order = c(2,0,3), method = "ML")
checkresiduals(ARIMA203diag)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,0,3) with non-zero mean
## Q* = 3.6216, df = 5, p-value = 0.6051
##
## Model df: 5. Total lags used: 10
sisaan <- arima203$residuals
# Uji formal normalitas data
ks.test(sisaan,"pnorm")
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: sisaan
## D = 0.0726, p-value = 0.5518
## alternative hypothesis: two-sided
# Uji nilai tengah sisaan
t.test(sisaan, mu = 0, alternative = "two.sided")
##
## One Sample t-test
##
## data: sisaan
## t = -0.078104, df = 119, p-value = 0.9379
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -0.1954599 0.1806253
## sample estimates:
## mean of x
## -0.007417268
# Uji autokorelasi
Box.test(sisaan, lag = 20 ,type = "Ljung")
##
## Box-Ljung test
##
## data: sisaan
## X-squared = 18.594, df = 20, p-value = 0.5483