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

Cek Stasioner
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()

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

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