Package dan Library
library(readxl)
library(TTR)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tseries)
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(dynlm)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(lmtest)
library(imputeTS)
##
## Attaching package: 'imputeTS'
## The following object is masked from 'package:zoo':
##
## na.locf
## The following object is masked from 'package:tseries':
##
## na.remove
library(stats)
library(MASS)
library(kableExtra)
## Warning in !is.null(rmarkdown::metadata$output) && rmarkdown::metadata$output
## %in% : 'length(x) = 3 > 1' in coercion to 'logical(1)'
library(padr)
library(astsa)
##
## Attaching package: 'astsa'
## The following object is masked from 'package:forecast':
##
## gas
library(tfarima)
##
## Attaching package: 'tfarima'
## The following object is masked from 'package:TSA':
##
## spec
## The following objects are masked from 'package:forecast':
##
## easter, seasadj
library(ggplot2)
Import Data
dataset <- read_excel("~/Downloads/DATA KURS FIX MPDW.xlsx")
datagbp <- dataset$GBP
Mengubah Data Menjadi Time Series
datagbp.ts <- ts(datagbp)
Eksplorasi Data
Plot Data Kurs Jual
plot(datagbp.ts,xlab ="Waktu", ylab = "Data Kurs GBP (Ribu)", col="black", main = "Plot Data Deret Waktu Data urs GBP Kurs")
points(datagbp.ts)
Splitting Data (Training dan Testing)
Splitting Data Kurs Jual
datagbp.train <- ts(datagbp[1:145], )
datagbp.test <- ts(datagbp[146:206], start = 146)
Plot Data Kurs Jual
par(mfrow=c(2,1))
plot(datagbp.train, xlab ="Waktu", ylab = "Data Kurs (Ribu)", col="red", main = "Plot Data Training")
points(datagbp.train)
plot(datagbp.test, xlab ="Waktu", ylab = "Data Kurs (Ribu)", col="red", main = "Plot Data Testing")
points(datagbp.test)
Plot Pembagian Training Testing
## Plot Data Training dan testing kurs
ts.plot(datagbp.ts, xlab = "Periode", ylab ="Data Inflasi (Persen)",
main = "Plot Data Training dan Data Testing")
lines(datagbp.train, col = "blue")
lines(datagbp.test, col="Red")
legend(0,19600,c("Data Training","Data Testing"),
lty=8, col=c("blue","red"), cex=0.8)
abline(v=146, col=c("black"), lty=1, lwd=1)
Smoothing Data
DMA (Double Moving Average)
iterasi_dma <- function(x,min,max,metode=c("SSE","MSE","RMSE","MAD","MAPE")){
tabledma <- data.frame()
z <- max-min+1
temp <- sqrt(z)
a <- round(temp)
b=a
if(a*b<z){
b=b+1
}
par(mfrow=c(a,b))
for(i in min:max) {
df_ts_sma <- SMA(x, n=i)
df_ts_dma <- SMA(df_ts_sma, n=i)
At <- 2*df_ts_sma-df_ts_dma
Bt <- df_ts_sma-df_ts_dma
dmasmoothing <- At+Bt
ramal_dma <- c(NA, dmasmoothing)
df_dma <- cbind(df_aktual=c(x,NA), dmasmoothing=c(dmasmoothing,NA), ramal_dma)
error.dma <- df_dma[, 1] - df_dma[, 3]
SSE.dma <- sum(error.dma^2, na.rm = T)
MSE.dma <- mean(error.dma^2, na.rm = T)
RMSE.dma <- sqrt(mean(error.dma^2, na.rm = T))
MAD.dma <- mean(abs(error.dma), na.rm = T)
r.error.dma <- (error.dma/df_dma[, 1])*100
MAPE.dma <- mean(abs(r.error.dma), na.rm = T)
ak <- data.frame(n=i,SSE=SSE.dma,MSE=MSE.dma,RMSE=RMSE.dma,
MAD=MAD.dma,MAPE=MAPE.dma)
tabledma <- rbind(tabledma,ak)
}
opt <- tabledma$n[which.min(tabledma[,metode])]
return(list(Akurasi=tabledma,n.optimum=paste("Nilai n optimum dengan menggunakan metode Double Moving Average berada pada n =",opt),smoothing=dmasmoothing, ramalan=ramal_dma))
}
dma_iter<-iterasi_dma(datagbp.train,2,30, metode= "MAPE")
dma_iter[[2]]
## [1] "Nilai n optimum dengan menggunakan metode Double Moving Average berada pada n = 2"
#Single Moving Average dengan N=2
df_ts_sma <- SMA(datagbp.train, n=2)
#Double Moving Average dengan N=2
df_ts_dma <- SMA(df_ts_sma, n=2)
At <- c(2*df_ts_sma-df_ts_dma)
Bt <- c(df_ts_sma-df_ts_dma)
pemulusan_dma <- c(At+Bt)
ramal_dma <- c(NA, pemulusan_dma)
df_dma <- cbind(df_aktual=c(datagbp.train,NA), pemulusan_dma=c(pemulusan_dma,NA), ramal_dma)
head(df_dma)
## df_aktual pemulusan_dma ramal_dma
## [1,] 20177.45 NA NA
## [2,] 20117.72 NA NA
## [3,] 20182.52 20152.66 NA
## [4,] 20208.16 20240.56 20152.66
## [5,] 20239.71 20252.53 20240.56
## [6,] 20101.33 20117.11 20252.53
Plot DMA
ts.plot(datagbp.train, xlab="Tahun", ylab="Data Kurs", col="blue", lty=3)
points(datagbp.train)
pemulusan_dma.ts<-ts(pemulusan_dma)
ramal_dma.ts <- ts(ramal_dma)
lines(pemulusan_dma.ts,col="red",lwd=2)
lines(ramal_dma.ts,col="black",lwd=2)
title("Double Moving Average N = 2", cex.main=1, font.main=4 ,col.main="black")
legend("topleft", c("Data Aktual","Pemulusan","Ramalan"),lty=3:1,col=c ("blue","red","black"))
Uji Keakuratan dan Error
# Ukuran Keakuratan
error.dma <- df_dma[, 1] - df_dma[, 3]
## SSE (Sum Square Error)
SSE.dma <- sum(error.dma^2, na.rm = T)
## MSE (Mean Squared Error)
MSE.dma <- mean(error.dma^2, na.rm = T)
## RMSE (Root Mean Square Error)
RMSE.dma <- sqrt(mean(error.dma^2, na.rm = T))
## MAD (Mean Absolute Deviation)
MAD.dma <- mean(abs(error.dma), na.rm = T)
## MAPE (Mean Absolute Percentage Error)
r.error.dma <- (error.dma/df_dma[, 1])*100 # Relative Error
MAPE.dma <- mean(abs(r.error.dma), na.rm = T)
akurasidma <- data.frame(
"Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"),
"Double Moving Average N=2" = c(SSE.dma, MSE.dma, MAPE.dma, RMSE.dma, MAD.dma))
kable(akurasidma)
| Ukuran.Keakuratan | Double.Moving.Average.N.2 |
|---|---|
| SSE | 9.656670e+05 |
| MSE | 6.800472e+03 |
| MAPE | 3.326418e-01 |
| RMSE | 8.246498e+01 |
| MAD | 6.677553e+01 |
DES (Double Exponential Smoothing)
DES <- HoltWinters(datagbp.train, gamma = FALSE)
tabledes <- data.frame("Alpha Optimum"=c(DES$alpha), "Beta Optimum"=c(DES$beta))
kable(tabledes)
| Alpha.Optimum | Beta.Optimum | |
|---|---|---|
| alpha | 1 | 0.0556507 |
ramalanDES <- forecast(DES)
ramalanDES
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 146 19506.81 19410.08 19603.55 19358.87 19654.75
## 147 19495.83 19355.17 19636.49 19280.71 19710.95
## 148 19484.84 19307.81 19661.88 19214.09 19755.59
## 149 19473.86 19263.90 19683.82 19152.75 19794.97
## 150 19462.87 19221.89 19703.85 19094.33 19831.42
## 151 19451.89 19181.04 19722.74 19037.66 19866.12
## 152 19440.90 19140.89 19740.92 18982.07 19899.73
## 153 19429.92 19101.17 19758.67 18927.14 19932.70
## 154 19418.93 19061.69 19776.17 18872.58 19965.28
## 155 19407.95 19022.33 19793.56 18818.20 19997.69
Plot DES
plot(DES)
points(datagbp.train)
legend("topright", c("Data aktual","Pemulusan DES"),lty=1:2,col=c ("black","red"))
Uji Keakuratan dan Error
# ukuran keakuratan
SSEDES<-DES$SSE
MSEDES<-DES$SSE/length(datagbp.train)
RMSEDES<-sqrt(MSEDES)
# Mencari MAPE dengan manual
fittedDES<-ramalanDES$fitted
sisaanDES<-ramalanDES$residuals
residDES<-datagbp.train-ramalanDES$fitted
MAPEDES <-sum(abs(sisaanDES[3:length(datagbp.train)]/datagbp.train[3:length(datagbp.train)])*100)/length(datagbp.train)
akurasiDES <- data.frame(
"Ukuran Keakuratan Data Training" = c("SSE", "MSE", "RMSE", "MAPE"),
"Double Exponential Smoothing" = c(SSEDES, MSEDES, RMSEDES, MAPEDES))
kable(akurasiDES)
| Ukuran.Keakuratan.Data.Training | Double.Exponential.Smoothing |
|---|---|
| SSE | 8.143943e+05 |
| MSE | 5.616512e+03 |
| RMSE | 7.494339e+01 |
| MAPE | 2.956961e-01 |
Perbandingan DMA dan DES
akurasiDESDMA <- data.frame(
"Ukuran Keakuratan Data Training" = c("SSE", "MSE", "RMSE", "MAPE"),
"Double Exponential Smoothing" = c(SSEDES, MSEDES, RMSEDES, MAPEDES), "Double Moving Average N = 2" = c(SSE.dma, MSE.dma, RMSE.dma, MAPE.dma))
kable(akurasiDESDMA)
| Ukuran.Keakuratan.Data.Training | Double.Exponential.Smoothing | Double.Moving.Average.N…2 |
|---|---|---|
| SSE | 8.143943e+05 | 9.656670e+05 |
| MSE | 5.616512e+03 | 6.800472e+03 |
| RMSE | 7.494339e+01 | 8.246498e+01 |
| MAPE | 2.956961e-01 | 3.326418e-01 |
Uji Keakuratan dan Error
selisih.test <- c(ramalanDES$mean)-c(datagbp.test)
## Warning in c(ramalanDES$mean) - c(datagbp.test): longer object length is not a
## multiple of shorter object length
selisih.test <- na.omit(selisih.test)
SSEtesting<-sum(selisih.test^2)
MSEtesting<-SSEtesting/length(datagbp.test)
RMSEtesting<-sqrt(MSEtesting)
MAPEtesting<-sum(abs(selisih.test))/length(datagbp.test)
akurasi.test <- data.frame("Perbandingan Ukuran Keakuratan Data Testing" = c("SSE", "MSE", "RMSE", "MAPE"), "Double Exponential Smoothing" = c(SSEtesting, MSEtesting, RMSEtesting, MAPEtesting))
kable(akurasi.test)
| Perbandingan.Ukuran.Keakuratan.Data.Testing | Double.Exponential.Smoothing |
|---|---|
| SSE | 3343118.0341 |
| MSE | 54805.2137 |
| RMSE | 234.1051 |
| MAPE | 204.9760 |
Pemodelan Arima
Differencing 1
data.dif1<-diff(datagbp.train,differences = 1)
plot.ts(data.dif1,lty=1,ylab= "Data Inflasi Pembedaan 1", main="Plot Differencing Data Kurs")
Uji Kestasioneran Data
adf.test(data.dif1)
## Warning in adf.test(data.dif1): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: data.dif1
## Dickey-Fuller = -6.0691, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Plot Data ACF
acfdif <- acf(data.dif1, lag.max = 24)
Plot Data PACF
pacfdif <- pacf(data.dif1, lag.max = 24)
Plot Data EACF
eacf(data.dif1)
## 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 o o o o o o o o o o o o o
## 4 x x x o o o o o o o o o o o
## 5 x o x o o o o o o o o o o o
## 6 x o x x o x o o o o o o o o
## 7 o x o x o o x o o o o o o o
Differencing 2
data.dif2<-diff(datagbp.train,differences = 2)
plot.ts(data.dif2,lty=1,ylab= "Data Inflasi Pembedaan 1", main="Plot Differencing Data Kurs")
Cek Kestasioneran Data
adf.test(data.dif2)
## Warning in adf.test(data.dif2): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: data.dif2
## Dickey-Fuller = -8.0178, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Plot Data ACF
acfdif <- acf(data.dif2, lag.max = 24)
cut off di lag 1
Plot Data PACF
pacfdif <- pacf(data.dif2, lag.max = 24)
cut off di lag off
Plot Data EACF
eacf(data.dif2)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o o o o o o o o o
## 1 x x o o o o o o o o o o o o
## 2 x x o o o o o o o o o o o o
## 3 x x x o o o o o o o o o o o
## 4 x o x o o o o o o o o o o o
## 5 x o x o o o o o o o o o o o
## 6 x x x o x o x o o o o o o o
## 7 x x o x x o o o o o o o o o
diperoleh model : 1. Arima(0,2,1) 2. Arima(1,2,2) 3. Arima(2,2,2) 5. Arima(3,2,3) 6. Arima(1,2,1)
Pemodelan
model1 <- Arima(data.dif2, order=c(0,2,1), method="ML")
model2 <- Arima(data.dif2, order=c(1,2,2), method="ML")
model3 <- Arima(data.dif2, order=c(2,2,2), method="ML")
model4 <- Arima(data.dif2, order=c(3,2,3), method="ML")
model5 <- Arima(data.dif2, order=c(1,2,1), method="ML")
Penduga Parameter Model
Arima(0,2,1)
summary(model1)
## Series: data.dif2
## ARIMA(0,2,1)
##
## Coefficients:
## ma1
## -1.0000
## s.e. 0.0175
##
## sigma^2 = 31702: log likelihood = -932.72
## AIC=1869.43 AICc=1869.52 BIC=1875.33
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 4.779887 176.1719 138.2666 Inf Inf 0.9895546 -0.6509523
lmtest::coeftest((model1))
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -1.000000 0.017453 -57.296 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Arima(1,2,2)
summary(model2)
## Series: data.dif2
## ARIMA(1,2,2)
##
## Coefficients:
## ar1 ma1 ma2
## -0.4698 -1.9957 0.9999
## s.e. 0.0743 0.0263 0.0256
##
## sigma^2 = 8462: log likelihood = -844
## AIC=1695.99 AICc=1696.29 BIC=1707.79
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 3.254189 90.36892 72.42125 NaN Inf 0.5183085 -0.1423265
lmtest::coeftest((model2))
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.469768 0.074255 -6.3264 2.51e-10 ***
## ma1 -1.995653 0.026329 -75.7981 < 2.2e-16 ***
## ma2 0.999904 0.025594 39.0676 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Arima(2,2,2)
summary(model3)
## Series: data.dif2
## ARIMA(2,2,2)
##
## Coefficients:
## ar1 ar2 ma1 ma2
## -0.6191 -0.3044 -1.9967 1.0000
## s.e. 0.0805 0.0801 0.0264 0.0261
##
## sigma^2 = 7657: log likelihood = -837.19
## AIC=1684.38 AICc=1684.83 BIC=1699.13
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 2.76951 85.65117 68.13987 -Inf Inf 0.4876674 -0.04692459
lmtest::coeftest((model3))
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.619134 0.080461 -7.6949 1.416e-14 ***
## ar2 -0.304352 0.080059 -3.8016 0.0001438 ***
## ma1 -1.996673 0.026425 -75.5589 < 2.2e-16 ***
## ma2 0.999994 0.026128 38.2728 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Arima(3,2,3)
summary(model4)
## Series: data.dif2
## ARIMA(3,2,3)
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 ma3
## -0.0537 -0.0942 -0.0828 -2.8189 2.6413 -0.8220
## s.e. 0.0898 0.0875 0.0864 0.0378 0.0760 0.0388
##
## sigma^2 = 6248: log likelihood = -824.69
## AIC=1663.38 AICc=1664.23 BIC=1684.03
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 2.682303 76.80059 60.74851 Inf Inf 0.4347684 -0.01194438
lmtest::coeftest((model4))
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.053742 0.089773 -0.5986 0.5494
## ar2 -0.094194 0.087494 -1.0766 0.2817
## ar3 -0.082791 0.086399 -0.9582 0.3379
## ma1 -2.818851 0.037815 -74.5429 <2e-16 ***
## ma2 2.641340 0.075974 34.7665 <2e-16 ***
## ma3 -0.822023 0.038834 -21.1676 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Arima(1,2,1)
summary(model5)
## Series: data.dif2
## ARIMA(1,2,1)
##
## Coefficients:
## ar1 ma1
## -0.6512 -1.0000
## s.e. 0.0633 0.0176
##
## sigma^2 = 18183: log likelihood = -893.8
## AIC=1793.6 AICc=1793.77 BIC=1802.44
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 4.514104 132.9469 106.5713 NaN Inf 0.762716 -0.3346775
lmtest::coeftest((model5))
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.651248 0.063301 -10.288 < 2.2e-16 ***
## ma1 -0.999996 0.017622 -56.748 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Perbandingan Kebaikan Model
modelaccuracy<-data.frame(
"Model"=c("ARIMA(0,2,1)", "ARIMA(1,2,2)", "ARIMA(2,2,2)","ARIMA(3,2,3)", "ARIMA(1,2,1)"),
"AIC"=c(model1$aic, model2$aic, model3$aic,model4$aic,model5$aic),
"BIC"=c(model1$bic, model2$bic, model3$bic,model4$bic,model5$bic),
"Signifikansi"=c("Signifikan","Signifikan","Signifikan","Tidak Signifikan","Signifikan"))
modelaccuracy
## Model AIC BIC Signifikansi
## 1 ARIMA(0,2,1) 1869.434 1875.332 Signifikan
## 2 ARIMA(1,2,2) 1695.993 1707.788 Signifikan
## 3 ARIMA(2,2,2) 1684.384 1699.128 Signifikan
## 4 ARIMA(3,2,3) 1663.385 1684.026 Tidak Signifikan
## 5 ARIMA(1,2,1) 1793.597 1802.443 Signifikan
Dengan model terbaik Arima(2,2,2)
Diagnostik Model
Overfitting
menggunakan model Arima(2,2,2) dengan Arima(3,2,2) dan Arima(2,2,3)
model5a <- Arima(data.dif2, order=c(3,2,2), method="ML")
model5b <- Arima(data.dif2, order=c(2,2,3), method="ML")
Model Arima(2,2,2)
coeftest(model5)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.651248 0.063301 -10.288 < 2.2e-16 ***
## ma1 -0.999996 0.017622 -56.748 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Model Arima(3,2,2)
coeftest(model5a)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.675460 0.083681 -8.0718 6.926e-16 ***
## ar2 -0.415024 0.095306 -4.3546 1.333e-05 ***
## ar3 -0.171327 0.083550 -2.0506 0.04031 *
## ma1 -1.996895 0.026545 -75.2279 < 2.2e-16 ***
## ma2 0.999940 0.026324 37.9857 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Model Arima(2,2,3)
coeftest(model5b)
## Warning in sqrt(diag(se)): NaNs produced
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.057046 0.086750 -0.6576 0.5108
## ar2 -0.071034 0.086805 -0.8183 0.4132
## ma1 -2.876170 NaN NaN NaN
## ma2 2.760864 NaN NaN NaN
## ma3 -0.884392 NaN NaN NaN
Uji Diagnostik
Diagnostik Model : Eksploratif
sisaan5 <- model5a$residuals
par(mfrow=c(2,2))
qqnorm(sisaan5)
box(col="black",lwd=2)
qqline(sisaan5, col = "red", lwd =1, col.lab="black",
col.axis="black",col.sub = "black")
box(col="black",lwd=2)
plot(c(1:length(sisaan5)),sisaan5,col="black",col.lab="black",col.axis="black")
box(col="black",lwd=2)
acf(sisaan5,col="black",col.sub = "black",col.axis="black", col.lab="black")
box(col="black",lwd=2)
pacf(sisaan5,col="black",col.sub = "black",col.axis="black", col.lab="black",col.main="black")
box(col="black",lwd=2)
Diagnostik Model : Uji Formal
Sisaan Menyebar Normal
shapiro.test(sisaan5)
##
## Shapiro-Wilk normality test
##
## data: sisaan5
## W = 0.99351, p-value = 0.7664
Sisaan Saling Bebas
Box.test(sisaan5, type = "Ljung")
##
## Box-Ljung test
##
## data: sisaan5
## X-squared = 0.20539, df = 1, p-value = 0.6504
Nilai Tengah Sisaan Sama dengan Nol
t.test(sisaan5, mu = 0, conf.level = 0.95)
##
## One Sample t-test
##
## data: sisaan5
## t = 0.27576, df = 142, p-value = 0.7831
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -12.01121 15.90555
## sample estimates:
## mean of x
## 1.947169
Forcasting
ramalan <- forecast(Arima(datagbp.train, order=c(3,2,2),method="ML",include.drift = TRUE),h = length(datagbp.test))
## Warning in Arima(datagbp.train, order = c(3, 2, 2), method = "ML", include.drift
## = TRUE): No drift term fitted as the order of difference is 2 or more.
data.ramalan <- ramalan$mean
data.ramalan.ts <- ts(data.ramalan, start = 146)
plot(ramalan,col="black",col.sub ="black",col.axis="black",
col.lab="black",col.main="black",lwd=2)
box(col="black",lwd=2)
ts.plot(datagbp.train, ylab = "Data Inflasi(Persen)", col="black",lwd=2,main="Forecasting ARIMA(3,2,2)",gpars = list(col.main="black",col.axis="black",col.sub="black"), xlim = c(0,211), ylim = c(19000,21000))
lines(data.ramalan.ts, col = "blue",lwd=2)
lines(datagbp.test, col = "red", lwd =2)
legend(61,16400,c("Data Training", "Data Testing","Data Forecast ARIMA"),
lwd=2, col=c("black","red","blue"), cex=0.8)
box(col="black",lwd=2)
perbandingan.temp<-matrix(data=c(datagbp.test[1:10], data.ramalan[1:10]), nrow = 10, ncol = 2)
colnames(perbandingan.temp)<-c("Aktual","Hasil Forecast")
head(perbandingan.temp)
## Aktual Hasil Forecast
## [1,] 19409.94 19514.97
## [2,] 19439.03 19502.44
## [3,] 19445.60 19484.68
## [4,] 19490.78 19466.04
## [5,] 19428.94 19447.40
## [6,] 19478.72 19429.07
error <- data.frame(datagbp.test)-data.frame(data.ramalan[1:61])
## SSE (Sum Square Error)
SSE <- sum(error^2, na.rm = T)
## MSE (Mean Squared Error)
MSE<- sapply(error^2, mean, na.rm = T)
## RMSE (Root Mean Square Error)
RMSE <- sqrt(MSE)
## MAD (Mean Absolute Deviation)
MAD <- sapply(abs(error), mean, na.rm = T)
## MAPE (Mean Absolute Percentage Error)
r.error <- (error/data.frame(datagbp.test))*100 # Relative Error
MAPE <- sapply(abs(r.error), mean, na.rm = T)
akurasifarima <- data.frame(
"Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"),
"Forecasting" = c(SSE, MSE, MAPE, RMSE, MAD))
akurasifarima
## Ukuran.Keakuratan Forecasting
## 1 SSE 7.928205e+06
## 2 MSE 1.299706e+05
## 3 MAPE 1.635303e+00
## 4 RMSE 3.605143e+02
## 5 MAD 3.153171e+02
kable(akurasifarima)
| Ukuran.Keakuratan | Forecasting |
|---|---|
| SSE | 7.928205e+06 |
| MSE | 1.299706e+05 |
| MAPE | 1.635303e+00 |
| RMSE | 3.605143e+02 |
| MAD | 3.153171e+02 |
ARIMAX
Data
datausd <- dataset$USD
dataemas <- dataset$EMAS
datasaham <- dataset$TESLA
datausd.ts <- ts(datausd)
dataemas.ts <- ts(dataemas)
datasaham.ts <- ts(datasaham)
Plot Time Series
plot(datausd.ts,xlab ="Waktu", ylab = "Data Inflasi Global(Persen)", col="black", main = "Plot Data Inflasi Global (Persen)")
points(datasaham.ts)
plot(dataemas.ts,xlab ="Waktu", ylab = "Data Inflasi Global(Persen)", col="black", main = "Plot Data Inflasi Global (Persen)")
points(dataemas.ts)
plot(datasaham.ts,xlab ="Waktu", ylab = "Data Inflasi Global(Persen)", col="black", main = "Plot Data Inflasi Global (Persen)")
points(datasaham.ts)
Splitting Data
datausd.train <- ts(datausd[1:145], )
datausd.test <- ts(datausd[146:206], start = 146)
dataemas.train <- ts(dataemas[1:145], )
dataemas.test <- ts(dataemas[146:206], start = 146)
datasaham.train <- ts(datasaham[1:145], )
datasaham.test <- ts(datasaham[146:206], start = 146)
Plot Data
par(mfrow=c(2,1))
plot(datausd.train,xlab ="Waktu", ylab = "Data Inflasi (Persen)", col="red", main = "Data Training Inflasi")
points(datausd.train)
plot(datausd.test,xlab ="Waktu", ylab = "Data Inflasi (Persen)", col="red", main = "Data Testing Inflasi")
points(datausd.test)
par(mfrow=c(2,1))
plot(dataemas.train,xlab ="Waktu", ylab = "Data Inflasi (Persen)", col="red", main = "Data Training Inflasi")
points(dataemas.train)
plot(dataemas.test,xlab ="Waktu", ylab = "Data Inflasi (Persen)", col="red", main = "Data Testing Inflasi")
points(dataemas.test)
par(mfrow=c(2,1))
plot(datasaham.train,xlab ="Waktu", ylab = "Data Inflasi (Persen)", col="red", main = "Data Training Inflasi")
points(datasaham.train)
plot(datasaham.test,xlab ="Waktu", ylab = "Data Inflasi (Persen)", col="red", main = "Data Testing Inflasi")
points(datasaham.test)
### Korelasi Data
korelasix <- c("USD vs EMAS" = cor(datausd, dataemas),"USD vs SAHAM" =cor(datausd, datasaham),"EMAS vs SAHAM" =cor(dataemas, datasaham))
korx <- data.frame("Nilai Korelasi" = korelasix)
kable(korx)
| Nilai.Korelasi | |
|---|---|
| USD vs EMAS | -0.3209930 |
| USD vs SAHAM | -0.4054646 |
| EMAS vs SAHAM | -0.0504935 |
antar variabel x gaada yang besar nilai kor (tidak ada yg multikol)
korelasitest <- c("GBP vs USD" = cor(datagbp.test, dataemas.test), "GBP vs SAHAM" =cor(datagbp.test, datasaham.test),"GBP vs EMAS" =cor(datagbp.test, dataemas.test))
kort <- data.frame("Nilai Korelasi" = korelasitest)
kable(kort)
| Nilai.Korelasi | |
|---|---|
| GBP vs USD | -0.0743528 |
| GBP vs SAHAM | -0.0349986 |
| GBP vs EMAS | -0.0743528 |
korelasitest <- c("GBP vs USD" = cor(datagbp, dataemas), "GBP vs SAHAM" =cor(datagbp, datasaham),"GBP vs EMAS" =cor(datagbp, dataemas))
kort <- data.frame("Nilai Korelasi" = korelasitest)
kable(kort)
| Nilai.Korelasi | |
|---|---|
| GBP vs USD | 0.1418983 |
| GBP vs SAHAM | -0.8383975 |
| GBP vs EMAS | 0.1418983 |
korelasitest <- c("USD vs EMAS" = cor(datausd.test, dataemas.test), "USD vs SAHAM" =cor(datausd.test, datasaham.test),"SAHAM vs EMAS" =cor(datasaham.test, dataemas.test))
kort <- data.frame("Nilai Korelasi" = korelasitest)
kable(kort)
| Nilai.Korelasi | |
|---|---|
| USD vs EMAS | -0.0636976 |
| USD vs SAHAM | 0.2130446 |
| SAHAM vs EMAS | 0.3652165 |
Pembentukan Model Regresi
X1 = datausd
X2 = dataemas
X3 = datasaham
y <- datagbp
reg2 <- lm(y~X1+X2+X3)
reg2
##
## Call:
## lm(formula = y ~ X1 + X2 + X3)
##
## Coefficients:
## (Intercept) X1 X2 X3
## 4126.3609 0.9533 1.8235 -5.0303
summary(reg2)
##
## Call:
## lm(formula = y ~ X1 + X2 + X3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -505.82 -113.63 8.76 111.76 663.81
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4126.3609 2216.6529 1.862 0.0641 .
## X1 0.9533 0.1310 7.280 7.30e-12 ***
## X2 1.8235 0.3329 5.478 1.27e-07 ***
## X3 -5.0303 0.2654 -18.956 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 199.9 on 202 degrees of freedom
## Multiple R-squared: 0.7725, Adjusted R-squared: 0.7691
## F-statistic: 228.7 on 3 and 202 DF, p-value: < 2.2e-16
Metode Best Subset Regression
library(olsrr)
##
## Attaching package: 'olsrr'
## The following object is masked from 'package:MASS':
##
## cement
## The following object is masked from 'package:datasets':
##
## rivers
bs.hc <- ols_step_best_subset(reg2)
bs.hc
## Best Subsets Regression
## -----------------------
## Model Index Predictors
## -----------------------
## 1 X3
## 2 X1 X3
## 3 X1 X2 X3
## -----------------------
##
## Subsets Regression Summary
## ------------------------------------------------------------------------------------------------------------------------------------------------
## Adj. Pred
## Model R-Square R-Square R-Square C(p) AIC SBIC SBC MSEP FPE HSP APC
## ------------------------------------------------------------------------------------------------------------------------------------------------
## 1 0.7029 0.7015 0.6954 61.8180 2824.2891 2238.7137 2834.2727 10646807.9911 52185.2916 254.5986 0.3029
## 2 0.7387 0.7362 0.7297 32.0075 2799.8202 2214.5198 2813.1317 9409394.2346 46340.7192 226.1165 0.2690
## 3 0.7725 0.7691 0.7631 4.0000 2773.2888 2188.8437 2789.9282 8233156.7512 40740.8283 198.8299 0.2365
## ------------------------------------------------------------------------------------------------------------------------------------------------
## AIC: Akaike Information Criteria
## SBIC: Sawa's Bayesian Information Criteria
## SBC: Schwarz Bayesian Criteria
## MSEP: Estimated error of prediction, assuming multivariate normality
## FPE: Final Prediction Error
## HSP: Hocking's Sp
## APC: Amemiya Prediction Criteria
model 3 terbaik dengan nilai aic terendah
sisaanx <- reg2$residuals
par(mfrow=c(2,2))
qqnorm(sisaanx)
box(col="black",lwd=2)
qqline(sisaanx, col = "red", lwd =1, col.lab="black",
col.axis="black",col.sub = "black")
box(col="black",lwd=2)
plot(c(1:length(sisaanx)),sisaanx,col="black",col.lab="black",col.axis="black")
box(col="black",lwd=2)
acf(sisaanx,col="black",col.sub = "black",col.axis="black", col.lab="black")
box(col="black",lwd=2)
pacf(sisaanx,col="black",col.sub = "black",col.axis="black", col.lab="black",col.main="black")
box(col="black",lwd=2)
## White Noise Regressi
Box.test(sisaanx, lag = 12)
##
## Box-Pierce test
##
## data: sisaanx
## X-squared = 537.7, df = 12, p-value < 2.2e-16
Box.test(sisaanx, lag = 24)
##
## Box-Pierce test
##
## data: sisaanx
## X-squared = 553.84, df = 24, p-value < 2.2e-16
Box.test(sisaanx, lag = 36)
##
## Box-Pierce test
##
## data: sisaanx
## X-squared = 599.66, df = 36, p-value < 2.2e-16
Box.test(sisaanx, lag = 48)
##
## Box-Pierce test
##
## data: sisaanx
## X-squared = 639.27, df = 48, p-value < 2.2e-16
Pemodelan sisaan regresi
ACF dan PACF
acf(sisaanx)
pacf(sisaanx)
eacf(sisaanx)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x x x x x x o o o o o o
## 1 o o o o x o o x o o o o o o
## 2 x o o o x o o o o o o o o o
## 3 x o o o x 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 x x x x o o o o o o o o o o
## 6 x x x x o o x o o o o o o o
## 7 x o x x o x x o o o o o o o
UJI FORMAL ADF TEST
adf.test(sisaanx)
## Warning in adf.test(sisaanx): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: sisaanx
## Dickey-Fuller = -4.3893, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Dari Matriks EACF dapat diduga model yang cocok adalah model :
ARIMAX(2,0,5)
ARIMAX(3,0,5)
ARIMAX(2,0,6)
ARIMAX(4,0,5)
ARIMAX(1,0,1)
modelx1 <- Arima(datagbp.train, order = c(2,0,5), xreg = cbind(datausd.train,dataemas.train,datasaham.train), method = "ML")
modelx2 <- Arima(datagbp.train, order = c(3,0,5), xreg = cbind(datausd.train,dataemas.train,datasaham.train), method = "ML")
modelx3 <- Arima(datagbp.train, order = c(2,0,6), xreg = cbind(datausd.train,dataemas.train,datasaham.train), method = "ML")
modelx4 <- Arima(datagbp.train, order = c(4,0,5), xreg = cbind(datausd.train,dataemas.train,datasaham.train), method = "ML")
modelx5 <- Arima(datagbp.train, order = c(1,0,1), xreg = cbind(datausd.train,dataemas.train,datasaham.train), method = "ML")
Arimax(2,0,5)
summary(modelx1)
## Series: datagbp.train
## Regression with ARIMA(2,0,5) errors
##
## Coefficients:
## ar1 ar2 ma1 ma2 ma3 ma4 ma5 intercept
## 0.1808 0.8025 0.7922 -0.1076 -0.1588 -0.2061 -0.1254 15932.268
## s.e. 0.3640 0.3604 0.3700 0.1159 0.1108 0.1162 0.0942 2500.195
## datausd.train dataemas.train datasaham.train
## 0.1876 0.3676 2.6951
## s.e. 0.1654 0.4004 1.0596
##
## sigma^2 = 5069: log likelihood = -820.19
## AIC=1664.37 AICc=1666.74 BIC=1700.09
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -4.847586 68.44612 52.47789 -0.0255555 0.2614566 0.9218812
## ACF1
## Training set -0.01325761
coeftest(modelx1)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 1.8084e-01 3.6400e-01 0.4968 0.61932
## ar2 8.0247e-01 3.6038e-01 2.2268 0.02596 *
## ma1 7.9224e-01 3.6995e-01 2.1415 0.03224 *
## ma2 -1.0758e-01 1.1591e-01 -0.9282 0.35331
## ma3 -1.5880e-01 1.1076e-01 -1.4337 0.15165
## ma4 -2.0605e-01 1.1618e-01 -1.7736 0.07613 .
## ma5 -1.2537e-01 9.4237e-02 -1.3303 0.18341
## intercept 1.5932e+04 2.5002e+03 6.3724 1.861e-10 ***
## datausd.train 1.8763e-01 1.6537e-01 1.1346 0.25655
## dataemas.train 3.6761e-01 4.0038e-01 0.9181 0.35854
## datasaham.train 2.6951e+00 1.0596e+00 2.5434 0.01098 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Arimax(3,0,5)
summary(modelx2)
## Series: datagbp.train
## Regression with ARIMA(3,0,5) errors
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 ma3 ma4 ma5
## -0.2920 0.8057 0.4601 1.2607 0.3346 -0.2267 -0.3120 -0.1985
## s.e. 0.5334 0.1913 0.4031 0.5248 0.3964 0.1594 0.1477 0.0952
## intercept datausd.train dataemas.train datasaham.train
## 15489.033 0.2096 0.4370 2.7051
## s.e. 2499.783 0.1651 0.4035 1.0424
##
## sigma^2 = 5065: log likelihood = -819.63
## AIC=1665.26 AICc=1668.04 BIC=1703.96
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -4.7773 68.15924 52.36688 -0.02519341 0.2609256 0.919931
## ACF1
## Training set -0.006930038
coeftest(modelx2)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 -0.29200 0.53336 -0.5475 0.584057
## ar2 0.80567 0.19129 4.2118 2.533e-05 ***
## ar3 0.46014 0.40307 1.1416 0.253624
## ma1 1.26072 0.52480 2.4023 0.016294 *
## ma2 0.33463 0.39642 0.8441 0.398607
## ma3 -0.22666 0.15940 -1.4220 0.155024
## ma4 -0.31199 0.14774 -2.1118 0.034701 *
## ma5 -0.19851 0.09523 -2.0845 0.037112 *
## intercept 15489.03298 2499.78281 6.1962 5.786e-10 ***
## datausd.train 0.20960 0.16510 1.2695 0.204257
## dataemas.train 0.43703 0.40346 1.0832 0.278713
## datasaham.train 2.70508 1.04235 2.5952 0.009455 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Arimax(2,0,6)
summary(modelx3)
## Series: datagbp.train
## Regression with ARIMA(2,0,6) errors
##
## Coefficients:
## Warning in sqrt(diag(x$var.coef)): NaNs produced
## ar1 ar2 ma1 ma2 ma3 ma4 ma5 ma6
## 0.8591 0.1292 0.1032 -0.1077 -0.1175 -0.1677 0.0527 0.0482
## s.e. NaN NaN NaN 0.0828 NaN NaN NaN NaN
## intercept datausd.train dataemas.train datasaham.train
## 15485.726 0.2037 0.4714 2.8436
## s.e. 2523.265 0.1647 0.4091 1.0744
##
## sigma^2 = 5081: log likelihood = -819.85
## AIC=1665.69 AICc=1668.47 BIC=1704.39
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -4.591221 68.26456 52.26469 -0.02425419 0.2604019 0.9181358
## ACF1
## Training set -0.004918638
coeftest(modelx3)
## Warning in sqrt(diag(se)): NaNs produced
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 8.5907e-01 NaN NaN NaN
## ar2 1.2920e-01 NaN NaN NaN
## ma1 1.0324e-01 NaN NaN NaN
## ma2 -1.0766e-01 8.2821e-02 -1.2999 0.19364
## ma3 -1.1747e-01 NaN NaN NaN
## ma4 -1.6770e-01 NaN NaN NaN
## ma5 5.2653e-02 NaN NaN NaN
## ma6 4.8221e-02 NaN NaN NaN
## intercept 1.5486e+04 2.5233e+03 6.1372 8.4e-10 ***
## datausd.train 2.0374e-01 1.6471e-01 1.2370 0.21610
## dataemas.train 4.7136e-01 4.0911e-01 1.1522 0.24925
## datasaham.train 2.8436e+00 1.0744e+00 2.6466 0.00813 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Arimax(4,0,5)
summary(modelx4)
## Series: datagbp.train
## Regression with ARIMA(4,0,5) errors
##
## Coefficients:
## ar1 ar2 ar3 ar4 ma1 ma2 ma3 ma4 ma5
## 0.3958 -0.3279 0.4552 0.4369 0.5711 0.8342 0.3026 -0.2426 -0.0746
## s.e. 0.9903 0.8916 0.7796 0.8515 0.9926 0.1581 0.8157 0.1811 0.1999
## intercept datausd.train dataemas.train datasaham.train
## 15167.802 0.2330 0.4407 2.6940
## s.e. 2554.521 0.1641 0.4064 0.9934
##
## sigma^2 = 4876: log likelihood = -818.2
## AIC=1664.4 AICc=1667.63 BIC=1706.07
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -3.67632 66.62151 52.13565 -0.01960723 0.259782 0.915869
## ACF1
## Training set 0.0009493526
coeftest(modelx4)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 3.9584e-01 9.9031e-01 0.3997 0.689369
## ar2 -3.2788e-01 8.9159e-01 -0.3678 0.713057
## ar3 4.5523e-01 7.7955e-01 0.5840 0.559241
## ar4 4.3688e-01 8.5148e-01 0.5131 0.607895
## ma1 5.7112e-01 9.9263e-01 0.5754 0.565044
## ma2 8.3424e-01 1.5811e-01 5.2764 1.318e-07 ***
## ma3 3.0263e-01 8.1572e-01 0.3710 0.710642
## ma4 -2.4258e-01 1.8111e-01 -1.3394 0.180428
## ma5 -7.4572e-02 1.9992e-01 -0.3730 0.709141
## intercept 1.5168e+04 2.5545e+03 5.9376 2.892e-09 ***
## datausd.train 2.3304e-01 1.6406e-01 1.4205 0.155473
## dataemas.train 4.4071e-01 4.0643e-01 1.0843 0.278211
## datasaham.train 2.6940e+00 9.9344e-01 2.7118 0.006692 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Arimax(1,0,1)
summary(modelx5)
## Series: datagbp.train
## Regression with ARIMA(1,0,1) errors
##
## Coefficients:
## ar1 ma1 intercept datausd.train dataemas.train datasaham.train
## 0.9743 0.0050 16793.903 0.1634 0.1094 2.7737
## s.e. 0.0201 0.0922 2519.156 0.1706 0.3768 1.0990
##
## sigma^2 = 5048: log likelihood = -822.37
## AIC=1658.73 AICc=1659.55 BIC=1679.57
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -2.171782 69.56307 54.73204 -0.01208502 0.2727293 0.9614798
## ACF1
## Training set 0.002006945
coeftest(modelx5)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 9.7429e-01 2.0075e-02 48.5330 < 2.2e-16 ***
## ma1 4.9793e-03 9.2163e-02 0.0540 0.95691
## intercept 1.6794e+04 2.5192e+03 6.6665 2.62e-11 ***
## datausd.train 1.6341e-01 1.7061e-01 0.9578 0.33817
## dataemas.train 1.0941e-01 3.7675e-01 0.2904 0.77150
## datasaham.train 2.7737e+00 1.0990e+00 2.5239 0.01161 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
modelxaccuracy<-data.frame(
"Model"=c("ARIMAX(2,0,5)", "ARIMAX(2,0,6)", "ARIMAX(3,0,5)", "ARIMAX(4,0,5)","ARIMAX(1,0,1)"),
"AIC"=c(modelx1$aic, modelx2$aic, modelx3$aic,modelx4$aic,modelx5$aic),
"BIC"=c(modelx1$bic, modelx2$bic, modelx3$bic,modelx4$bic,modelx5$bic),
"Signifikansi"=c("Signifikan","Signifikan","Tidak Signifikan","Tidak Signifikan"," Signifikan"))
modelxaccuracy
## Model AIC BIC Signifikansi
## 1 ARIMAX(2,0,5) 1664.373 1700.094 Signifikan
## 2 ARIMAX(2,0,6) 1665.261 1703.959 Signifikan
## 3 ARIMAX(3,0,5) 1665.693 1704.390 Tidak Signifikan
## 4 ARIMAX(4,0,5) 1664.397 1706.072 Tidak Signifikan
## 5 ARIMAX(1,0,1) 1658.730 1679.567 Signifikan
Overfitting
model5x.a <- Arima(datagbp.train, order = c(1,0,2), xreg = cbind(datausd.train,dataemas.train,datasaham.train), method = "ML")
coeftest(model5x.a)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 9.8135e-01 1.7965e-02 54.6251 < 2.2e-16 ***
## ma1 -1.7204e-02 9.0836e-02 -0.1894 0.8498
## ma2 -1.0182e-01 1.1451e-01 -0.8892 0.3739
## intercept 1.6138e+04 2.6053e+03 6.1944 5.851e-10 ***
## datausd.train 1.9170e-01 1.7075e-01 1.1227 0.2616
## dataemas.train 2.3473e-01 4.0857e-01 0.5745 0.5656
## datasaham.train 2.7795e+00 1.0848e+00 2.5623 0.0104 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(model5x.a)
## Series: datagbp.train
## Regression with ARIMA(1,0,2) errors
##
## Coefficients:
## ar1 ma1 ma2 intercept datausd.train dataemas.train
## 0.9813 -0.0172 -0.1018 16138.260 0.1917 0.2347
## s.e. 0.0180 0.0908 0.1145 2605.304 0.1708 0.4086
## datasaham.train
## 2.7795
## s.e. 1.0848
##
## sigma^2 = 5054: log likelihood = -821.97
## AIC=1659.94 AICc=1660.99 BIC=1683.75
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -2.89548 69.35253 54.19989 -0.01573492 0.2700963 0.9521316
## ACF1
## Training set 0.007025035
model5x.b <- Arima(datagbp.train, order = c(2,0,1), xreg = cbind(datausd.train,dataemas.train,datasaham.train), method = "ML")
coeftest(model5x.b)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 2.5892e-01 6.0307e-01 0.4293 0.66768
## ar2 6.9531e-01 5.8968e-01 1.1791 0.23835
## ma1 7.4329e-01 5.7527e-01 1.2921 0.19633
## intercept 1.6574e+04 2.5681e+03 6.4539 1.09e-10 ***
## datausd.train 1.7478e-01 1.7253e-01 1.0131 0.31102
## dataemas.train 1.4517e-01 3.8715e-01 0.3750 0.70768
## datasaham.train 2.7367e+00 1.0980e+00 2.4925 0.01269 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(model5x.b)
## Series: datagbp.train
## Regression with ARIMA(2,0,1) errors
##
## Coefficients:
## ar1 ar2 ma1 intercept datausd.train dataemas.train
## 0.2589 0.6953 0.7433 16574.399 0.1748 0.1452
## s.e. 0.6031 0.5897 0.5753 2568.113 0.1725 0.3871
## datasaham.train
## 2.7367
## s.e. 1.0980
##
## sigma^2 = 5077: log likelihood = -822.25
## AIC=1660.5 AICc=1661.56 BIC=1684.32
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -2.063197 69.51066 54.49082 -0.01153924 0.2715181 0.9572424
## ACF1
## Training set -0.01889429
Diagnostik Model Arimax(1,0,1)
sisaan.arimax <- modelx5$residuals
Box.test(sisaan.arimax)
##
## Box-Pierce test
##
## data: sisaan.arimax
## X-squared = 0.00058403, df = 1, p-value = 0.9807
plot(sisaan.arimax, type="o",ylab="Sisaan", xlab="Order",main="Plot Sisaan vs Order")
abline(h=0,col="red")
acf(sisaan.arimax, main = "Plot ACF Sisaan Model ARIMAX")
pacf(sisaan.arimax, lag.max = 24, main = "Plot ACF Sisaan Model ARIMAX")
Forecast
ramalanx <- forecast((modelx5), xreg = cbind(datausd.test,dataemas.test,datasaham.test))
## Warning in forecast.forecast_ARIMA((modelx5), xreg = cbind(datausd.test, : xreg
## contains different column names from the xreg used in training. Please check
## that the regressors are in the same order.
data.ramalanx <- ramalanx$mean
data.ramalan.tsx <- ts(data.ramalanx, start = 146)
plot(ramalanx,col="black",col.sub ="black",col.axis="black",
col.lab="black",col.main="black",lwd=2)
box(col="black",lwd=2)
perbandinganx <- matrix(c(datagbp.test[1:10], data.ramalanx[1:10]), nrow = 10, ncol = 2, byrow = FALSE)
colnames(perbandinganx) <- c("Aktual", "Ramalan")
perbandinganx
## Aktual Ramalan
## [1,] 19409.94 19539.05
## [2,] 19439.03 19543.57
## [3,] 19445.60 19560.25
## [4,] 19490.78 19583.62
## [5,] 19428.94 19605.98
## [6,] 19478.72 19625.74
## [7,] 19509.23 19646.26
## [8,] 19431.19 19670.81
## [9,] 19440.66 19679.05
## [10,] 19519.06 19716.02
ts.plot(datagbp.ts,xlab = "Periode", ylab = "Data Inflasi(Persen)", col="black",lwd=2,main="Forecasting ARIMAX(2,1,0)",gpars = list(col.main="black",col.axis="black",col.sub="black"))
lines(data.ramalan.tsx, col = "blue",lwd=2)
lines(datagbp.test, col = "red", lwd =2)
legend(2018,9,c("Data Training", "Data Testing", "Data Forecast ARIMAX(2,1,0)"),
lwd=2, col=c("black","red","blue"), cex=0.8)
box(col="black",lwd=2)
error <- data.frame(datagbp.test)-data.frame(data.ramalanx[1:61])
## SSE (Sum Square Error)
SSE <- sum(error^2, na.rm = T)
## MSE (Mean Squared Error)
MSE<- sapply(error^2, mean, na.rm = T)
## RMSE (Root Mean Square Error)
RMSE <- sqrt(MSE)
## MAD (Mean Absolute Deviation)
MAD <- sapply(abs(error), mean, na.rm = T)
## MAPE (Mean Absolute Percentage Error)
r.error <- (error/data.frame(datagbp.test))*100 # Relative Error
MAPE <- sapply(abs(r.error), mean, na.rm = T)
akurasiarimax <- data.frame(
"Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"),
"Forecasting" = c(SSE, MSE, MAPE, RMSE, MAD))
kable(akurasiarimax)
| Ukuran.Keakuratan | Forecasting |
|---|---|
| SSE | 3.731259e+07 |
| MSE | 6.116817e+05 |
| MAPE | 3.670465e+00 |
| RMSE | 7.821008e+02 |
| MAD | 7.059936e+02 |
ARIMA VS ARIMAX
forecasterror <- data.frame(akurasifarima, akurasiarimax)
kable(forecasterror)
| Ukuran.Keakuratan | Forecasting | Ukuran.Keakuratan.1 | Forecasting.1 |
|---|---|---|---|
| SSE | 7.928205e+06 | SSE | 3.731259e+07 |
| MSE | 1.299706e+05 | MSE | 6.116817e+05 |
| MAPE | 1.635303e+00 | MAPE | 3.670465e+00 |
| RMSE | 3.605143e+02 | RMSE | 7.821008e+02 |
| MAD | 3.153171e+02 | MAD | 7.059936e+02 |
ts.plot(datagbp.ts,xlab = "Periode", ylab = "Data Inflasi(Persen)", col="black",lwd=2,main="Forecasting ARIMAX(2,1,0) vs Forecasting ARIMA(2,1,0)",gpars = list(col.main="black",col.axis="black",col.sub="black"))
lines(data.ramalan.tsx, col = "blue",lwd=2)
lines(data.ramalan.ts, col = "purple", lwd=2)
lines(datagbp.test, col = "red", lwd =2)
abline(v=2020, col=c("green"), lty=1, lwd=1)
legend(2019,9,c("Data Testing","Data Forecast ARIMAX", "Data Forecast ARIMA", "Split Data"),
lwd=2, col=c("red","blue","purple","green"), cex=0.8)
box(col="black",lwd=2)
korarimax <- cor(datagbp.test,data.ramalan.tsx)
korarima <- cor(datagbp.test,data.ramalan.ts)
framekorelasi <- data.frame(
"Variabel Korelasi" = c("ARIMAX(1,0,1) vs Data Aktual", "ARIMA(3,2,2) vs Data Aktual"),
"Nilai Korelasi" = c(korarimax, korarima))
kable(framekorelasi)
| Variabel.Korelasi | Nilai.Korelasi |
|---|---|
| ARIMAX(1,0,1) vs Data Aktual | -0.5291303 |
| ARIMA(3,2,2) vs Data Aktual | 0.7975509 |