Packages

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

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)

Eksplorasi Data

Plot Data Penuh

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.

Plot Data Latih

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.

Plot Data Uji

sahamtest<-datasaham[421:519]
test.ts<-ts(sahamtest)
plot.ts(test.ts, lty=1, xlab="waktu", ylab="Saham", main="Plot Saham Test")

Uji Stasioneritas Data

Plot ACF

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

Uji ADF

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

Plot Box-Cox

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.

Penanganan Ketidakstasioneran Data

Transformasi Box-Cox untuk menstabilkan ragam

lambda <- -0.1969697
train.bc <- BoxCox(train.ts, lambda)

Plot hasil transformasi

plot.ts(train.bc, 
        lty = 1, 
        xlab = "Waktu", 
        ylab = "Harga Saham (Box-Cox Transformed)", 
        main = "Plot Data Saham Setelah Transformasi Box-Cox")

Uji stasioneritas setelah transformasi Box-Cox

acf(train.bc, main = "Plot ACF Setelah Transformasi Box-Cox")

Differencing untuk menangani ketidakstasioneran dalam rataan

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")

Uji ADF setelah transformasi 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

Identifikasi Model

Plot ACF

acf(train.diff)

Berdasarkan plot tersebut, terlihat bahwa plot ACF tidak ada lag yang signifikan.

Plot PACF

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).

Plot EACF

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).

Pendugaan Parameter Model Tentatif

ARIMA(0,1,11)

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

ARIMA(1,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

ARIMA(2,1,2)

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

ARIMA(3,1,3)

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).

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 <- 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.

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

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.