1 Persiapan Library

library("forecast")
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library("TTR")
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("graphics")
library("tseries")
library(readxl)
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric

2 Data

data<-read_xlsx("C:/Wahyu/Kuliah/Semester 3/Statistika Ekonomi dan Industri/PROJEK SEI/Projek Sei Excel/Data Kurs Dollar.xlsx")
## New names:
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
class(data)
## [1] "tbl_df"     "tbl"        "data.frame"
data.ts <- ts(data$kurs_dollar, start = c(2018, 7), frequency = 12)
class(data.ts)
## [1] "ts"

3 Plot Data

plot(data.ts, xlab="Tahun", ylab="Harga (Rp)", main="Plot Time Series Harga Tukar Rupiah Terhadap Dollar (USD)", col = "blue")
grid()

seasonplot(data.ts,12,main="Seasonal Plot of Rupiah Exchange Rate Against Dollar (USD)",xlab = "Bulan", ylab="Harga (Rp)",year.labels = TRUE, col=rainbow(18))

4 Cek Stasioner

4.1 Varian

cek.stasioner <- BoxCox.lambda(data.ts)
cek.stasioner
## [1] 1.999924
trans1 <- (((data.ts)^5.7-1)/cek.stasioner)
BoxCox.lambda(trans1)
## [1] 1.015204
plot(trans1, xlab="Tahun", ylab="Harga (Rp)", main="Plot Time Series Setelah Transformasi BoxCox ", col = "blue")
grid()

4.2 Mean

adf_test <- adf.test(trans1)
print(adf_test)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  trans1
## Dickey-Fuller = -2.578, Lag order = 4, p-value = 0.3394
## alternative hypothesis: stationary
diff_data <- diff(trans1, differences = 1)
adf_test <- adf.test(diff_data)
## Warning in adf.test(diff_data): p-value smaller than printed p-value
print(adf_test)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_data
## Dickey-Fuller = -4.8743, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
plot(diff_data, xlab="Tahun", ylab="Harga (Rp)", main="Plot Time Series Setelah Differencing", col = "blue")
grid()

5 Mencari Parameter Terbaik

acf(diff_data, lag.max = 48)

pacf(diff_data, lag.max = 48)

eacf(diff_data)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o x o o o o o o o o o  o  o  o 
## 1 x x 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 o x o o o o o o o o o  o  o  o 
## 5 o x o o o o o o o o o  o  o  o 
## 6 o x o o o o o o o o o  o  o  o 
## 7 x o x o x o o o o o o  o  o  o

6 Membangun Model ARIMA

model1 = Arima(data.ts, order = c(0,1,0))
model2 = Arima(data.ts, order = c(1,1,1))
model3 = Arima(data.ts, order = c(0,1,3), include.drift = TRUE)
model4 = Arima(data.ts, order = c(1,1,1))
model5 = Arima(data.ts, order = c(1,1,2))
model6 = Arima(data.ts, order = c(1,1,3))
model7 = Arima(data.ts, order = c(2,1,0))
model8 = Arima(data.ts, order = c(2,1,2))
model9 = Arima(data.ts, order = c(2,1,3))
model10 = Arima(data.ts, order = c(3,1,2))
model11 = Arima(data.ts, order = c(3,1,3))

7 Mencari Model ARIMA Terbaik

models <- list(model1, model2, model3, model4, model5, model6, model7, model8, model9, model10, model11)

results <- data.frame(
  Model = paste0("Model", 1:11),
  AIC = NA,
  MSE = NA,
  RMSE = NA,
  MAE = NA,
  MAPE = NA
)

for (i in 1:11) {
  results$AIC[i] <- AIC(models[[i]])
  acc <- accuracy(models[[i]])
  results$MSE[i] <- (acc[1, "RMSE"])^2
  results$RMSE[i] <- acc[1, "RMSE"]
  results$MAE[i] <- acc[1, "MAE"]
  results$MAPE[i] <- acc[1, "MAPE"]
  
}
print(results)
##      Model      AIC      MSE     RMSE      MAE     MAPE
## 1   Model1 1103.308 94084.72 306.7323 210.5644 1.418141
## 2   Model2 1093.428 78177.57 279.6025 198.9535 1.340588
## 3   Model3 1085.063 66094.82 257.0891 186.9748 1.262292
## 4   Model4 1093.428 78177.57 279.6025 198.9535 1.340588
## 5   Model5 1085.000 67962.98 260.6971 186.5969 1.254678
## 6   Model6 1086.635 67632.04 260.0616 186.2825 1.253205
## 7   Model7 1085.654 70541.89 265.5972 188.8305 1.272883
## 8   Model8 1086.423 67443.95 259.6997 185.9240 1.251253
## 9   Model9 1088.382 67408.68 259.6318 185.8220 1.250578
## 10 Model10 1088.279 67323.14 259.4670 186.0520 1.252142
## 11 Model11 1090.261 67304.63 259.4313 186.0651 1.252174
coeftest(model5)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value  Pr(>|z|)    
## ar1  0.365185   0.174345  2.0946   0.03621 *  
## ma1 -0.128347   0.144943 -0.8855   0.37589    
## ma2 -0.562972   0.089551 -6.2866 3.245e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
checkresiduals(model5)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(1,1,2)
## Q* = 6.3223, df = 13, p-value = 0.9336
## 
## Model df: 3.   Total lags used: 16

8 Prdiksi

pred.AMD <- forecast(model5, h = 3)
pred.AMD
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 2025       15858.78 15515.77 16201.79 15334.20 16383.36
## Feb 2025       15787.15 15241.58 16332.71 14952.78 16621.51
## Mar 2025       15760.99 15156.29 16365.68 14836.18 16685.79

8.1 Plot Prediksi

plot(pred.AMD, xlab="Tahun", ylab="Harga (Rp)", main="Plot Time Series Gabungan Data Asli dan Prediksi", col = "blue")

data.prediksi <- pred.AMD$mean
data.prediksi <- data.frame(data.prediksi)
data.prediksi
##   data.prediksi
## 1      15858.78
## 2      15787.15
## 3      15760.99