library(ggplot2)
library(tsibble)
##
## Attaching package: 'tsibble'
## The following objects are masked from 'package:base':
##
## intersect, setdiff, union
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(MASS)
library(forecast)
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
library(TTR)
library(aTSA)
##
## 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
library(graphics)
Data yang digunakan dalam penelitian ini merupakan data harga saham mingguan Samsung Electronics Co., Ltd yang diperoleh dari situs yahoo finance. Data diambil dari periode 30 Agustus 2013 hingga 1 September 2023. Data ini mencatat harga penutupan (closing price) setiap akhir minggu perdagangan dan digunakan untuk menganalisis serta memprediksi pergerakan harga saham menggunakan metode ARIMA. Secara keseluruhan, terdapat 500 observasi yang merepresentasikan dinamika harga saham Samsung selama kurun waktu sepuluh tahun terakhir.
library(rio)
datasaham <- import("https://raw.githubusercontent.com/hakimzoelvamahesa/mpdw/main/Data/harga%20saham%20samsung%202013-2023.csv")
datasaham<-datasaham$Close
datasaham.ts<-ts(datasaham)
plot.ts(datasaham.ts, lty=1, xlab="waktu", ylab="Kurs", main="Plot Data Kurs")
Berdasarkan plot data deret waktu, terlihat bahwa data cenderung memiliki trend yang naik.
sahamtrain<-datasaham[1:420]
train.ts<-ts(sahamtrain)
plot.ts(train.ts, lty=1, xlab="waktu", ylab="Sahams", main="Plot Saham Train")
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.
sahamtest<-datasaham[421:519]
test.ts<-ts(sahamtest)
plot.ts(test.ts, lty=1, xlab="waktu", ylab="Saham", main="Plot Saham Test")
acf(train.ts)
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
tseries::adf.test(train.ts)
##
## Augmented Dickey-Fuller Test
##
## data: train.ts
## Dickey-Fuller = -2.6281, Lag order = 7, p-value = 0.3121
## 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.3121 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
index <- seq(1:420)
bc = boxcox(train.ts~index, lambda = seq(-1.5,1.5,by=0.1))
#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] -0.1969697
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] -0.34848485 -0.31818182 -0.28787879 -0.25757576 -0.22727273 -0.19696970
## [7] -0.16666667 -0.13636364 -0.10606061 -0.07575758 -0.04545455
Plot Boxcox menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar -0.1969697 dan pada selang kepercayaan 95% nilai memiliki batas bawah -0.34848485 dan batas atas -0.04545455. Selang tersebut tidak memuat nilai satu sehingga dapat dikatakan bahwa data tersebut tidak stasioner dalam ragam.
lambda <- -0.1969697
train.bc <- BoxCox(train.ts, lambda)
plot.ts(train.bc,
lty = 1,
xlab = "Waktu",
ylab = "Harga Saham (Box-Cox Transformed)",
main = "Plot Data Saham Setelah Transformasi Box-Cox")
acf(train.bc, main = "Plot ACF Setelah Transformasi Box-Cox")
train.diff <- diff(train.bc, differences = 1)
plot.ts(train.diff,
lty = 1,
xlab = "Waktu",
ylab = "Data Difference 1 (Box-Cox)",
main = "Plot Data Setelah Transformasi Box-Cox dan Differencing")
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.7346, 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 ACF, sehingga dalam hal ini ketidakstasioneran data sudah berhasil ditangani dan dapat dilanjutkan ke pemodelan
acf(train.diff)
Berdasarkan plot tersebut, terlihat bahwa plot ACF tidak ada lag yang signifikan.
pacf(train.diff)
Berdasarkan plot tersebut, terlihat bahwa plot PACF cenderung cuts off pada lag ke 11 sehingga jika plot ACF dianggap tails of, maka model tentatifnya adalah ARIMA(11,1,0).
eacf(train.diff)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o o o o o o o o o o o o o o
## 1 x o 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 x o o o o o o o o o o o
## 4 x x o o o o o o o o o o o o
## 5 o x o o x 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 o o x o 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,1), ARIMA(2,1,2), dan ARIMA(3,1,3).
model1.da=Arima(train.diff, order=c(0,1,11),method="ML")
summary(model1.da) #AIC=-3320.69
## Series: train.diff
## ARIMA(0,1,11)
##
## Coefficients:
## ma1 ma2 ma3 ma4 ma5 ma6 ma7 ma8
## -1.0643 0.0005 0.1296 -0.0087 -0.1396 0.1007 0.0829 -0.1030
## s.e. 0.0514 0.0735 0.0727 0.0745 0.0780 0.0649 0.0786 0.0838
## ma9 ma10 ma11
## -0.0339 0.0535 -0.0177
## s.e. 0.0715 0.0724 0.0581
##
## sigma^2 = 1.984e-05: log likelihood = 1672.34
## AIC=-3320.69 AICc=-3319.91 BIC=-3272.26
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.0001120798 0.004390497 0.003399194 NaN Inf 0.6685837
## ACF1
## Training set -0.005007206
lmtest::coeftest(model1.da) #hanaya parameter ma1 yang signifikan
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -1.06425672 0.05135968 -20.7216 < 2e-16 ***
## ma2 0.00050858 0.07350763 0.0069 0.99448
## ma3 0.12955220 0.07267298 1.7827 0.07464 .
## ma4 -0.00867190 0.07445995 -0.1165 0.90728
## ma5 -0.13958110 0.07800943 -1.7893 0.07357 .
## ma6 0.10067744 0.06494997 1.5501 0.12112
## ma7 0.08294536 0.07861779 1.0550 0.29140
## ma8 -0.10302866 0.08380668 -1.2294 0.21894
## ma9 -0.03394163 0.07153154 -0.4745 0.63514
## ma10 0.05353075 0.07238565 0.7395 0.45959
## ma11 -0.01773228 0.05811535 -0.3051 0.76027
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model2.da=Arima(train.diff, order=c(1,1,1),method="ML")
summary(model2.da) #AIC=-3328.19
## Series: train.diff
## ARIMA(1,1,1)
##
## Coefficients:
## ar1 ma1
## -0.0671 -1.0000
## s.e. 0.0488 0.0081
##
## sigma^2 = 1.991e-05: log likelihood = 1667.1
## AIC=-3328.19 AICc=-3328.13 BIC=-3316.09
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.000123154 0.004445853 0.003448607 NaN Inf 0.6783026
## ACF1
## Training set -0.008287902
lmtest::coeftest(model2.da) #seluruh parameter signifikan
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.0671421 0.0488134 -1.3755 0.169
## ma1 -0.9999995 0.0081367 -122.8993 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model3.da=Arima(train.diff, order=c(2,1,2),method="ML")
summary(model3.da) #AIC=-3327.43
## Series: train.diff
## ARIMA(2,1,2)
##
## Coefficients:
## ar1 ar2 ma1 ma2
## -0.3130 -0.1013 -0.7587 -0.2413
## s.e. 0.3022 0.0507 0.3013 0.3011
##
## sigma^2 = 1.984e-05: log likelihood = 1668.72
## AIC=-3327.43 AICc=-3327.29 BIC=-3307.26
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.0001358039 0.004427946 0.00342569 NaN Inf 0.6737951
## ACF1
## Training set -0.0006452616
lmtest::coeftest(model3.da) #hanya parameter ma 1 yang signifikan
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.313005 0.302168 -1.0359 0.30027
## ar2 -0.101306 0.050662 -1.9996 0.04554 *
## ma1 -0.758663 0.301262 -2.5183 0.01179 *
## ma2 -0.241296 0.301121 -0.8013 0.42294
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
model4.da=Arima(train.diff, order=c(3,1,3),method="ML")
summary(model4.da) #AIC=-3327.88
## Series: train.diff
## ARIMA(3,1,3)
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 ma3
## -0.2222 -0.6853 0.0207 -0.8459 0.4534 -0.6074
## s.e. 0.2835 0.2393 0.0712 0.2796 0.3403 0.2501
##
## sigma^2 = 1.973e-05: log likelihood = 1670.94
## AIC=-3327.88 AICc=-3327.61 BIC=-3299.63
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.000128171 0.004404769 0.003411816 NaN Inf 0.6710662
## ACF1
## Training set -0.003202924
lmtest::coeftest(model4.da) #seluruh parameter signifikan
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.222166 0.283469 -0.7837 0.433194
## ar2 -0.685266 0.239300 -2.8636 0.004188 **
## ar3 0.020699 0.071193 0.2907 0.771250
## ma1 -0.845949 0.279580 -3.0258 0.002480 **
## ma2 0.453396 0.340274 1.3324 0.182715
## ma3 -0.607441 0.250150 -2.4283 0.015170 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan pendugaan parameter di atas, nilai AIC terkecil dimiliki oleh model ARIMA(1,1,1) sehingga model yang dipilih adalah model ARIMA(1,1,1).
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.da <- model2.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)
par(mfrow = c(1,1))
Berdasarkan plot kuantil-kuantil normal, secara eksplorasi ditunjukkan sisaan tidak menyebar normal ditandai dengan titik titik yang cenderung tidak mengikuti garis \(45^{\circ}\). Kemudian dapat dilihat juga lebar pita sisaan yang cenderung tidak sama menandakan bahwa sisaan memiliki ragam yang heterogen. Plot ACF dan PACF sisaan ARIMA(3,1,3) juga tidak signifikan pada 20 lag awal yang menandakan saling bebas. Kondisi ini akan diuji lebih lanjut dengan uji formal.
#1) Sisaan Menyebar Normal
ks.test(sisaan.da,"pnorm") #tak tolak H0 > sisaan menyebar normal
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: sisaan.da
## D = 0.49426, 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 2.2e-16 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") #tak tolak H0 > sisaan saling bebas
##
## Box-Ljung test
##
## data: sisaan.da
## X-squared = 0.028987, df = 1, p-value = 0.8648
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.8648 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa sisaan saling bebas. Hal ini berbeda dengan eksplorasi.
#3) Sisaan homogen
Box.test((sisaan.da)^2, type = "Ljung") #tak tolak H0 > sisaan homogen
##
## Box-Ljung test
##
## data: (sisaan.da)^2
## X-squared = 1.0315, df = 1, p-value = 0.3098
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.3098 yang lebih besar 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.56656, df = 418, p-value = 0.5713
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -0.0003041211 0.0005504292
## sample estimates:
## mean of x
## 0.000123154
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.5713 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa nilai tengah sisaan sama dengan nol.
Peramalan dilakukan menggunakan fungsi forecast() .
Contoh peramalan berikut ini dilakukan untuk 98 hari ke depan.
#---FORECAST---#
ramalan.da <- forecast::forecast(model2.da, h = 98)
ramalan.da
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 421 0.0004725663 -0.005252351 0.006197484 -0.008282939 0.009228072
## 422 0.0002667089 -0.005470184 0.006003602 -0.008507112 0.009040530
## 423 0.0002805306 -0.005456478 0.006017539 -0.008493467 0.009054528
## 424 0.0002796026 -0.005457402 0.006016608 -0.008494389 0.009053595
## 425 0.0002796649 -0.005457340 0.006016670 -0.008494328 0.009053657
## 426 0.0002796607 -0.005457345 0.006016666 -0.008494332 0.009053653
## 427 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 428 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 429 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 430 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 431 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 432 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 433 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 434 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 435 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 436 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 437 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 438 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 439 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 440 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 441 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 442 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 443 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 444 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 445 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 446 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 447 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 448 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 449 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 450 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 451 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 452 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 453 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 454 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 455 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 456 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 457 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 458 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 459 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 460 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 461 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 462 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 463 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 464 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 465 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 466 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 467 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 468 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 469 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 470 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 471 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 472 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 473 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 474 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 475 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 476 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 477 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 478 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 479 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 480 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 481 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 482 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 483 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 484 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 485 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 486 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 487 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 488 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 489 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 490 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 491 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 492 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 493 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 494 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 495 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 496 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 497 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 498 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 499 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 500 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 501 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 502 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 503 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 504 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 505 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 506 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 507 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 508 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 509 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 510 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 511 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 512 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 513 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 514 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 515 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 516 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 517 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
## 518 0.0002796610 -0.005457344 0.006016666 -0.008494331 0.009053653
data.ramalan.da <- ramalan.da$mean
plot(ramalan.da)
Berdasarkan hasil plot ramalan di atas, dapat dilihat bahwa ramalan ARIMA(3,1,3) cenderung stabil hingga akhir periode. Selanjutnya, dapat dicari nilai akurasi antara hasil ramalan dengan data uji sebagai berikut.
library(forecast)
pt_1 <- train.ts[420] #nilai akhir data latih
hasil.forc.Diff <- data.ramalan.da
hasil <- diffinv(hasil.forc.Diff, differences = 1) + pt_1 # Mengembalikan nilai hasil differencing
#has.1 sama hasilnta dengan: cumsum(c(pt_1,hasil.forc.Diff))
ts.plot(train.ts,hasil)
perbandingan.da<-matrix(data=c(head(test.ts, n=98), hasil[-1]),
nrow = 98, ncol = 2)
colnames(perbandingan.da)<-c("Aktual","Hasil Forecast")
perbandingan.da
## Aktual Hasil Forecast
## [1,] 70100 71500.00
## [2,] 70400 71500.00
## [3,] 69800 71500.00
## [4,] 70200 71500.00
## [5,] 70600 71500.00
## [6,] 71200 71500.00
## [7,] 72300 71500.00
## [8,] 75600 71500.00
## [9,] 76900 71500.00
## [10,] 78000 71500.00
## [11,] 80500 71500.00
## [12,] 78300 71500.00
## [13,] 78300 71500.00
## [14,] 77300 71500.00
## [15,] 75600 71500.00
## [16,] 73300 71500.00
## [17,] 74000 71500.00
## [18,] 74900 71500.01
## [19,] 74300 71500.01
## [20,] 71900 71500.01
## [21,] 71500 71500.01
## [22,] 70000 71500.01
## [23,] 70700 71500.01
## [24,] 69800 71500.01
## [25,] 69100 71500.01
## [26,] 67800 71500.01
## [27,] 66600 71500.01
## [28,] 67000 71500.01
## [29,] 67400 71500.01
## [30,] 66500 71500.01
## [31,] 66500 71500.01
## [32,] 68000 71500.01
## [33,] 66500 71500.01
## [34,] 66800 71500.01
## [35,] 63800 71500.01
## [36,] 59800 71500.01
## [37,] 58400 71500.01
## [38,] 56200 71500.01
## [39,] 58700 71500.01
## [40,] 60000 71500.01
## [41,] 61300 71500.01
## [42,] 61400 71500.01
## [43,] 61500 71500.01
## [44,] 60200 71500.01
## [45,] 60900 71500.01
## [46,] 60000 71500.01
## [47,] 57500 71500.01
## [48,] 55600 71500.01
## [49,] 56200 71500.01
## [50,] 54500 71500.01
## [51,] 53100 71500.01
## [52,] 56200 71500.01
## [53,] 56300 71500.02
## [54,] 55900 71500.02
## [55,] 57300 71500.02
## [56,] 59400 71500.02
## [57,] 62900 71500.02
## [58,] 61800 71500.02
## [59,] 61000 71500.02
## [60,] 60400 71500.02
## [61,] 60400 71500.02
## [62,] 59500 71500.02
## [63,] 58100 71500.02
## [64,] 55300 71500.02
## [65,] 59000 71500.02
## [66,] 60800 71500.02
## [67,] 61800 71500.02
## [68,] 64600 71500.02
## [69,] 63800 71500.02
## [70,] 62800 71500.02
## [71,] 62600 71500.02
## [72,] 61300 71500.02
## [73,] 60500 71500.02
## [74,] 59500 71500.02
## [75,] 61300 71500.02
## [76,] 63000 71500.02
## [77,] 64000 71500.02
## [78,] 65000 71500.02
## [79,] 65100 71500.02
## [80,] 65700 71500.02
## [81,] 65500 71500.02
## [82,] 65100 71500.02
## [83,] 64100 71500.02
## [84,] 68400 71500.02
## [85,] 70300 71500.02
## [86,] 72200 71500.02
## [87,] 72000 71500.02
## [88,] 71800 71500.02
## [89,] 71600 71500.03
## [90,] 72200 71500.03
## [91,] 69900 71500.03
## [92,] 73400 71500.03
## [93,] 70300 71500.03
## [94,] 70600 71500.03
## [95,] 68300 71500.03
## [96,] 67500 71500.03
## [97,] 66300 71500.03
## [98,] 67100 71500.03
accuracy(ts(hasil[-1]), head(test.ts, n=98))
## ME RMSE MAE MPE MAPE ACF1 Theil's U
## Test set -5696.953 8553.797 7011.234 -9.685851 11.39684 0.9649523 5.616323
Diperoleh nilai MAPE sebesar 11.39696. Model ini dikategorikan sebagai model yang kurang baik karena nilai MAPE > 10. Adapun untuk mendapatkan hasil yang lebih baik bisa menggunakan pendekatan metode peramalan machine learning.