library(TSA)
library(tseries)
library(lmtest)
library(forecast)
library(MASS)
library(tidyverse)
library(readxl)
library(rmarkdown)
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))
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"
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()
adf.test(trans1)
##
## Augmented Dickey-Fuller Test
##
## data: trans1
## Dickey-Fuller = -2.3195, Lag order = 4, p-value = 0.4439
## alternative hypothesis: stationary
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()
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
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
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))
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
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()