Sebelum masuk dalam tahap pemodelan, dilakukan eksplorasi data dengan plot deret waktu untuk melihat pola data.
#--PLOT TIME SERIES--#plot(ma2.train,col ="navyblue",lwd =1,type ="o",xlab ="Time",ylab ="Data")
Berdasarkan plot data deret waktu di atas, terlihat data cenderung stasioner dalam rataan dan ragam. Data stasioner dalam rataan karena menyebar/bergerak di sekitar nilai tengahnya (0) dan dikatakan stasioner dalam ragam karena memiliki lebar pita yang cenderung sama. Selain dengan plot data deret waktu, akan dilakukan pengecekan stasioneritas data dengan plot ACF dan uji ADF.
Berdasarkan plot ACF di atas, dapat dilihat bahwa plot cuts off pada lag ke-2. Hal ini sesuai dengan proses pembangkitan model MA(2).
tseries::adf.test(ma2.train)
Augmented Dickey-Fuller Test
data: ma2.train
Dickey-Fuller = -3.96, Lag order = 4, p-value = 0.01358
alternative hypothesis: stationary
#stasioner
\(H_0\) : Data tidak stasioner dalam rataan
\(H_1\) : Data stasioner dalam rataan
Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01358 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.
index <-seq(1:120)# Box-Coxbc <-boxcox( ma2.train~index,lambda =seq(0, 3, by =1))
# Nilai lambda optimumlambda <- bc$x[which.max(bc$y)]lambda
[1] 1.090909
# Selang kepercayaan 95% untuk lambdaci_lambda <- bc$x[bc$y >max(bc$y) -0.5*qchisq(0.95, 1)]# Batas bawah dan batas atasci_lower <-min(ci_lambda)ci_upper <-max(ci_lambda)c(Batas_Bawah = ci_lower, Batas_Atas = ci_upper)
Batas_Bawah Batas_Atas
0.6969697 1.5151515
Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 1,09 dan pada selang kepercayaan 95% nilai memiliki batas bawah 0,69 dan batas atas 1,515. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan stasioner dalam ragam.
Berdasarkan Plot ACF, terlihat cuts off pada lag ke-2 sehingga dapat kita asumsikan model yang terbentuk adalah ARIMA(0,0,2). Selanjutnya, berdasarkan plot PACF, terlihat cuts off pada lag pertama sehingga model yang terbentuk adalah ARIMA(1,0,0). Selain dengan plot ACF dan PACF, penentuan spesifikasi model dilakukan dengan extended ACF (EACF) berikut ini.
eacf(ma2.train)
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 o o o
1 o x x o 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 o o o o o o o o o o o
4 o o o x 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 o o o o o x o o o o o
7 o o o o o x o o o o o o o o
#ARIMA(0,0,2) #ARIMA(1,0,3) #ARIMA(2,0,3) #ARIMA(3,0,3) #Terdapat 5 model tentatif
Menggunakan plot EACF, dapat diambil beberapa model dengan melihat ujung segitiga yang terbentuk, antara lain ARIMA(0,0,2), ARIMA(1,0,3), ARIMA(2,0,3), dan ARIMA(3,0,3).
2.4 Pendugaan Parameter
Selanjutnya akan dilakukan pendugaan parameter kelima model ARIMA yang terbentuk sebelumnya. Pendugaan dilakukan dengan fungsi Arima() yang dilanjutkan dengan melihat nilai AIC pada ringkasan data dan melihat signifikansi parameter.
Series: ma2.train
ARIMA(0,0,2) with non-zero mean
Coefficients:
ma1 ma2 mean
0.6953 0.5349 3.7918
s.e. 0.0829 0.0673 0.1841
sigma^2 = 0.8497: log likelihood = -159.44
AIC=326.87 AICc=327.22 BIC=338.02
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.004254881 0.910219 0.73195 -9.740748 24.85194 0.852277
ACF1
Training set 0.05965759
Series: ma2.train
ARIMA(1,0,0) with non-zero mean
Coefficients:
ar1 mean
0.6428 3.7815
s.e. 0.0690 0.2450
sigma^2 = 0.9625: log likelihood = -167.24
AIC=340.47 AICc=340.68 BIC=348.84
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.002975587 0.9728552 0.7723112 -10.61667 26.61199 0.8992733
ACF1
Training set 0.06622426
Series: ma2.train
ARIMA(1,0,3) with non-zero mean
Coefficients:
ar1 ma1 ma2 ma3 mean
0.0610 0.684 0.6137 0.0934 3.7918
s.e. 0.4257 0.416 0.3263 0.2714 0.2083
sigma^2 = 0.8518: log likelihood = -158.61
AIC=329.22 AICc=329.96 BIC=345.94
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.004465851 0.9034798 0.725319 -8.862145 24.28653 0.844556
ACF1
Training set 0.005156424
lmtest::coeftest(model3.ma2) #tidak ada yang signifikan
Series: ma2.train
ARIMA(2,0,3) with non-zero mean
Coefficients:
ar1 ar2 ma1 ma2 ma3 mean
0.2670 -0.1935 0.4749 0.6454 0.0524 3.7925
s.e. 0.4227 0.1744 0.4136 0.3050 0.2587 0.1916
sigma^2 = 0.8538: log likelihood = -158.3
AIC=330.6 AICc=331.6 BIC=350.11
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.004511346 0.9006288 0.7299239 -9.000208 24.57932 0.8499178
ACF1
Training set 0.006394934
lmtest::coeftest(model4.ma2) #hanya ma2 yang signifikan
Berdasarkan pendugaan parameter di atas, nilai AIC terkecil dimiliki oleh model ARIMA(0,0,2) dan parameter model ARIMA(0,0,2) juga seluruhnya signifikan sehingga model yang dipilih adalah model ARIMA(0,0,2).
2.5 Analisis Sisaan
Model terbaik hasil identifikasi kemudian dicek asumsi sisaannya. Sisaan model ARIMA harus memenuhi asumsi normalitas, kebebasan, dan kehomogenan ragam. Diagnostik model dilakukan secara eksplorasi dan uji formal.
2.5.1 Eksplorasi Sisaan
#Eksplorasisisaan.ma2 <- model1.ma2$residualspar(mfrow=c(2,2))#qqnorm(sisaan.ma2)#qqline(sisaan.ma2, col = "blue", lwd = 2)car::qqPlot(sisaan.ma2)
[1] 87 85
plot(c(1:length(sisaan.ma2)),sisaan.ma2)# ACFF dan PACF sisaanacf(sisaan.ma2)pacf(sisaan.ma2)
par(mfrow =c(2,2))
Berdasarkan plot kuantil-kuantil normal, secara eksplorasi ditunjukkan sisaan menyebar normal mengikuti garis \(45^{\circ}\). Kemudian dapat dilihat juga lebar pita sisaan yang cenderung sama menandakan bahwa sisaan memiliki ragam yang homogen. Akan tetapi, plot ACF dan PACF sisaan ARIMA(0,0,2) signifikan pada lag ke-6 sehingga sisaan tidak saling bebas. Kondisi ini akan diuji lebih lanjut dengan uji formal.
Asymptotic one-sample Kolmogorov-Smirnov test
data: sisaan.ma2
D = 0.043157, p-value = 0.9788
alternative hypothesis: two-sided
#gagal tolak H0 > sisaan menyebar normal
Selain dengan eksplorasi, asumsi tersebut dapat diuji menggunakan uji formal. Pada tahapan ini uji formal yang digunakan untuk normalitas adalah uji Kolmogorov-Smirnov (KS). Hipotesis pada uji KS adalah sebagai berikut.
\(H_0\) : Sisaan menyebar normal
\(H_1\) : Sisaan tidak menyebar normal
Berdasarkan uji KS tersebut, didapat p-value sebesar 0.9788 yang lebih besar dari taraf nyata 5% sehingga gagal tolak \(H_0\) dan menandakan bahwa sisaan menyebar normal. Hal ini sesuai dengan hasil eksplorasi menggunakan plot kuantil-kuantil normal.
#2) Sisaan saling bebas/tidak ada autokorelasiBox.test(sisaan.ma2, type ="Ljung")
Selanjutnya akan dilakukan uji formal untuk kebebasan sisaan menggunakan uji Ljung-Box. Hipotesis yang digunakan adalah sebagai berikut.
\(H_0\) : Sisaan saling bebas
\(H_1\) : Sisaan tidak tidak saling bebas
Berdasarkan uji Ljung-Box tersebut, didapat p-value sebesar 0.5082 yang lebih besar dari taraf nyata 5% sehingga gagal tolak \(H_0\) dan menandakan bahwa sisaan saling bebas. Hal ini berbeda dengan eksplorasi.
#3) Sisaan homogenBox.test((sisaan.ma2)^2, type ="Ljung")
Hipotesis yang digunakan untuk uji kehomogenan ragam adalah sebagai berikut.
\(H_0\) : Ragam sisaan homogen
\(H_1\) : Ragam sisaan tidak homogen
Berdasarkan uji Ljung-Box terhadap sisaan kuadrat tersebut, didapat p-value sebesar 0.116 yang lebih besar dari taraf nyata 5% sehingga gagal tolak \(H_0\) dan menandakan bahwa ragam sisaan homogen.
#4) Nilai tengah sisaan sama dengan nolt.test(sisaan.ma2, mu =0, conf.level =0.95)
One Sample t-test
data: sisaan.ma2
t = -0.050994, df = 119, p-value = 0.9594
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
-0.1694719 0.1609621
sample estimates:
mean of x
-0.004254881
#gagal tolak h0 > nilai tengah sisaan sama dengan 0
Terakhir, dengan uji-t, akan dicek apakah nilai tengah sisaan sama dengan nol. Hipotesis yang diujikan sebagai berikut.
\(H_0\) : nilai tengah sisaan sama dengan 0
\(H_1\) : nilai tengah sisaan tidak sama dengan 0
Berdasarkan uji-ttersebut, didapat p-value sebesar 0.9594 yang lebih besar dari taraf nyata 5% sehingga gagal tolak \(H_0\) dan menandakan bahwa nilai tengah sisaan sama dengan nol. Hal ini berbeda dengan eksplorasi.
2.6 Overfitting
Tahapan selanjutnya adalah overfitting dilakukan dengan menaikkan orde AR(p) dan MA(q) dari model ARIMA(0,0,2) untuk melihat apakah terdapat model lain yang lebih baik dari model saat ini. Kandidat model overfitting adalah ARIMA(1,0,2) dan ARIMA(0,0,3).
Series: ma2.train
ARIMA(1,0,2) with non-zero mean
Coefficients:
ar1 ma1 ma2 mean
0.1990 0.5451 0.5029 3.7917
s.e. 0.1412 0.1239 0.0836 0.2093
sigma^2 = 0.8453: log likelihood = -158.65
AIC=327.31 AICc=327.84 BIC=341.25
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.004448537 0.9039253 0.7240135 -8.892151 24.23053 0.8430358
ACF1
Training set 0.007803042
lmtest::coeftest(model1a.ma2) #ar1 tidak signifikan
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 0.199039 0.141222 1.4094 0.1587
ma1 0.545109 0.123914 4.3991 1.087e-05 ***
ma2 0.502936 0.083609 6.0153 1.795e-09 ***
intercept 3.791724 0.209264 18.1193 < 2.2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Series: ma2.train
ARIMA(0,0,3) with non-zero mean
Coefficients:
ma1 ma2 ma3 mean
0.7415 0.656 0.1286 3.7916
s.e. 0.0878 0.118 0.0997 0.2067
sigma^2 = 0.8446: log likelihood = -158.62
AIC=327.24 AICc=327.77 BIC=341.18
Training set error measures:
ME RMSE MAE MPE MAPE MASE
Training set -0.004403296 0.9035497 0.7261616 -8.89926 24.34304 0.8455371
ACF1
Training set 0.007516805
lmtest::coeftest(model1b.ma2) #ma3 tidak signifikan
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ma1 0.741488 0.087816 8.4436 < 2.2e-16 ***
ma2 0.656016 0.118034 5.5579 2.731e-08 ***
ma3 0.128647 0.099655 1.2909 0.1967
intercept 3.791645 0.206722 18.3417 < 2.2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#model yang dipilih adalah model awal, yaitu ARIMA(0,0,2)
Berdasarkan kedua model hasil overfitting di atas, model ARIMA(1,0,2) dan ARIMA(0,0,3) memiliki AIC yang lebih besar dibandingkan dengan model ARIMA(0,0,2) dan parameter kedua model ARIMA(1,0,2) dan ARIMA(0,0,3) tidak seluruhnya signifikan. Oleh karena itu, model ARIMA(0,0,2) akan tetap digunakan untuk melakukan peramalan.
2.7 Peramalan
Peramalan dilakukan menggunakan fungsi forecast() . Contoh peramalan berikut ini dilakukan untuk 30 hari ke depan.
#---FORECAST---#ramalan <- forecast::forecast(model1.ma2, h =30) ramalan
Berdasarkan hasil plot ramalan di atas, dapat dilihat bahwa ramalan ARIMA(0,0,2) cenderung meningkat di awal periode dan stabil hingga akhir periode. Selanjutnya, dapat dicari nilai akurasi antara hasil ramalan dengan data uji sebagai berikut.
plot.ts(datakurs.ts, lty =1, xlab ="Waktu", ylab ="Kurs", main ="Plot Data Kurs")
Berdasarkan plot data deret waktu, terlihat bahwa data cenderung memiliki trend yang naik. Berdasarkan pola data, pembagian data latih dan data uji ditetapkan dengan proporsi 86%:14%.
Berdasarkan plot data deret waktu pada data latih, terlihat bahwa data cenderung memiliki trend yang naik dan cenderung tidak bergerak pada nilai tengah tertentu. Hal ini mengindikasikan bahwa data tidak stasioner dalam rataan.
Berdasarkan plot ACF, terlihat bahwa plot ACF data menurun secara perlahan (tails of slowly). Hal ini juga menjadi indikasi bahwa data tidak stasioner dalam rataan
3.2.2 Uji ADF
tseries::adf.test(train.ts)
Augmented Dickey-Fuller Test
data: train.ts
Dickey-Fuller = -2.0526, Lag order = 7, p-value = 0.5553
alternative hypothesis: stationary
\(H_0\) : Data tidak stasioner dalam rataan
\(H_1\) : Data stasioner dalam rataan
Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.5553 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF, sehingga ketidakstasioneran model kedepannya harus ditangani
3.2.3 Plot Box-Cox
index <-seq(1:430)# Box-Coxbc <-boxcox(train.ts ~ index, lambda =seq(5, 10, by =1))
# Nilai lambda optimum (rounded)lambda_opt <- bc$x[which.max(bc$y)]lambda_opt
[1] 6.616162
# Selang kepercayaan 95% untuk lambdaci_lambda <- bc$x[bc$y >max(bc$y) -0.5*qchisq(0.95, df =1)]# Batas bawah dan batas atasci_lower <-min(ci_lambda)ci_upper <-max(ci_lambda)c(Batas_Bawah = ci_lower, Batas_Atas = ci_upper)
Batas_Bawah Batas_Atas
5.656566 7.676768
Plot Boxcox menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 6,62 dan pada selang kepercayaan 95% nilai memiliki batas bawah 5,66 dan batas atas 7,68. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan stasioner dalam ragam.
Berdasarkan plot data deret waktu, terlihat bahwa data sudah stasioner dalam rataan ditandai dengan data bergerak pada nilai tengah tertentu (tidak terdapat trend ataupun musiman pada data)
3.3.1 Plot ACF
acf(train.diff)
Berdasarkan plot tersebut, terlihat bahwa plot ACF cuts off pada lag ke 1. Hal ini menandakan data sudah stasioner dalam rataan dan ketidakstasioneran data telah berhasil tertangani.
3.3.2 Uji ADF
tseries::adf.test(train.diff)
Warning in tseries::adf.test(train.diff): p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: train.diff
Dickey-Fuller = -6.3673, Lag order = 7, p-value = 0.01
alternative hypothesis: stationary
\(H_0\) : Data tidak stasioner dalam rataan
\(H_1\) : Data stasioner dalam rataan
Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) atau data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF, sehingga dalam hal ini ketidakstasioneran data sudah berhasil ditangani dan dapat dilanjutkan ke pemodelan
3.4 Identifikasi Model
3.4.1 Plot ACF
acf(train.diff)
Berdasarkan plot tersebut, terlihat bahwa plot ACF cenderung cuts off pada lag ke 1, sehingga jika plot PACF dianggap tails of, maka model tentatifnya adalah ARIMA(0,1,1).
3.4.2 Plot PACF
pacf(train.diff)
Berdasarkan plot tersebut, terlihat bahwa plot PACF cenderung cuts off pada lag ke 1, sehingga jika plot ACF dianggap tails of, maka model tentatifnya adalah ARIMA(1,1,0).
Jika baik plot ACF maupun plot PACF keduanya dianggap tails of, maka model yang terbentuk adalah ARIMA(1,1,1)
3.4.3 Plot EACF
eacf(train.diff)
AR/MA
0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 x o o o o o o o o o o o o o
1 x x o o o o o o o o o o o o
2 x x o o o o o o o o o o o o
3 x x o 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 x o o o o o o o o o o o o
6 x x o o x x o o o o o o o o
7 x x o x x x x o o o o o o o
Identifikasi model menggunakan plot EACF dilakukan dengan melihat ujung segitiga pada pola segitiga nol. Dalam hal ini model tentatif yang terbentuk adalah ARIMA(1,1,2), ARIMA(2,1,2), dan ARIMA(3,1,2).
Series: train.diff
ARIMA(0,0,1) with non-zero mean
Coefficients:
ma1 mean
0.1352 7.1077
s.e. 0.0498 3.3499
sigma^2 = 3756: log likelihood = -2373.28
AIC=4752.56 AICc=4752.62 BIC=4764.75
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.005374792 61.14 43.42061 -Inf Inf 0.7396625 -0.006155765
Series: train.diff
ARIMA(1,0,0) with non-zero mean
Coefficients:
ar1 mean
0.1189 7.1095
s.e. 0.0479 3.3529
sigma^2 = 3764: log likelihood = -2373.74
AIC=4753.48 AICc=4753.54 BIC=4765.66
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.005694796 61.2056 43.46036 -Inf Inf 0.7403397 0.009939135
Series: train.diff
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 mean
-0.1670 0.2978 7.1037
s.e. 0.2423 0.2322 3.2804
sigma^2 = 3760: log likelihood = -2373.05
AIC=4754.1 AICc=4754.19 BIC=4770.34
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.0004181006 61.10659 43.32274 -Inf Inf 0.7379952 -0.003493016
lmtest::coeftest(model3.da) #tidak ada parameter signifikan
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 -0.16699 0.24228 -0.6893 0.49066
ma1 0.29784 0.23217 1.2828 0.19955
intercept 7.10366 3.28040 2.1655 0.03035 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Series: train.diff
ARIMA(1,0,2) with non-zero mean
Coefficients:
ar1 ma1 ma2 mean
0.3945 -0.2726 -0.1087 7.1127
s.e. 0.3296 0.3270 0.0543 3.0108
sigma^2 = 3757: log likelihood = -2372.35
AIC=4754.71 AICc=4754.85 BIC=4775.01
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.009372 61.00723 43.17141 -Inf Inf 0.7354175 0.003377215
lmtest::coeftest(model5.da) #terdapat parameter tidak signifikan
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 0.394546 0.329583 1.1971 0.23126
ma1 -0.272627 0.327014 -0.8337 0.40446
ma2 -0.108691 0.054328 -2.0006 0.04543 *
intercept 7.112667 3.010799 2.3624 0.01816 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Series: train.diff
ARIMA(2,0,2) with non-zero mean
Coefficients:
Warning in sqrt(diag(x$var.coef)): NaNs produced
ar1 ar2 ma1 ma2 mean
0.2406 -0.3519 -0.1124 0.2629 7.0944
s.e. NaN NaN NaN NaN 3.0450
sigma^2 = 3755: log likelihood = -2371.73
AIC=4755.46 AICc=4755.66 BIC=4779.83
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 0.007656631 60.9179 43.19401 -Inf Inf 0.7358024 -0.002419307
lmtest::coeftest(model6.da) #NaN
Warning in sqrt(diag(se)): NaNs produced
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 0.24058 NaN NaN NaN
ar2 -0.35193 NaN NaN NaN
ma1 -0.11241 NaN NaN NaN
ma2 0.26285 NaN NaN NaN
intercept 7.09437 3.04502 2.3298 0.01982 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan pendugaan parameter di atas, nilai AIC terkecil dimiliki oleh model ARIMA(0,1,1) dan parameter model ARIMA(0,1,1) juga seluruhnya signifikan sehingga model yang dipilih adalah model ARIMA(0,1,1).
3.7 Analisis Sisaan
Model terbaik hasil identifikasi kemudian dicek asumsi sisaannya. Sisaan model ARIMA harus memenuhi asumsi normalitas, kebebasan sisaan, dan kehomogenan ragam. Diagnostik model dilakukan secara eksplorasi dan uji formal.
3.7.1 Eksplorasi Sisaan
sisaan.da <- model1.da$residualspar(mfrow =c(2,2), mar =c(4,4,2,1), oma =c(0,0,2,0)) # Q-Q Plotqqnorm(sisaan.da, main ="Normal Q-Q Plot")qqline(sisaan.da, col ="blue", lwd =2)# Plot Sisaan vs Waktuplot(sisaan.da, type ="p",main ="Plot Sisaan vs Waktu",xlab ="Waktu", ylab ="Sisaan")# ACFacf(sisaan.da, main ="ACF Sisaan")# PACFpacf(sisaan.da, main ="PACF Sisaan")
Berdasarkan plot kuantil-kuantil normal, secara eksploratif terlihat bahwa sisaan tidak sepenuhnya menyebar normal karena titik-titik cenderung menyimpang dari garis 45∘. Selain itu, lebar pita sebaran sisaan tampak tidak seragam, yang mengindikasikan adanya heterogenitas ragam. Sementara itu, plot ACF dan PACF sisaan dari model ARIMA(0,1,1) menunjukkan tidak adanya spike signifikan pada 20 lag pertama, sehingga secara visual sisaan dapat dianggap saling bebas. Kondisi ini akan diuji lebih lanjut dengan uji formal.
3.7.2 Uji Formal
#1) Sisaan Menyebar Normal ks.test(sisaan.da,"pnorm") #gagal tolak H0 > sisaan menyebar normal
Asymptotic one-sample Kolmogorov-Smirnov test
data: sisaan.da
D = 0.48008, p-value < 2.2e-16
alternative hypothesis: two-sided
Selain dengan eksplorasi, asumsi tersebut dapat diuji menggunakan uji formal. Pada tahapan ini uji formal yang digunakan untuk normalitas adalah uji Kolmogorov-Smirnov (KS). Hipotesis pada uji KS adalah sebagai berikut.
\(H_0\) : Sisaan menyebar normal
\(H_1\) : Sisaan tidak menyebar normal
Berdasarkan uji KS tersebut, didapat p-value sebesar 0.00 yang kurang dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa sisaan tidak menyebar normal. Hal ini sesuai dengan hasil eksplorasi menggunakan plot kuantil-kuantil normal.
#2) Sisaan saling bebas/tidak ada autokorelasi Box.test(sisaan.da, type ="Ljung") #gagal tolak H0 > sisaan saling bebas
Selanjutnya akan dilakukan uji formal untuk kebebasan sisaan menggunakan uji Ljung-Box. Hipotesis yang digunakan adalah sebagai berikut.
\(H_0\) : Sisaan saling bebas
\(H_1\) : Sisaan tidak tidak saling bebas
Berdasarkan uji Ljung-Box tersebut, didapat p-value sebesar 0.8982 yang lebih besar dari taraf nyata 5% sehingga gagal tolak \(H_0\) dan menandakan bahwa sisaan saling bebas. Hal ini berbeda dengan eksplorasi.
Hipotesis yang digunakan untuk uji kehomogenan ragam adalah sebagai berikut.
\(H_0\) : Ragam sisaan homogen
\(H_1\) : Ragam sisaan tidak homogen
Berdasarkan uji Ljung-Box terhadap sisaan kuadrat tersebut, didapat p-value sebesar 4.02e-08 yang kurang dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa ragam sisaan tidak homogen.
#4) Nilai tengah sisaan sama dengan nol t.test(sisaan.da, mu =0, conf.level =0.95) #gagal tolak h0 > nilai tengah sisaan sama dengan 0
One Sample t-test
data: sisaan.da
t = -0.0018187, df = 428, p-value = 0.9985
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
-5.814109 5.803359
sample estimates:
mean of x
-0.005374792
Terakhir, dengan uji-t, akan dicek apakah nilai tengah sisaan sama dengan nol. Hipotesis yang diujikan sebagai berikut.
\(H_0\) : nilai tengah sisaan sama dengan 0
\(H_1\) : nilai tengah sisaan tidak sama dengan 0
Berdasarkan uji-ttersebut, didapat p-value sebesar 0.9985 yang lebih besar dari taraf nyata 5% sehingga gagal tolak \(H_0\) dan menandakan bahwa nilai tengah sisaan sama dengan nol. Hal ini berbeda dengan eksplorasi.
3.8 Overfitting
Tahapan selanjutnya adalah overfitting dilakukan dengan menaikkan orde AR(p) dan MA(q) dari model ARIMA(0,1,1) Kandidat model overfitting adalah ARIMA(1,1,1) dan ARIMA(0,1,2). Karena model hasil overfitting sudah termasuk di dalam model tentatif dan hasilnya tidak lebih baik, maka model terbaik yang dipilih adalah ARIMA(0,1,1) dilanjutkan dengan peramalan.
Series: train.diff
ARIMA(0,0,2) with non-zero mean
Coefficients:
ma1 ma2 mean
0.1216 -0.0490 7.1098
s.e. 0.0491 0.0485 3.1625
sigma^2 = 3756: log likelihood = -2372.78
AIC=4753.56 AICc=4753.65 BIC=4769.8
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.004458039 61.06796 43.21384 -Inf Inf 0.7361402 0.003711064
lmtest::coeftest(model3.da) #tidak ada parameter signifikan
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ma1 0.121636 0.049076 2.4785 0.01319 *
ma2 -0.048960 0.048514 -1.0092 0.31288
intercept 7.109824 3.162509 2.2482 0.02457 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Series: train.diff
ARIMA(0,0,1) with non-zero mean
Coefficients:
ma1 mean
0.1352 7.1077
s.e. 0.0498 3.3499
sigma^2 = 3756: log likelihood = -2373.28
AIC=4752.56 AICc=4752.62 BIC=4764.75
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.005374792 61.14 43.42061 -Inf Inf 0.7396625 -0.006155765
lmtest::coeftest(model1.da)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ma1 0.135154 0.049751 2.7166 0.006596 **
intercept 7.107718 3.349898 2.1218 0.033857 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
3.10 Peramalan
Peramalan dilakukan menggunakan fungsi forecast() . Contoh peramalan berikut ini dilakukan untuk 30 hari ke depan.
# ---FORECAST---ramalan.da <- forecast::forecast(model1.da, h =length(test.ts))