Penerapan Model ARIMA pada Data Harga Emas Eropa
Data
Library
library("readxl")
library("tseries")
library("forecast")
library("TTR")
library("TSA")
library("graphics")
library("dplyr")
Import Data
Data yang digunakan adalah data Harga Emas bulanan di Eropa dari Bulan Januari tahun 1999 sampai Desember tahun 2012 yang merupakan data time series yang dipilih/tentukan pada tugas praktikum 1. Data ini diperoleh dari Kaggle : https://www.kaggle.com/odins0n/monthly-gold-prices.
<- read_excel("D:/MATERI KULIAH S2 IPB/SEMESTER 2/DERET WAKTU/Harga_Emas_Eropa.xlsx")
harga_emas ::data.table(harga_emas) data.table
## Bulan Eropa
## 1: 1999-01-01 251.3
## 2: 1999-02-01 261.5
## 3: 1999-03-01 258.9
## 4: 1999-04-01 270.9
## 5: 1999-05-01 257.6
## ---
## 164: 2012-08-01 1307.8
## 165: 2012-09-01 1380.5
## 166: 2012-10-01 1326.6
## 167: 2012-11-01 1327.1
## 168: 2012-12-01 1257.2
<-ts(harga_emas$Eropa) harga.ts
Plot Data
ts.plot(harga.ts)
Berdasarkan plot deret waktu diatas, terlihat bahwa data cenderung memiliki pola trend.
Partisi Data
Data Harga Emas Eropa di partisi menjadi dua bagian yaitu data training (Januari 1999-Desember 2008) dan data testing (Januari 2009-Desember 2012).
<-subset(harga.ts, start = 1, end =120 )
harga.training harga.training
## Time Series:
## Start = 1
## End = 120
## Frequency = 1
## [1] 251.3 261.5 258.9 270.9 257.6 253.1 238.8 241.2 280.8 284.6 289.4 289.6
## [13] 289.6 305.0 289.2 301.8 293.6 300.6 298.7 311.6 310.1 312.1 309.1 292.3
## [25] 284.4 290.0 291.5 296.8 315.6 319.6 303.9 300.5 321.8 309.5 307.7 310.5
## [37] 327.9 343.2 345.5 342.0 349.6 322.5 310.7 319.0 327.5 320.0 320.7 330.9
## [49] 342.3 322.4 306.9 301.8 307.3 301.3 315.2 342.1 333.2 332.3 332.3 330.0
## [61] 321.8 318.6 344.8 324.1 322.0 325.3 325.1 335.1 334.7 334.5 341.2 320.5
## [73] 323.9 328.1 328.9 337.5 335.7 361.1 353.2 352.3 392.5 393.0 420.4 434.9
## [85] 468.4 466.4 480.9 511.3 508.4 479.8 495.6 487.1 473.1 473.0 487.9 479.3
## [97] 500.6 502.8 497.1 496.1 489.8 481.7 486.2 492.9 522.5 545.7 533.8 570.3
## [109] 623.6 639.9 589.1 559.5 570.0 590.4 588.4 565.8 629.7 576.3 641.9 625.7
<-subset(harga.ts, start = 121, end = 168)
harga.test harga.test
## Time Series:
## Start = 121
## End = 168
## Frequency = 1
## [1] 717.5 749.6 690.3 666.6 689.2 666.2 662.3 665.8 681.2 704.9
## [11] 783.1 758.0 775.9 812.1 824.4 886.9 984.1 1015.6 897.3 980.4
## [21] 957.4 969.0 1062.8 1047.7 967.9 1021.6 1014.0 1035.0 1068.8 1038.4
## [31] 1133.3 1259.6 1207.4 1234.6 1297.0 1179.4 1332.3 1323.2 1248.4 1247.6
## [41] 1260.1 1259.6 1317.0 1307.8 1380.5 1326.6 1327.1 1257.2
Plot Data Partisi
# data training
plot.ts(harga.training, main="Data Training Harga Emas Eropa", xlab="Bulan", ylab="Harga Emas")
# data testing
plot.ts(harga.test, main="Data Testing Harga Emas Eropa", xlab="Bulan", ylab="Harga Emas")
Berdasarkan plot deret waktu diatas, terlihat bahwa data training dan testing cenderung memiliki pola trend.
Stasioneritas Data
Plot ACF
acf(harga.training, lag.max=20)
Berdasarkan plot ACF di atas terlihat bahwa nilai autokorelasi turun secara perlahan yang mengindikasikan bahwa data tidak stasioner.
Uji ADF
adf.test(harga.training, alternative = c("stationary"),
k = trunc((length(harga.training)-1)^(1/3))) # Augmented Dickey-Fuller
##
## Augmented Dickey-Fuller Test
##
## data: harga.training
## Dickey-Fuller = -1.2988, Lag order = 4, p-value = 0.8678
## alternative hypothesis: stationary
Berdasarkan hasil uji ADF diperoleh p-value sebesar 0.8678 > 0.05 yang berarti bahwa \(H_0\) gagal ditolak atau data tidak stasioner. Karena data tidak stasioner maka selanjutnya dilakukan differencing untuk membuat data stasioner sebelum dilakukan identifikasi model tentatif.
Differencing
# Differencing Ordo 1
<- diff(harga.training, difference=1)
gold.dif1 plot.ts(gold.dif1, lty=1, xlab="Waktu", ylab="Data Harga Emas Eropa Diff Ordo 1")
points(gold.dif1)
# Cek Kestasioneran
acf(gold.dif1, lag.max=20)
adf.test(gold.dif1, alternative = c("stationary"),
k = trunc((length(gold.dif1)-1)^(1/3))) # Augmented Dickey-Fuller
## Warning in adf.test(gold.dif1, alternative = c("stationary"), k =
## trunc((length(gold.dif1) - : p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: gold.dif1
## Dickey-Fuller = -5.0547, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Berdasarkan plot data dan ACF yang tidak turun secara melandai, menunjukkan bahwa data stasioner. Selanjutnya, berdasarkan hasil uji ADF, diperoleh nilai p-value < 0.05 yang berarti \(H_0\) ditolak, sehingga dapat disimpulkan bahwa Data Harga Emas Eropa telah stasioner setelah dilakukan differencing ordo 1. Karena data telah stasioner selanjutnya akan dilakukan identifikasi model tentatif.
Identifikasi Model Tentatif
Plot ACF
acf(gold.dif1, lag.max=20)
Plot PACF
pacf(gold.dif1, lag.max=20)
EACF
eacf(gold.dif1)
## 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 o o o o o o o o o o o o o o
## 2 o 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 o o o o o o o o o o o o o
## 5 x x x o o o o o o o o o o o
## 6 o o x x x o o o o o o o o o
## 7 x o o o x o x o o o o o o o
Kandidat Model
Berdasarkan plot ACF (cut off pada lag ke-1), PACF (cut off pada lag ke-1), dan EACF, diperoleh kandidat model:
ARIMA (0,1,1)
ARIMA (1,1,0)
ARIMA (1,1,1)
Pendugaan Parameter dan Penentuan Model Terbaik
<-arima(gold.dif1, order=c(0,0,1), include.mean = TRUE,method="ML") #ARIMA (0,1,1)
arima011
<-arima(gold.dif1, order=c(1,0,0), include.mean = TRUE,method="ML") #ARIMA (1,1,0)
arima110
<-arima(gold.dif1, order=c(1,0,1), include.mean = TRUE,method="ML") #ARIMA (1,1,1) arima111
arima011
##
## Call:
## arima(x = gold.dif1, order = c(0, 0, 1), include.mean = TRUE, method = "ML")
##
## Coefficients:
## ma1 intercept
## -0.1924 3.1504
## s.e. 0.0897 1.3192
##
## sigma^2 estimated as 316.2: log likelihood = -511.39, aic = 1026.77
::coeftest(arima011) lmtest
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.192387 0.089671 -2.1455 0.03191 *
## intercept 3.150439 1.319215 2.3881 0.01693 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
arima110
##
## Call:
## arima(x = gold.dif1, order = c(1, 0, 0), include.mean = TRUE, method = "ML")
##
## Coefficients:
## ar1 intercept
## -0.1907 3.1621
## s.e. 0.0901 1.3711
##
## sigma^2 estimated as 316.3: log likelihood = -511.39, aic = 1026.78
::coeftest(arima110) lmtest
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.19067 0.09008 -2.1167 0.03429 *
## intercept 3.16213 1.37109 2.3063 0.02109 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
arima111
##
## Call:
## arima(x = gold.dif1, order = c(1, 0, 1), include.mean = TRUE, method = "ML")
##
## Coefficients:
## ar1 ma1 intercept
## -0.0788 -0.1150 3.1552
## s.e. 0.6830 0.6854 1.3403
##
## sigma^2 estimated as 316.2: log likelihood = -511.38, aic = 1028.76
::coeftest(arima111) lmtest
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.078766 0.683013 -0.1153 0.90819
## ma1 -0.114959 0.685398 -0.1677 0.86680
## intercept 3.155188 1.340336 2.3540 0.01857 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
<-data.frame(
aic.arima"Model"=c("ARIMA(0,1,1)", "ARIMA(1,1,0)", "ARIMA(1,1,1)"),
"AIC"=c(arima011$aic, arima110$aic, arima111$aic))
aic.arima
## Model AIC
## 1 ARIMA(0,1,1) 1026.771
## 2 ARIMA(1,1,0) 1026.784
## 3 ARIMA(1,1,1) 1028.758
Berdasarkan hasil di atas dapat disimpulkan bahwa ARIMA (0,1,1)
merupakan model terbaik karena model tersebut memiliki nilai AIC
terkecil yaitu 1026.771. Selain itu, apabila dilihat dari hasil uji
signifikansi penduga parameter, dengan fungsi coeftest
terlihat bahwa seluruh koefisien yang telah signifikan terhadap model.
Selanjutnya, akan dilihat model terbaik berdasarkan fungsi
auto.arima
:
auto.arima(harga.training, trace = TRUE)
##
## ARIMA(2,1,2) with drift : 1034.626
## ARIMA(0,1,0) with drift : 1031.283
## ARIMA(1,1,0) with drift : 1028.993
## ARIMA(0,1,1) with drift : 1028.98
## ARIMA(0,1,0) : 1032.749
## ARIMA(1,1,1) with drift : 1031.109
## ARIMA(0,1,2) with drift : 1031.115
## ARIMA(1,1,2) with drift : 1033.036
## ARIMA(0,1,1) : 1032.132
##
## Best model: ARIMA(0,1,1) with drift
## Series: harga.training
## ARIMA(0,1,1) with drift
##
## Coefficients:
## ma1 drift
## -0.1924 3.1510
## s.e. 0.0897 1.3192
##
## sigma^2 = 321.7: log likelihood = -511.39
## AIC=1028.77 AICc=1028.98 BIC=1037.11
Model terbaik yang dihasilkan dengan menggunakan fungsi
auto.arima
sama dengan model terbaik yang dipilih
berdasarkan nilai AIC terkecil yaitu ARIMA (0,1,1).
Diagnostik Model
Diagnostik model dilakukan untuk mengetahui apakah sisaan dari model yang dibangun telah memenuhi asumsi pemodelan. Asumsi sisaan yang harus terpenuhi pada model ARIMA(p,d,q) adalah sebagai berikut:
Sisaan saling bebas (tidak ada autokorelasi) dan identik
Sisaan mengikuti sebaran Normal (0, \(\sigma^2\))
Eksploratif
Berikut dilakukan pemeriksaan asumsi model secara eksploratif melalui Normal Q-Q Plot, Plot ACF, dan PACF.
.011y<-arima(harga.training, order=c(0,1,1), include.mean = TRUE,method="ML") #ARIMA (0,1,1)
arima<- arima.011y$residuals
sisaan011
# Eksplorasi
par(mfrow=c(2,2))
qqnorm(sisaan011)
qqline(sisaan011, col = "blue", lwd = 2)
plot(c(1:length(sisaan011)),sisaan011)
acf(sisaan011)
pacf(sisaan011)
Berdasarkan hasil diatas, secara eksploratif Normal Q-Q Plot menunjukkan bahwa sisaan tidak mengikuti sebaran normal karena banyak titik-titik yang tidak berada di sekitar garis. Selanjutnya, apabila dilihat dari plot ACF dan PACF terlihat bahwa tidak ada lag yang signifikan. Hal ini menunjukkan bahwa tidak ada gejala autokorelasi pada sisaan. Selanjutnya, untuk memastikan kembali akan dilakukan uji asumsi secara formal.
Uji Non-Autokorelasi dengan Ljung-Box test
Box.test(sisaan011, lag = 23 ,type = "Ljung")
##
## Box-Ljung test
##
## data: sisaan011
## X-squared = 16.108, df = 23, p-value = 0.8506
Berdasarkan hasil uji Ljung-Box di atas dapat disimpulkan bahwa \(H_0\) tidak ditolak karena p-value=0.8506 > 0.05 yang berarti tidak terdapat gejala autokorelasi pada sisaan dari model ARIMA (0,1,1) atau antar \(e_t\) tidak berkorelasi.
Uji Normalitas dengan Kolmogorov-Smirnov test
ks.test(sisaan011,"pnorm")
##
## One-sample Kolmogorov-Smirnov test
##
## data: sisaan011
## D = 0.4631, p-value < 2.2e-16
## alternative hypothesis: two-sided
Berdasarkan hasil uji Kolmogorov-Smirnov di atas dapat disimpulkan bahwa \(H_0\) ditolak karena p-value < 0.05 sehingga sisaan dari model ARIMA (0,1,1) tidak mengikuti sebaran Normal.
Uji Nilai Tengah Sisaan
# Uji nilai tengah sisaan
t.test(sisaan011, mu = 0, alternative = "two.sided")
##
## One Sample t-test
##
## data: sisaan011
## t = 2.2501, df = 119, p-value = 0.02628
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 0.4389387 6.8764096
## sample estimates:
## mean of x
## 3.657674
Berdasarkan hasil uji nilai tengah sisaan di atas dapat disimpulkan bahwa \(H_0\) ditolak karena p-value < 0.05 sehingga nilai tengah sisaan tidak sama dengan nol.
Overfitting Model
Overfitting model dilakukan dengan menggunakan:
ARIMA (0,1,2)
ARIMA (1,1,1)
.012<-arima(gold.dif1, order=c(0,0,2), include.mean = TRUE,method="ML") #ARIMA (0,1,2)
arima
::coeftest(arima.012) lmtest
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.1932510 0.0909587 -2.1246 0.03362 *
## ma2 0.0074769 0.0911629 0.0820 0.93463
## intercept 3.1539356 1.3301027 2.3712 0.01773 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
.111<-arima(gold.dif1, order=c(1,0,1), include.mean = TRUE,method="ML") #ARIMA (1,1,1)
arima
::coeftest(arima.111) lmtest
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.078766 0.683013 -0.1153 0.90819
## ma1 -0.114959 0.685398 -0.1677 0.86680
## intercept 3.155188 1.340336 2.3540 0.01857 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Karena koefisien penduga parameter pada model ARIMA (0,1,2) dan ARIMA (1,1,1) tidak nyata/tidak signifikan maka model yang dipilih tetap model ARIMA (0,1,1).
Ukuran keakuratan ramalan Model ARIMA (0,1,1)
#plot dugaan dengan data asli
<- fitted(arima.011y)
dugaan cbind(harga.training,dugaan)
## Time Series:
## Start = 1
## End = 120
## Frequency = 1
## harga.training dugaan
## 1 251.3 251.0487
## 2 261.5 251.4045
## 3 258.9 260.0583
## 4 270.9 259.0671
## 5 257.6 269.1930
## 6 253.1 259.2724
## 7 238.8 253.9904
## 8 241.2 240.9914
## 9 280.8 241.1699
## 10 284.6 275.0829
## 11 289.4 283.2271
## 12 289.6 288.5095
## 13 289.6 289.4427
## 14 305.0 289.5773
## 15 289.2 302.7751
## 16 301.8 291.1584
## 17 293.6 300.2648
## 18 300.6 294.5615
## 19 298.7 299.7289
## 20 311.6 298.8484
## 21 310.1 309.7604
## 22 312.1 310.0510
## 23 309.1 311.8044
## 24 292.3 309.4901
## 25 284.4 294.7799
## 26 290.0 285.8974
## 27 291.5 289.4082
## 28 296.8 291.1982
## 29 315.6 295.9919
## 30 319.6 312.7713
## 31 303.9 318.6149
## 32 300.5 306.0228
## 33 321.8 301.2967
## 34 309.5 318.8422
## 35 307.7 310.8477
## 36 310.5 308.1541
## 37 327.9 310.1616
## 38 343.2 325.3410
## 39 345.5 340.6236
## 40 342.0 344.7965
## 41 349.6 342.4034
## 42 322.5 348.5618
## 43 310.7 326.2597
## 44 319.0 312.9447
## 45 327.5 318.1265
## 46 320.0 326.1478
## 47 320.7 320.8869
## 48 330.9 320.7270
## 49 342.3 329.4324
## 50 322.4 340.4437
## 51 306.9 325.0030
## 52 301.8 309.5116
## 53 307.3 302.9125
## 54 301.3 306.6671
## 55 315.2 302.0743
## 56 342.1 313.3065
## 57 333.2 337.9462
## 58 332.3 333.8847
## 59 332.3 332.5286
## 60 330.0 332.3330
## 61 321.8 330.3366
## 62 318.6 323.0315
## 63 344.8 319.2393
## 64 324.1 341.1126
## 65 322.0 326.5543
## 66 325.3 322.6570
## 67 325.1 324.9187
## 68 335.1 325.0738
## 69 334.7 333.6536
## 70 334.5 334.5490
## 71 341.2 334.5071
## 72 320.5 340.2345
## 73 323.9 323.3469
## 74 328.1 323.8202
## 75 328.9 327.4826
## 76 337.5 328.6955
## 77 335.7 336.2299
## 78 361.1 335.7764
## 79 353.2 357.4468
## 80 352.3 353.8126
## 81 392.5 352.5182
## 82 393.0 386.7322
## 83 420.4 392.0958
## 84 434.9 416.3168
## 85 468.4 432.2192
## 86 466.4 463.1805
## 87 480.9 465.9356
## 88 511.3 478.7412
## 89 508.4 506.6030
## 90 479.8 508.1408
## 91 495.6 483.8885
## 92 487.1 493.9105
## 93 473.1 488.0825
## 94 473.0 475.2614
## 95 487.9 473.3262
## 96 479.3 485.7976
## 97 500.6 480.2373
## 98 502.8 497.6625
## 99 497.1 502.0589
## 100 496.1 497.8154
## 101 489.8 496.3475
## 102 481.7 490.7445
## 103 486.2 483.0048
## 104 492.9 485.7391
## 105 522.5 491.8670
## 106 545.7 518.0808
## 107 533.8 541.7156
## 108 570.3 534.9419
## 109 623.6 565.1992
## 110 639.9 615.1750
## 111 589.1 636.3332
## 112 559.5 595.9139
## 113 570.0 564.7531
## 114 590.4 569.2431
## 115 588.4 587.3479
## 116 565.8 588.2482
## 117 629.7 569.0384
## 118 576.3 620.9489
## 119 641.9 582.7411
## 120 625.7 633.3657
plot.ts(harga.training, xlab="Month", ylab="Data")
points(harga.training)
par(col="red")
lines(dugaan)
par(col="black")
Berdasarkan plot data aktual vs dugaan di atas terlihat bahwa nilai dan pola dugaan yang dihasilkan dari model ARIMA (0,1,1) mendekati nilai aktualnya.
#forecast
<- forecast::forecast(harga.training,model=arima.011y, h=48)) (ramalan_arima011
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 121 626.8059 603.5050 650.1067 591.1702 662.4415
## 122 626.8059 596.1381 657.4737 579.9035 673.7082
## 123 626.8059 590.2259 663.3859 570.8616 682.7501
## 124 626.8059 585.1444 668.4673 563.0901 690.5216
## 125 626.8059 580.6186 672.9931 556.1686 697.4431
## 126 626.8059 576.4984 677.1133 549.8672 703.7445
## 127 626.8059 572.6909 680.9208 544.0442 709.5675
## 128 626.8059 569.1343 684.4774 538.6048 715.0069
## 129 626.8059 565.7846 687.8271 533.4819 720.1298
## 130 626.8059 562.6095 691.0022 528.6260 724.9857
## 131 626.8059 559.5842 694.0276 523.9991 729.6126
## 132 626.8059 556.6892 696.9225 519.5718 734.0400
## 133 626.8059 553.9092 699.7025 515.3201 738.2917
## 134 626.8059 551.2314 702.3804 511.2246 742.3871
## 135 626.8059 548.6452 704.9665 507.2695 746.3422
## 136 626.8059 546.1419 707.4698 503.4410 750.1707
## 137 626.8059 543.7140 709.8977 499.7279 753.8838
## 138 626.8059 541.3551 712.2566 496.1202 757.4915
## 139 626.8059 539.0595 714.5522 492.6094 761.0023
## 140 626.8059 536.8225 716.7892 489.1882 764.4235
## 141 626.8059 534.6398 718.9719 485.8500 767.7617
## 142 626.8059 532.5076 721.1041 482.5891 771.0226
## 143 626.8059 530.4225 723.1892 479.4003 774.2114
## 144 626.8059 528.3816 725.2301 476.2790 777.3327
## 145 626.8059 526.3822 727.2295 473.2211 780.3906
## 146 626.8059 524.4218 729.1899 470.2230 783.3888
## 147 626.8059 522.4983 731.1135 467.2811 786.3306
## 148 626.8059 520.6095 733.0022 464.3926 789.2191
## 149 626.8059 518.7538 734.8579 461.5545 792.0572
## 150 626.8059 516.9295 736.6823 458.7644 794.8473
## 151 626.8059 515.1349 738.4768 456.0198 797.5919
## 152 626.8059 513.3687 740.2430 453.3187 800.2930
## 153 626.8059 511.6296 741.9821 450.6590 802.9528
## 154 626.8059 509.9164 743.6954 448.0388 805.5729
## 155 626.8059 508.2279 745.3838 445.4565 808.1552
## 156 626.8059 506.5631 747.0486 442.9104 810.7013
## 157 626.8059 504.9211 748.6906 440.3992 813.2126
## 158 626.8059 503.3009 750.3109 437.9213 815.6905
## 159 626.8059 501.7016 751.9101 435.4755 818.1363
## 160 626.8059 500.1226 753.4891 433.0605 820.5512
## 161 626.8059 498.5630 755.0487 430.6753 822.9364
## 162 626.8059 497.0221 756.5896 428.3188 825.2929
## 163 626.8059 495.4994 758.1124 425.9899 827.6218
## 164 626.8059 493.9940 759.6177 423.6877 829.9240
## 165 626.8059 492.5056 761.1061 421.4113 832.2004
## 166 626.8059 491.0335 762.5783 419.1599 834.4518
## 167 626.8059 489.5771 764.0346 416.9326 836.6791
## 168 626.8059 488.1361 765.4756 414.7287 838.8830
plot(ramalan_arima011)
<- cbind(harga.test,ramalan_arima011)
gabungan2<- as.data.frame(gabungan2, digits=3)
df.gab%>%
df.gab rename(
"Data Aktual Harga Emas"=harga.test,
Ramalan="ramalan_arima011.Point Forecast",
"Lo 80"="ramalan_arima011.Lo 80",
"Hi 80"="ramalan_arima011.Hi 80",
"Lo 95"="ramalan_arima011.Lo 95",
"Hi 95"="ramalan_arima011.Hi 95"
)
## Data Aktual Harga Emas Ramalan Lo 80 Hi 80 Lo 95 Hi 95
## 1 717.5 626.8059 603.5050 650.1067 591.1702 662.4415
## 2 749.6 626.8059 596.1381 657.4737 579.9035 673.7082
## 3 690.3 626.8059 590.2259 663.3859 570.8616 682.7501
## 4 666.6 626.8059 585.1444 668.4673 563.0901 690.5216
## 5 689.2 626.8059 580.6186 672.9931 556.1686 697.4431
## 6 666.2 626.8059 576.4984 677.1133 549.8672 703.7445
## 7 662.3 626.8059 572.6909 680.9208 544.0442 709.5675
## 8 665.8 626.8059 569.1343 684.4774 538.6048 715.0069
## 9 681.2 626.8059 565.7846 687.8271 533.4819 720.1298
## 10 704.9 626.8059 562.6095 691.0022 528.6260 724.9857
## 11 783.1 626.8059 559.5842 694.0276 523.9991 729.6126
## 12 758.0 626.8059 556.6892 696.9225 519.5718 734.0400
## 13 775.9 626.8059 553.9092 699.7025 515.3201 738.2917
## 14 812.1 626.8059 551.2314 702.3804 511.2246 742.3871
## 15 824.4 626.8059 548.6452 704.9665 507.2695 746.3422
## 16 886.9 626.8059 546.1419 707.4698 503.4410 750.1707
## 17 984.1 626.8059 543.7140 709.8977 499.7279 753.8838
## 18 1015.6 626.8059 541.3551 712.2566 496.1202 757.4915
## 19 897.3 626.8059 539.0595 714.5522 492.6094 761.0023
## 20 980.4 626.8059 536.8225 716.7892 489.1882 764.4235
## 21 957.4 626.8059 534.6398 718.9719 485.8500 767.7617
## 22 969.0 626.8059 532.5076 721.1041 482.5891 771.0226
## 23 1062.8 626.8059 530.4225 723.1892 479.4003 774.2114
## 24 1047.7 626.8059 528.3816 725.2301 476.2790 777.3327
## 25 967.9 626.8059 526.3822 727.2295 473.2211 780.3906
## 26 1021.6 626.8059 524.4218 729.1899 470.2230 783.3888
## 27 1014.0 626.8059 522.4983 731.1135 467.2811 786.3306
## 28 1035.0 626.8059 520.6095 733.0022 464.3926 789.2191
## 29 1068.8 626.8059 518.7538 734.8579 461.5545 792.0572
## 30 1038.4 626.8059 516.9295 736.6823 458.7644 794.8473
## 31 1133.3 626.8059 515.1349 738.4768 456.0198 797.5919
## 32 1259.6 626.8059 513.3687 740.2430 453.3187 800.2930
## 33 1207.4 626.8059 511.6296 741.9821 450.6590 802.9528
## 34 1234.6 626.8059 509.9164 743.6954 448.0388 805.5729
## 35 1297.0 626.8059 508.2279 745.3838 445.4565 808.1552
## 36 1179.4 626.8059 506.5631 747.0486 442.9104 810.7013
## 37 1332.3 626.8059 504.9211 748.6906 440.3992 813.2126
## 38 1323.2 626.8059 503.3009 750.3109 437.9213 815.6905
## 39 1248.4 626.8059 501.7016 751.9101 435.4755 818.1363
## 40 1247.6 626.8059 500.1226 753.4891 433.0605 820.5512
## 41 1260.1 626.8059 498.5630 755.0487 430.6753 822.9364
## 42 1259.6 626.8059 497.0221 756.5896 428.3188 825.2929
## 43 1317.0 626.8059 495.4994 758.1124 425.9899 827.6218
## 44 1307.8 626.8059 493.9940 759.6177 423.6877 829.9240
## 45 1380.5 626.8059 492.5056 761.1061 421.4113 832.2004
## 46 1326.6 626.8059 491.0335 762.5783 419.1599 834.4518
## 47 1327.1 626.8059 489.5771 764.0346 416.9326 836.6791
## 48 1257.2 626.8059 488.1361 765.4756 414.7287 838.8830
accuracy(ramalan_arima011, harga.test) #arima
## ME RMSE MAE MPE MAPE MASE
## Training set 3.657674 18.10587 12.58013 0.787946 3.138941 0.9884035
## Test set 387.625392 452.65165 387.62539 34.531414 34.531414 30.4551840
## ACF1 Theil's U
## Training set -0.05143427 NA
## Test set 0.94067688 6.812536
Kesimpulan: Hasil ramalan yang dihasilkan dari model ARIMA (0,1,1) memiliki nilai yang sama untuk 48 waktu ke depan, sehingga apabila dibandingkan dengan data aktualnya akan memiliki nilai yang cukup berbeda, hal ini dapat dikarenakan model ARIMA (0,1,1) tidak memenuhi salah satu asumsi yaitu asumsi normalitas, sehingga dapat menyebabkan hasil peramalannya tidak sesuai dengan aktualnya.
Peramalan Harga Emas Eropa
Berikut merupakan hasil ramalan harga emas Eropa untuk 12 bulan ke depan (tahun 2013):
#forecast
<-arima(harga.ts, order = c(0,1,1), include.mean = TRUE, method="ML")
arima011y<- forecast::forecast(harga.ts,model=arima011y, h=12)) (ramalan_arima011
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 169 1272.543 1227.866 1317.220 1204.215 1340.871
## 170 1272.543 1215.729 1329.357 1185.654 1359.432
## 171 1272.543 1205.763 1339.323 1170.412 1374.674
## 172 1272.543 1197.102 1347.984 1157.166 1387.920
## 173 1272.543 1189.338 1355.748 1145.292 1399.794
## 174 1272.543 1182.239 1362.847 1134.435 1410.651
## 175 1272.543 1175.659 1369.428 1124.371 1420.715
## 176 1272.543 1169.498 1375.588 1114.949 1430.137
## 177 1272.543 1163.685 1381.401 1106.059 1439.027
## 178 1272.543 1158.167 1386.919 1097.620 1447.466
## 179 1272.543 1152.903 1392.183 1089.570 1455.516
## 180 1272.543 1147.862 1397.224 1081.860 1463.226
plot(ramalan_arima011)
Kesimpulan
Model ARIMA (0,1,1) merupakan model terbaik untuk data Harga Emas
Eropa yang dipilih berdasarkan nilai AIC terkecil dan fungsi
auto.arima
, namun setelah dilakukan uji diagnostik, model
ini tidak memenuhi asumsi normalitas, sehingga hal tersebut dapat
memberikan pengaruh terhadap hasil ramalannya. Oleh karena itu, model
ARIMA(0,1,1) tidak sesuai untuk memodelkan dan meramalkan data Harga
Emas Eropa, sehingga dapat digunakan metode lain untuk memodelkan data
ini sehingga asumsi yang ada pada model dapat dipenuhi dan dapat
memberikan hasil ramalan yang baik.