1 LIBRARY

library(TSA)
library(tseries)
library(lmtest)
library(forecast)
library(MASS)
library(tidyverse)
library(readxl)
library(rmarkdown)

2 DATA

AMD <- read_excel("AMD2015.xlsx",)
Data <- as.numeric(AMD$Close)
data.ts <- ts(Data, start=c(2015,1), frequency = 12)
paged_table(as.data.frame(AMD))
plot(data.ts, xlab="Tahun", ylab="Harga ($)", main="Plot Time Series Harga Saham AMD", col = "blue")
grid()

seasonplot(data.ts,12,main="Seasonal Plot of AMD",xlab = "Bulan", ylab="Harga",year.labels = TRUE, col=rainbow(18))

3 CEK STASIONER VARIAN

model <- lm(data.ts ~ 1) 
boxcox(model, lambda = seq(-2, 2, by = 0.1))

lambda <- BoxCox.lambda(data.ts)
print(paste("Lambda =", lambda))
## [1] "Lambda = 0.193438623038113"

3.1 TRANSFORMASI BOXCOX

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

4 CEK STASIONER MEAN

adf.test(trans1)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  trans1
## Dickey-Fuller = -2.3195, Lag order = 4, p-value = 0.4439
## alternative hypothesis: stationary

4.1 DIFFERENCING

diff1 <- diff(trans1)
adf.test(diff1)
## Warning in adf.test(diff1): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff1
## Dickey-Fuller = -5.4011, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

sudah stasioner, p value < 0,05

plot(diff1, xlab="Tahun", ylab="Harga ($)", main="Plot Time Series Setelah Differencing", col = "blue")
grid()

5 IDENTIFIKASI MODEL

5.1 AR/MA

acf(diff1, lag.max = 48)

melewati garis mungkin signifikan mungkin tidak

pacf(diff1, lag.max = 48)

hanya menyentuh tidak terlalu signifikan

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

010 111 211 011 111

5.2 SEASONAL

diff_s =diff(data.ts, lag=12)
acf(diff_s, lag.max = 48)

acf(data.ts, lag.max = 48)

pacf(diff_s, lag.max = 48)

pacf(data.ts, lag.max = 48)

ada 1 signifikan P = 1

010 111 211 011

6 MEMBUAT MODEL

model1 = Arima(data.ts, order = c(0,1,0))
model2 = Arima(data.ts, order = c(1,1,1))
model3 = Arima(data.ts, order = c(2,1,1))
model4 = Arima(data.ts, order = c(0,1,1))

model5 = Arima(data.ts, order = c(0,1,0), seasonal = list(order=c(1,0,0), period=12))
model6 = Arima(data.ts, order = c(1,1,1), seasonal = list(order=c(1,0,0), period=12))
model7 = Arima(data.ts, order = c(2,1,1), seasonal = list(order=c(1,0,0), period=12))
model8 = Arima(data.ts, order = c(0,1,1), seasonal = list(order=c(1,0,0), period=12))

7 MEMILIH MODEL

Membandingkan nilai AIC

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

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

for (i in 1:8) {
  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 905.1279 114.7854 10.71380 6.854105 12.50987
## 2 Model2 908.7560 114.4136 10.69643 6.798906 12.48327
## 3 Model3 909.4163 113.1186 10.63572 6.801098 12.49571
## 4 Model4 907.0857 114.7443 10.71188 6.831924 12.49989
## 5 Model5 900.9245 108.3190 10.40764 6.620650 12.55240
## 6 Model6 904.6808 108.0837 10.39633 6.635668 12.57156
## 7 Model7 906.4670 107.9621 10.39048 6.610295 12.52469
## 8 Model8 902.8350 108.2097 10.40239 6.634095 12.57069
coeftest(model5)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)  
## sar1 0.237502   0.093394   2.543  0.01099 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
checkresiduals(model5)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,1,0)(1,0,0)[12]
## Q* = 33.202, df = 23, p-value = 0.0776
## 
## Model df: 1.   Total lags used: 24

8 PREDIKSI

pred.AMD <- forecast(model5, h = 12)
pred.AMD
##          Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
## Jan 2025       146.1765 132.72606 159.6270 125.60580 166.7473
## Feb 2025       152.0761 133.05423 171.0980 122.98467 181.1675
## Mar 2025       149.2166 125.91964 172.5135 113.58700 184.8461
## Apr 2025       143.9654 117.06443 170.8664 102.82391 185.1069
## May 2025       145.9889 115.91272 176.0651  99.99134 191.9865
## Jun 2025       144.8750 111.92821 177.8219  94.48721 195.2629
## Jul 2025       140.6641 105.07748 176.2508  86.23905 195.0892
## Aug 2025       141.6331 103.58941 179.6768  83.45028 199.8160
## Sep 2025       145.3192 104.96770 185.6706  83.60693 207.0314
## Oct 2025       140.5667  98.03257 183.1009  75.51635 205.6171
## Nov 2025       138.9304  94.32014 183.5406  70.70492 207.1558
## Dec 2025       139.9231  93.32927 186.5170  68.66397 211.1823
plot(pred.AMD, xlab="Tahun", ylab="Harga ($)", main="Plot Time Series Hasil Prediksi", col = "blue")
grid()