Pertemuan 7 MPDW - Pendugaan Parameter, Diagnostik Model, dan Peramalan
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'tsibble' was built under R version 4.3.3
## Registered S3 method overwritten by 'tsibble':
## method from
## as_tibble.grouped_df dplyr
##
## Attaching package: 'tsibble'
## The following objects are masked from 'package:base':
##
## intersect, setdiff, union
## Warning: package 'tseries' was built under R version 4.3.2
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Warning: package 'forecast' was built under R version 4.3.3
## Warning: package 'MASS' was built under R version 4.3.3
## Warning: package 'TSA' was built under R version 4.3.3
## 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
## Warning: package 'TTR' was built under R version 4.3.2
## Warning: package 'aTSA' was built under R version 4.3.2
##
## Attaching package: 'aTSA'
## The following object is masked from 'package:forecast':
##
## forecast
## The following objects are masked from 'package:tseries':
##
## adf.test, kpss.test, pp.test
## The following object is masked from 'package:graphics':
##
## identify
I. Data Keseluruhan
Data Time Series
## Tanggal Penumpang.Berangkat
## 1 2023-04-26 7538
## 2 2023-04-27 6954
## 3 2023-04-28 7420
## 4 2023-04-29 8118
## 5 2023-04-30 8970
## 6 2023-05-01 9472
## 7 2023-05-02 7850
## 8 2023-05-03 7657
## 9 2023-05-04 7515
## 10 2023-05-05 7646
## 11 2023-05-06 7336
## 12 2023-05-07 7525
## 13 2023-05-08 6769
## 14 2023-05-09 6509
## 15 2023-05-10 7562
## 16 2023-05-11 6471
## 17 2023-05-12 6810
## 18 2023-05-13 6686
## 19 2023-05-14 6932
## 20 2023-05-15 6952
## 21 2023-05-16 6071
## 22 2023-05-17 8257
## 23 2023-05-18 7842
## 24 2023-05-19 5854
## 25 2023-05-20 5879
## 26 2023-05-21 7127
## 27 2023-05-22 6446
## 28 2023-05-23 6292
## 29 2023-05-24 6786
## 30 2023-05-25 6979
## 31 2023-05-26 7588
## 32 2023-05-27 6390
## 33 2023-05-28 7530
## 34 2023-05-29 6593
## 35 2023-05-30 7177
## 36 2023-05-31 8949
## 37 2023-06-01 8128
## 38 2023-06-02 5582
## 39 2023-06-03 5132
## 40 2023-06-04 6595
## 41 2023-06-05 6304
## 42 2023-06-06 5984
## 43 2023-06-07 6616
## 44 2023-06-08 6899
## 45 2023-06-09 6989
## 46 2023-06-10 6830
## 47 2023-06-11 7631
## 48 2023-06-12 7022
## 49 2023-06-13 7091
## 50 2023-06-14 8598
## 51 2023-06-15 9241
## 52 2023-06-16 8803
## 53 2023-06-17 9322
## 54 2023-06-18 10038
## 55 2023-06-19 9265
## 56 2023-06-20 9051
## 57 2023-06-21 9895
## 58 2023-06-22 9556
## 59 2023-06-23 9250
## 60 2023-06-24 9446
## 61 2023-06-25 9704
## 62 2023-06-26 8872
## 63 2023-06-27 3673
## 64 2023-06-28 8940
## 65 2023-06-29 5570
## 66 2023-06-30 6883
## 67 2023-07-01 6791
## 68 2023-07-02 7998
## 69 2023-07-03 7496
## 70 2023-07-04 7273
## 71 2023-07-05 8557
## 72 2023-07-06 8148
## 73 2023-07-07 7973
## 74 2023-07-08 7397
## 75 2023-07-09 7762
## 76 2023-07-10 7674
## 77 2023-07-11 7265
## 78 2023-07-12 8403
## 79 2023-07-13 7763
## 80 2023-07-14 8054
## 81 2023-07-15 7800
## 82 2023-07-16 7758
## 83 2023-07-17 6046
## 84 2023-07-18 6562
## 85 2023-07-19 7811
## 86 2023-07-20 7045
## 87 2023-07-21 7294
## 88 2023-07-22 7001
## 89 2023-07-23 7560
## 90 2023-07-24 7610
## 91 2023-07-25 6927
## 92 2023-07-26 7188
## 93 2023-07-27 6824
## 94 2023-07-28 7521
## 95 2023-07-29 6204
## 96 2023-07-30 5918
## 97 2023-07-31 6013
## 98 2023-08-01 6121
## 99 2023-08-02 7177
## 100 2023-08-03 6217
## 101 2023-08-04 6922
## 102 2023-08-05 6672
## 103 2023-08-06 6539
## 104 2023-08-07 6457
## 105 2023-08-08 5438
## 106 2023-08-09 7027
## 107 2023-08-10 7257
## 108 2023-08-11 7154
## 109 2023-08-12 7083
## 110 2023-08-13 7122
## 111 2023-08-14 6481
## 112 2023-08-15 5898
## 113 2023-08-16 6762
## 114 2023-08-17 6139
## 115 2023-08-18 5795
## Tanggal Penumpang.Berangkat
## Min. :2023-04-26 Min. : 3673
## 1st Qu.:2023-05-24 1st Qu.: 6594
## Median :2023-06-22 Median : 7154
## Mean :2023-06-22 Mean : 7298
## 3rd Qu.:2023-07-20 3rd Qu.: 7806
## Max. :2023-08-18 Max. :10038
Plot Time Series
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Plot deret waktu di atas menunjukkan bahwa data tidak stasioner dalam rataan, ditandai dengan adanya beberapa perubahan tren, terutama setelah titik sekitar lag 60, di mana terdapat lonjakan yang cukup besar diikuti oleh penurunan. Ini menandakan bahwa rataan data tidak konstan sepanjang waktu. Selain itu, lebar pita memiliki lebar yang sekilas hampir sama sehingga kemungkinan data stasioner dalam ragam.
Plot ACF
Berdasarkan plot AFC tersebut, terlihat bahwa plot ACF tails off dan menurun secara perlahan seiring bertambahnya lag.
Uji ADF
##
## Augmented Dickey-Fuller Test
##
## data: data_ts
## Dickey-Fuller = -2.8291, Lag order = 4, p-value = 0.2324
## 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.2324 yang lebih besar dari taraf nyata 5% sehingga terima \(H_0\) dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.
Plot Box-Cox
## [1] 0.65
## [1] -0.12 -0.11 -0.10 -0.09 -0.08 -0.07 -0.06 -0.05 -0.04 -0.03 -0.02 -0.01
## [13] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11
## [25] 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23
## [37] 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35
## [49] 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44 0.45 0.46 0.47
## [61] 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59
## [73] 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.70 0.71
## [85] 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83
## [97] 0.84 0.85 0.86 0.87 0.88 0.89 0.90 0.91 0.92 0.93 0.94 0.95
## [109] 0.96 0.97 0.98 0.99 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07
## [121] 1.08 1.09 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19
## [133] 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31
## [145] 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.40 1.41 1.42 1.43
## [157] 1.44 1.45 1.46 1.47 1.48 1.49
Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 0,65 dan pada selang kepercayaan 95% nilai memiliki batas bawah -0.12 dan batas atas 1.49. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan stasioner dalam ragam.
II. Partisi Data - Data Awal Sebesar 50%
Data Time Series
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 7538 6954 7420 8118 8970 9472
## [1] 7431.448
## [1] 1307058
Plot Time Series
dt_stas1 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")Plot deret waktu di atas menunjukkan bahwa data tidak stasioner dalam rataan, ditandai dengan adanya beberapa perubahan tren, terutama setelah titik sekitar lag 30 dan 40, di mana terdapat penurunan yang cukup besar diikuti oleh lonjakan. Ini menandakan bahwa rataan data tidak konstan sepanjang waktu. Selain itu, lebar pita memiliki lebar yang sekilas hampir sama sehingga kemungkinan data stasioner dalam ragam.
Plot ACF
Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut cenderung tails off dan menurun secara perlahan seiring bertambahnya lag.
Uji ADF
##
## Augmented Dickey-Fuller Test
##
## data: dt_stas1
## Dickey-Fuller = -1.3173, Lag order = 3, p-value = 0.8503
## 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.8503 yang lebih besar dari taraf nyata 5% sehingga terima \(H_0\) dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.
Plot Box-Cox
## [1] -0.2626263
## [1] -1.77777778 -1.67676768 -1.57575758 -1.47474747 -1.37373737 -1.27272727
## [7] -1.17171717 -1.07070707 -0.96969697 -0.86868687 -0.76767677 -0.66666667
## [13] -0.56565657 -0.46464646 -0.36363636 -0.26262626 -0.16161616 -0.06060606
## [19] 0.04040404 0.14141414 0.24242424 0.34343434 0.44444444 0.54545455
## [25] 0.64646465 0.74747475 0.84848485 0.94949495 1.05050505 1.15151515
## [31] 1.25252525
Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar -0.2626263 dan pada selang kepercayaan 95% nilai memiliki batas bawah -1.77777778 dan batas atas 1.25252525. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan stasioner dalam ragam.
III. Partisi Data - Data Akhir Sebesar 50%
Data Time Series
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 9250 9446 9704 8872 3673 8940
## [1] 7162.018
## [1] 1132565
Plot Time Series
dt_stas2 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")Plot deret waktu di atas menunjukkan bahwa data kemungkinan stasioner dalam rataan ditandai dengan data yang menyebar di sekitar nilai tengahnya (7162.018). Namun, plot juga mengindikasikan adanya beberapa perubahan tren. Ini menandakan bahwa rataan data mungkin saja tidak konstan sepanjang waktu. Selain itu, lebar pita memiliki lebar yang sekilas hampir sama sehingga kemungkinan data stasioner dalam ragam. Sehingga, perlu dilakukan analisis lanjut.
Plot ACF
Berdasarkan plot ACF tersebut, terlihat bahwa data stasioner dalam rataan ditandai dengan plot ACF yang cuts off pada lag ke-2.
Uji ADF
## Warning in tseries::adf.test(dt_stas2): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: dt_stas2
## Dickey-Fuller = -4.8825, Lag order = 3, 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\) dan menandakan bahwa data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.
Plot Box-Cox
## [1] 2.020202
## [1] 0.969697 1.010101 1.050505 1.090909 1.131313 1.171717 1.212121 1.252525
## [9] 1.292929 1.333333 1.373737 1.414141 1.454545 1.494949 1.535354 1.575758
## [17] 1.616162 1.656566 1.696970 1.737374 1.777778 1.818182 1.858586 1.898990
## [25] 1.939394 1.979798 2.020202 2.060606 2.101010 2.141414 2.181818 2.222222
## [33] 2.262626 2.303030 2.343434 2.383838 2.424242 2.464646 2.505051 2.545455
## [41] 2.585859 2.626263 2.666667 2.707071 2.747475 2.787879 2.828283 2.868687
## [49] 2.909091 2.949495 2.989899 3.030303 3.070707 3.111111 3.151515
Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 2.020202 dan pada selang kepercayaan 95% nilai memiliki batas bawah 0.969697 dan batas atas 3.151515. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan stasioner dalam ragam.
IV. Penanganan Ketidakstasioneran Data
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).
Berdasarkan plot tersebut, terlihat bahwa plot ACF cuts off pada lag ke 2. Hal ini menandakan data sudah stasioner dalam rataan dan ketidakstasioneran data telah berhasil tertangani.
## Warning in tseries::adf.test(train.diff): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: train.diff
## Dickey-Fuller = -5.0654, Lag order = 3, 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
V. Identifikasi Model
Berdasarkan plot tersebut, terlihat bahwa plot ACF cenderung cuts off pada lag ke 2, sehingga jika plot PACF dianggap tails of, maka model tentatifnya adalah ARIMA(0,1,2).
Plot PACF
Berdasarkan plot tersebut, terlihat bahwa plot PACF cenderung cuts off pada lag ke 2, sehingga jika plot ACF dianggap tails of, maka model tentatifnya adalah ARIMA(2,1,0).
Jika baik plot ACF maupun plot PACF keduanya dianggap tails off, maka model yang terbentuk adalah ARIMA(2,1,2)
Plot EACF
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o x o o o o o o o o o x o x
## 1 x x o o o o o o o o o x o x
## 2 o o o o o o o o o o o o o o
## 3 x o o o o o o o o o o o o o
## 4 x o o o o o o o o o o o o o
## 5 x o o o o o o o o o o o o o
## 6 x o o o o o o o o o o o o o
## 7 x o o o o o o 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(0,1,2), ARIMA(1,1,2), ARIMA(2,1,0), ARIMA(2,1,1), dan ARIMA(2,1,2).
VI. Pendugaan Parameter Model Tentatif
#ARIMA(0,1,2)
model1.da=Arima(train.diff, order=c(0,0,2),method="ML")
summary(model1.da) #AIC=929.41## Series: train.diff
## ARIMA(0,0,2) with non-zero mean
##
## Coefficients:
## ma1 ma2 mean
## -0.1695 -0.4076 30.6923
## s.e. 0.1352 0.1383 45.7179
##
## sigma^2 = 642727: log likelihood = -460.71
## AIC=929.41 AICc=930.18 BIC=937.59
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 3.765875 780.3197 632.82 58.06482 158.2342 0.5729933 -0.06310222
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.16951 0.13517 -1.2541 0.209812
## ma2 -0.40756 0.13831 -2.9467 0.003212 **
## intercept 30.69229 45.71785 0.6713 0.502003
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#ARIMA(1,1,2)
model2.da=Arima(train.diff, order=c(1,0,2),method="ML")
summary(model2.da) #AIC=929.54## Series: train.diff
## ARIMA(1,0,2) with non-zero mean
##
## Coefficients:
## ar1 ma1 ma2 mean
## -0.4244 0.2099 -0.5325 34.0596
## s.e. 0.2204 0.1931 0.1107 49.7125
##
## sigma^2 = 631075: log likelihood = -459.77
## AIC=929.54 AICc=930.72 BIC=939.75
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 1.765858 766.0215 617.7286 33.44867 193.6986 0.5593287
## ACF1
## Training set -0.007168734
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.42439 0.22035 -1.9259 0.05411 .
## ma1 0.20994 0.19312 1.0871 0.27700
## ma2 -0.53254 0.11070 -4.8106 1.505e-06 ***
## intercept 34.05959 49.71254 0.6851 0.49326
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#ARIMA(2,1,0)
model3.da=Arima(train.diff, order=c(2,0,0),method="ML")
summary(model3.da) #AIC=927.92 ## Series: train.diff
## ARIMA(2,0,0) with non-zero mean
##
## Coefficients:
## ar1 ar2 mean
## -0.2124 -0.4482 36.4984
## s.e. 0.1179 0.1165 62.1634
##
## sigma^2 = 625894: log likelihood = -459.96
## AIC=927.92 AICc=928.69 BIC=936.1
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -2.470455 770.0341 621.9286 58.38714 167.1116 0.5631317
## ACF1
## Training set -0.02837839
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.21240 0.11790 -1.8015 0.071630 .
## ar2 -0.44821 0.11647 -3.8482 0.000119 ***
## intercept 36.49845 62.16337 0.5871 0.557111
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#ARIMA(2,1,1)
model4.da=Arima(train.diff, order=c(2,0,1),method="ML")
summary(model4.da) #AIC=929.73 ## Series: train.diff
## ARIMA(2,0,1) with non-zero mean
##
## Coefficients:
## ar1 ar2 ma1 mean
## -0.1018 -0.4312 -0.1397 36.1618
## s.e. 0.2833 0.1294 0.3218 57.9669
##
## sigma^2 = 635431: log likelihood = -459.86
## AIC=929.73 AICc=930.91 BIC=939.95
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -1.791302 768.6606 621.6785 61.63982 161.007 0.5629052
## ACF1
## Training set -0.002583302
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.10180 0.28328 -0.3593 0.7193352
## ar2 -0.43117 0.12940 -3.3319 0.0008625 ***
## ma1 -0.13971 0.32183 -0.4341 0.6641995
## intercept 36.16176 57.96694 0.6238 0.5327364
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#ARIMA(2,1,2)
model5.da=Arima(train.diff, order=c(2,0,2),method="ML")
summary(model5.da) #AIC=931.65 ## Series: train.diff
## ARIMA(2,0,2) with non-zero mean
##
## Coefficients:
## ar1 ar2 ma1 ma2 mean
## -0.1306 -0.3601 -0.1119 -0.0972 35.4339
## s.e. 0.3035 0.2986 0.3231 0.3600 54.9929
##
## sigma^2 = 646606: log likelihood = -459.82
## AIC=931.65 AICc=933.33 BIC=943.91
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.1565411 768.0402 621.664 58.94574 166.1434 0.562892
## ACF1
## Training set -0.003933697
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.130621 0.303520 -0.4304 0.6669
## ar2 -0.360125 0.298649 -1.2058 0.2279
## ma1 -0.111903 0.323072 -0.3464 0.7291
## ma2 -0.097203 0.359968 -0.2700 0.7871
## intercept 35.433870 54.992949 0.6443 0.5194
Berdasarkan pendugaan parameter di atas, nilai AIC terkecil dimiliki oleh model ARIMA(0,1,2) namun ada parameter yang tidak signifikan. Namun, model ARIMA(2,1,0) memiliki nilai AIC ketiga terkecil dan parameter model ARIMA(2,1,0) juga seluruhnya lebih banyak signifikan daripada model lain jika intercept dihilangkan. Sehingga, model yang dipilih adalah model ARIMA(2,1,0).
VII. Overfitting
Overfitting dilakukan dengan menambahkan nilai MA yang semula dari ARIMA(2,1,0) menjadi ARIMA(2,1,1). Dan juga mencoba menambahkan nilai AR yang semula dari ARIMA(2,1,0) menjadi ARIMA(3,1,0)
model3a.da<- forecast::Arima(train.diff, order=c(2,0,1),method="ML")
summary(model3a.da) #AIC= 929.73## Series: train.diff
## ARIMA(2,0,1) with non-zero mean
##
## Coefficients:
## ar1 ar2 ma1 mean
## -0.1018 -0.4312 -0.1397 36.1618
## s.e. 0.2833 0.1294 0.3218 57.9669
##
## sigma^2 = 635431: log likelihood = -459.86
## AIC=929.73 AICc=930.91 BIC=939.95
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -1.791302 768.6606 621.6785 61.63982 161.007 0.5629052
## ACF1
## Training set -0.002583302
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.10180 0.28328 -0.3593 0.7193352
## ar2 -0.43117 0.12940 -3.3319 0.0008625 ***
## ma1 -0.13971 0.32183 -0.4341 0.6641995
## intercept 36.16176 57.96694 0.6238 0.5327364
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model3b.da<- forecast::Arima(train.diff, order=c(3,0,0),method="ML")
summary(model3b.da) #AIC= 929.76 ## Series: train.diff
## ARIMA(3,0,0) with non-zero mean
##
## Coefficients:
## ar1 ar2 ar3 mean
## -0.2372 -0.4595 -0.0536 36.3056
## s.e. 0.1324 0.1195 0.1312 58.9774
##
## sigma^2 = 635745: log likelihood = -459.88
## AIC=929.76 AICc=930.93 BIC=939.97
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -2.127473 768.8504 621.448 61.60605 160.8978 0.5626965
## ACF1
## Training set -0.005931505
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.237183 0.132423 -1.7911 0.0732773 .
## ar2 -0.459524 0.119506 -3.8452 0.0001205 ***
## ar3 -0.053646 0.131223 -0.4088 0.6826739
## intercept 36.305619 58.977398 0.6156 0.5381683
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Diperoleh nilai AIC overfitting lebih besar sehingga tetap dipakai model sebelum overfitting.
VIII. 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.
Eksplorasi Sisaan
#Eksplorasi
sisaan.da <- model3.da$residuals
par(mfrow=c(2,2))
qqnorm(sisaan.da)
qqline(sisaan.da, col = "blue", lwd = 2)
plot(c(1:length(sisaan.da)),sisaan.da)
acf(sisaan.da)
pacf(sisaan.da) Berdasarkan plot kuantil-kuantil normal, secara eksplorasi ditunjukkan sisaan cenderung menyebar normal ditandai dengan titik titik yang cenderung mengikuti garis \(45^\circ\). Kemudian dapat dilihat juga lebar pita sisaan yang cenderung sama menandakan bahwa sisaan memiliki ragam yang homogen. Pada ARIMA(2,1,0), plot ACF signifikan pada lag 14 sedangkan plot PACF sisaan signifikan pada lag 12 dan 14 pada 17 lag awal. Kondisi ini akan diuji lebih lanjut dengan uji formal.
Uji Formal
##
## Exact one-sample Kolmogorov-Smirnov test
##
## data: sisaan.da
## D = 0.52632, p-value = 3.775e-15
## 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 Jarque Bera. Hipotesis pada uji Jarque Bera adalah sebagai berikut.
\(H_0\): Sisaan menyebar normal
\(H_1\): Sisaan tidak menyebar normal
Berdasarkan uji KS tersebut, didapat p-value sebesar 3.775e-15 yang kurang dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa sisaan tidak menyebar normal.
#2) Sisaan saling bebas/tidak ada autokorelasi
Box.test(sisaan.da, type = "Ljung") #tak tolak H0 >> sisaan saling bebas##
## Box-Ljung test
##
## data: sisaan.da
## X-squared = 0.048363, df = 1, p-value = 0.8259
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.8259 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa sisaan saling bebas. Hal ini sesuai dengan hasil eksplorasi.
##
## Box-Ljung test
##
## data: (sisaan.da)^2
## X-squared = 0.97205, df = 1, p-value = 0.3242
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.3436 yang lebih dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa ragam sisaan homogen.
#4) Nilai tengah sisaan sama dengan nol
t.test(sisaan.da, mu = 0, conf.level = 0.95) #tak tolak h0 >> nilai tengah sisaan sama dengan 0##
## One Sample t-test
##
## data: sisaan.da
## t = -0.024008, df = 56, p-value = 0.9809
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -208.6031 203.6622
## sample estimates:
## mean of x
## -2.470455
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.9809 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa nilai tengah sisaan sama dengan nol. Hal ini sama dengan hasil eksplorasi.
IX. Peramalan
Peramalan dilakukan menggunakan fungsi forecast() . Contoh peramalan berikut ini dilakukan untuk 30 periode ke depan.
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 59 -245.67984 -1259.5599 768.2002 -1796.276 1304.916
## 60 264.73625 -771.7611 1301.2336 -1320.450 1849.922
## 61 114.49740 -999.6656 1228.6605 -1589.468 1818.463
## 62 -82.36776 -1211.5127 1046.7772 -1809.246 1644.510
## 63 26.78519 -1111.5359 1165.1063 -1714.127 1767.697
## 64 91.83902 -1052.0580 1235.7360 -1657.600 1841.279
## 65 29.09783 -1115.5227 1173.7184 -1721.448 1779.644
## 66 13.26591 -1132.8848 1159.4166 -1739.620 1766.152
## 67 44.75006 -1101.4146 1190.9147 -1708.158 1797.658
## 68 45.15897 -1101.3414 1191.6593 -1708.262 1798.580
## 69 30.96048 -1115.5447 1177.4657 -1722.468 1784.389
## 70 33.79293 -1112.7722 1180.3581 -1719.727 1787.313
## 71 39.55529 -1107.0168 1186.1274 -1713.975 1793.086
## 72 37.06183 -1109.5187 1183.6424 -1716.482 1790.605
## 73 35.00867 -1111.5751 1181.5925 -1718.540 1788.557
## 74 36.56236 -1110.0223 1183.1470 -1716.988 1790.112
## 75 37.15261 -1109.4330 1183.7383 -1716.399 1790.704
## 76 36.33086 -1110.2548 1182.9165 -1717.221 1789.882
## 77 36.24084 -1110.3451 1182.8268 -1717.311 1789.793
## 78 36.62828 -1109.9576 1183.2142 -1716.924 1790.180
## 79 36.58633 -1109.9996 1183.1723 -1716.966 1790.138
## 80 36.42159 -1110.1644 1183.0076 -1717.130 1789.974
## 81 36.47538 -1110.1106 1183.0614 -1717.077 1790.027
## 82 36.53780 -1110.0482 1183.1238 -1717.014 1790.090
## 83 36.50043 -1110.0856 1183.0864 -1717.052 1790.052
## 84 36.48039 -1110.1056 1183.0664 -1717.072 1790.032
## 85 36.50139 -1110.0846 1183.0874 -1717.051 1790.053
## 86 36.50591 -1110.0801 1183.0919 -1717.046 1790.058
## 87 36.49554 -1110.0904 1183.0815 -1717.056 1790.047
## 88 36.49572 -1110.0903 1183.0817 -1717.056 1790.048
Berdasarkan hasil plot ramalan di atas, dapat dilihat bahwa ramalan ARIMA(2,1,0) cenderung stabil hingga akhir periode. Selanjutnya, dapat dicari nilai akurasi antara hasil ramalan dengan data uji sebagai berikut.
pt_1 <- dt_stas1[58] #nilai akhir data latih
hasil.forc.Diff <- data.ramalan.da
hasil <- diffinv(hasil.forc.Diff, differences = 1) + pt_1
#has.1 sama hasilnta dengan: cumsum(c(pt_1,hasil.forc.Diff))
ts.plot(dt_stas1,hasil)perbandingan.da<-matrix(data=c(head(dt_stas2, n=30), hasil[-1]),
nrow = 30, ncol = 2)
colnames(perbandingan.da)<-c("Aktual","Hasil Forecast")
perbandingan.da## Aktual Hasil Forecast
## [1,] 9250 9310.320
## [2,] 9446 9575.056
## [3,] 9704 9689.554
## [4,] 8872 9607.186
## [5,] 3673 9633.971
## [6,] 8940 9725.810
## [7,] 5570 9754.908
## [8,] 6883 9768.174
## [9,] 6791 9812.924
## [10,] 7998 9858.083
## [11,] 7496 9889.043
## [12,] 7273 9922.836
## [13,] 8557 9962.392
## [14,] 8148 9999.454
## [15,] 7973 10034.462
## [16,] 7397 10071.025
## [17,] 7762 10108.177
## [18,] 7674 10144.508
## [19,] 7265 10180.749
## [20,] 8403 10217.377
## [21,] 7763 10253.963
## [22,] 8054 10290.385
## [23,] 7800 10326.860
## [24,] 7758 10363.398
## [25,] 6046 10399.899
## [26,] 6562 10436.379
## [27,] 7811 10472.880
## [28,] 7045 10509.386
## [29,] 7294 10545.882
## [30,] 7001 10582.378
## ME RMSE MAE MPE MAPE ACF1 Theil's U
## Test set -2441.281 2762.423 2442.244 -36.51939 36.52931 0.1375262 1.199523
Diperoleh bahwa nilai MAPE mencapai 36.529%, yang mengindikasikan bahwa model prediksi rata-rata mengalami deviasi sekitar 37% dari nilai sebenarnya. Saat dilakukan pengecekan stasioneritas, ditemukan bahwa data tidak menunjukkan stasioneritas dalam rataan. Dalam analisis ini, masalah ketidakstasioneran dalam rataan telah diatasi. Namun, pada plot sisaan, acf dan pacf signifikan di lag tertentu. Ketika dilakukan uji formal, sisaan tidak menyebar normal. Hal ini dapat berpotensi menjadi salah satu penyebab mengapa nilai MAPE dari model masih relatif tinggi.