mod_ar <-Arima(WWWusage, order = c(2,0,0)) # AR(2) model
 mod_ma <-Arima(WWWusage, order = c(0,0,2)) # MA(2) model
 mod_arma <-Arima(WWWusage, order = c(1,0,1)) # ARMA(1,1) model
 mod_arima <-auto.arima(WWWusage) # ARIMA model
mod_arima <-auto.arima(WWWusage)
 # model summary
 summary(mod_arima)
## Series: WWWusage 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1     ma1
##       0.6504  0.5256
## s.e.  0.0842  0.0896
## 
## sigma^2 = 9.995:  log likelihood = -254.15
## AIC=514.3   AICc=514.55   BIC=522.08
## 
## Training set error measures:
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 0.3035616 3.113754 2.405275 0.2805566 1.917463 0.5315228
##                     ACF1
## Training set -0.01715517
 # model parameters
 mod_arima$coef
##       ar1       ma1 
## 0.6503760 0.5255959
 # 12-step-ahead forecast
 forecast(mod_arima, h = 12)
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 101       218.8805 214.8288 222.9322 212.6840 225.0770
## 102       218.1524 208.4496 227.8552 203.3133 232.9915
## 103       217.6789 202.3128 233.0449 194.1786 241.1792
## 104       217.3709 196.6302 238.1115 185.6508 249.0910
## 105       217.1706 191.4321 242.9091 177.8069 256.5343
## 106       217.0403 186.6844 247.3962 170.6149 263.4657
## 107       216.9556 182.3341 251.5771 164.0066 269.9046
## 108       216.9005 178.3266 255.4744 157.9068 275.8942
## 109       216.8646 174.6121 259.1172 152.2449 281.4844
## 110       216.8413 171.1478 262.5348 146.9592 286.7235
## 111       216.8262 167.8979 265.7544 141.9969 291.6555
## 112       216.8163 164.8325 268.8001 137.3140 296.3187
 forecast(mod_arima, h = 12) %>% autoplot()

library(forecast)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.4.3
library(datasets)

# Load data
data("WWWusage")
www_data <- WWWusage

# Fit models (corrected syntax)
mod_ar <- Arima(WWWusage, order = c(2,0,0))   # AR(2) model
mod_ma <- Arima(WWWusage, order = c(0,0,2))   # MA(2) model
mod_arma <- Arima(WWWusage, order = c(1,0,1)) # ARMA(1,1) model
mod_arima <- auto.arima(WWWusage)             # Auto ARIMA model
mod_arima_manual <- Arima(WWWusage, order = c(1,1,1)) # Manual ARIMA(1,1,1)

# Print model summaries
cat("=== MODEL SUMMARIES ===\n")
## === MODEL SUMMARIES ===
cat("\nAR(2) Model:\n")
## 
## AR(2) Model:
print(summary(mod_ar))
## Series: WWWusage 
## ARIMA(2,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1      ar2      mean
##       1.8107  -0.8297  140.1117
## s.e.  0.0554   0.0571   16.3143
## 
## sigma^2 = 11.47:  log likelihood = -265.47
## AIC=538.94   AICc=539.36   BIC=549.36
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE     MAPE      MASE
## Training set 0.1177152 3.335831 2.722642 0.01575721 2.132211 0.6016552
##                   ACF1
## Training set 0.2008619
cat("\nMA(2) Model:\n")
## 
## MA(2) Model:
print(summary(mod_ma))
## Series: WWWusage 
## ARIMA(0,0,2) with non-zero mean 
## 
## Coefficients:
##          ma1     ma2      mean
##       1.7426  0.9547  137.4306
## s.e.  0.0407  0.0427    4.2075
## 
## sigma^2 = 136.1:  log likelihood = -389.23
## AIC=786.47   AICc=786.89   BIC=796.89
## 
## Training set error measures:
##                     ME     RMSE      MAE      MPE     MAPE     MASE      ACF1
## Training set 0.1616367 11.48822 9.249899 -2.35186 7.465587 2.044063 0.8213117
cat("\nARMA(1,1) Model:\n")
## 
## ARMA(1,1) Model:
print(summary(mod_arma))
## Series: WWWusage 
## ARIMA(1,0,1) with non-zero mean 
## 
## Coefficients:
##          ar1     ma1      mean
##       0.9927  0.7984  149.3662
## s.e.  0.0089  0.0459   48.4678
## 
## sigma^2 = 14.78:  log likelihood = -278.24
## AIC=564.49   AICc=564.91   BIC=574.91
## 
## Training set error measures:
##                     ME     RMSE      MAE       MPE     MAPE      MASE      ACF1
## Training set 0.6382458 3.786451 3.002197 0.3772227 2.336051 0.6634319 0.4253221
cat("\nAuto ARIMA Model:\n")
## 
## Auto ARIMA Model:
print(summary(mod_arima))
## Series: WWWusage 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1     ma1
##       0.6504  0.5256
## s.e.  0.0842  0.0896
## 
## sigma^2 = 9.995:  log likelihood = -254.15
## AIC=514.3   AICc=514.55   BIC=522.08
## 
## Training set error measures:
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 0.3035616 3.113754 2.405275 0.2805566 1.917463 0.5315228
##                     ACF1
## Training set -0.01715517
cat("\nManual ARIMA(1,1,1) Model:\n")
## 
## Manual ARIMA(1,1,1) Model:
print(summary(mod_arima_manual))
## Series: WWWusage 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1     ma1
##       0.6504  0.5256
## s.e.  0.0842  0.0896
## 
## sigma^2 = 9.995:  log likelihood = -254.15
## AIC=514.3   AICc=514.55   BIC=522.08
## 
## Training set error measures:
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 0.3035616 3.113754 2.405275 0.2805566 1.917463 0.5315228
##                     ACF1
## Training set -0.01715517
# Generate forecasts
h <- 20
forecast_ar <- forecast(mod_ar, h = h)
forecast_ma <- forecast(mod_ma, h = h)
forecast_arma <- forecast(mod_arma, h = h)
forecast_arima <- forecast(mod_arima, h = h)
forecast_arima_manual <- forecast(mod_arima_manual, h = h)

# PLOT 1: Individual forecast plots
cat("\n=== CREATING FORECAST PLOTS ===\n")
## 
## === CREATING FORECAST PLOTS ===
p1 <- autoplot(forecast_ar) + 
  ggtitle(paste("AR(2) Forecast\nAIC:", round(AIC(mod_ar), 2))) +
  theme_minimal()

p2 <- autoplot(forecast_ma) + 
  ggtitle(paste("MA(2) Forecast\nAIC:", round(AIC(mod_ma), 2))) +
  theme_minimal()

p3 <- autoplot(forecast_arma) + 
  ggtitle(paste("ARMA(1,1) Forecast\nAIC:", round(AIC(mod_arma), 2))) +
  theme_minimal()

p4 <- autoplot(forecast_arima) + 
  ggtitle(paste("Auto ARIMA(", 
                paste(mod_arima$arma[1:3], collapse = ","), 
                ") Forecast\nAIC:", round(AIC(mod_arima), 2))) +
  theme_minimal()

p5 <- autoplot(forecast_arima_manual) + 
  ggtitle(paste("Manual ARIMA(1,1,1) Forecast\nAIC:", round(AIC(mod_arima_manual), 2))) +
  theme_minimal()

# Arrange all forecast plots
grid.arrange(p1, p2, p3, p4, p5, ncol = 2)

# PLOT 2: Comparison of all forecasts
cat("\n=== FORECAST COMPARISON ===\n")
## 
## === FORECAST COMPARISON ===
plot(forecast_ar, main = "WWWusage - All Model Forecasts Comparison", 
     ylab = "Number of Users", xlab = "Time")
lines(forecast_ma$mean, col = "blue", lwd = 2, lty = 2)
lines(forecast_arma$mean, col = "green", lwd = 2, lty = 2)
lines(forecast_arima$mean, col = "purple", lwd = 2, lty = 2)
lines(forecast_arima_manual$mean, col = "orange", lwd = 2, lty = 2)
legend("topleft", 
       legend = c("AR(2)", "MA(2)", "ARMA(1,1)", "Auto ARIMA", "ARIMA(1,1,1)"),
       col = c("red", "blue", "green", "purple", "orange"),
       lwd = 2, lty = c(1, 2, 2, 2, 2), bty = "n")

# PLOT 3: Fitted values comparison
cat("\n=== FITTED VALUES COMPARISON ===\n")
## 
## === FITTED VALUES COMPARISON ===
par(mfrow = c(2, 3))
plot(WWWusage, main = "Original Data", ylab = "Users", type = "l", col = "black")
plot(fitted(mod_ar), main = "AR(2) Fitted", ylab = "Users", type = "l", col = "red")
plot(fitted(mod_ma), main = "MA(2) Fitted", ylab = "Users", type = "l", col = "blue")
plot(fitted(mod_arma), main = "ARMA(1,1) Fitted", ylab = "Users", type = "l", col = "green")
plot(fitted(mod_arima), main = "Auto ARIMA Fitted", ylab = "Users", type = "l", col = "purple")
plot(fitted(mod_arima_manual), main = "ARIMA(1,1,1) Fitted", ylab = "Users", type = "l", col = "orange")

par(mfrow = c(1, 1))

# PLOT 4: Residuals analysis
cat("\n=== RESIDUALS ANALYSIS ===\n")
## 
## === RESIDUALS ANALYSIS ===
par(mfrow = c(3, 2))

# AR(2) residuals
res_ar <- residuals(mod_ar)
plot(res_ar, main = "AR(2) Residuals", type = "l", ylab = "Residuals")
abline(h = 0, col = "red")
acf(res_ar, main = "AR(2) Residuals ACF")

# MA(2) residuals
res_ma <- residuals(mod_ma)
plot(res_ma, main = "MA(2) Residuals", type = "l", ylab = "Residuals")
abline(h = 0, col = "red")
acf(res_ma, main = "MA(2) Residuals ACF")

# ARMA(1,1) residuals
res_arma <- residuals(mod_arma)
plot(res_arma, main = "ARMA(1,1) Residuals", type = "l", ylab = "Residuals")
abline(h = 0, col = "red")
acf(res_arma, main = "ARMA(1,1) Residuals ACF")

par(mfrow = c(1, 1))

# PLOT 5: Model coefficients comparison
cat("\n=== MODEL COEFFICIENTS ===\n")
## 
## === MODEL COEFFICIENTS ===
models <- list(
  "AR(2)" = mod_ar,
  "MA(2)" = mod_ma,
  "ARMA(1,1)" = mod_arma,
  "Auto ARIMA" = mod_arima,
  "ARIMA(1,1,1)" = mod_arima_manual
)

# Create a summary table
model_summary <- data.frame(
  Model = names(models),
  Order = c("(2,0,0)", "(0,0,2)", "(1,0,1)", 
            paste("(", mod_arima$arma[1], ",", mod_arima$arma[6], ",", mod_arima$arma[2], ")", sep = ""),
            "(1,1,1)"),
  AIC = sapply(models, AIC),
  BIC = sapply(models, BIC),
  RMSE = sapply(models, function(m) sqrt(mean(residuals(m)^2))),
  Coefficients = sapply(models, function(m) {
    coefs <- round(m$coef, 4)
    paste(names(coefs), "=", coefs, collapse = ", ")
  })
)

print(model_summary)
##                     Model   Order      AIC      BIC      RMSE
## AR(2)               AR(2) (2,0,0) 538.9395 549.3602  3.335831
## MA(2)               MA(2) (0,0,2) 786.4656 796.8863 11.488221
## ARMA(1,1)       ARMA(1,1) (1,0,1) 564.4870 574.9077  3.786451
## Auto ARIMA     Auto ARIMA (1,1,1) 514.2995 522.0848  3.113754
## ARIMA(1,1,1) ARIMA(1,1,1) (1,1,1) 514.2995 522.0848  3.113754
##                                                   Coefficients
## AR(2)        ar1 = 1.8107, ar2 = -0.8297, intercept = 140.1117
## MA(2)         ma1 = 1.7426, ma2 = 0.9547, intercept = 137.4306
## ARMA(1,1)     ar1 = 0.9927, ma1 = 0.7984, intercept = 149.3662
## Auto ARIMA                          ar1 = 0.6504, ma1 = 0.5256
## ARIMA(1,1,1)                        ar1 = 0.6504, ma1 = 0.5256
# PLOT 6: Actual vs Fitted for all models
cat("\n=== ACTUAL VS FITTED VALUES ===\n")
## 
## === ACTUAL VS FITTED VALUES ===
plot(WWWusage, type = "l", lwd = 2, col = "black", 
     main = "Actual vs Fitted Values - All Models",
     ylab = "Number of Users", xlab = "Time")
lines(fitted(mod_ar), col = "red", lty = 2)
lines(fitted(mod_ma), col = "blue", lty = 2)
lines(fitted(mod_arma), col = "green", lty = 2)
lines(fitted(mod_arima), col = "purple", lty = 2)
lines(fitted(mod_arima_manual), col = "orange", lty = 2)
legend("topleft", 
       legend = c("Actual", "AR(2)", "MA(2)", "ARMA(1,1)", "Auto ARIMA", "ARIMA(1,1,1)"),
       col = c("black", "red", "blue", "green", "purple", "orange"),
       lwd = c(2, 1, 1, 1, 1, 1), lty = c(1, 2, 2, 2, 2, 2), bty = "n")

# Final model comparison
cat("\n=== FINAL MODEL RANKING BY AIC ===\n")
## 
## === FINAL MODEL RANKING BY AIC ===
ranked_models <- model_summary[order(model_summary$AIC), ]
print(ranked_models)
##                     Model   Order      AIC      BIC      RMSE
## Auto ARIMA     Auto ARIMA (1,1,1) 514.2995 522.0848  3.113754
## ARIMA(1,1,1) ARIMA(1,1,1) (1,1,1) 514.2995 522.0848  3.113754
## AR(2)               AR(2) (2,0,0) 538.9395 549.3602  3.335831
## ARMA(1,1)       ARMA(1,1) (1,0,1) 564.4870 574.9077  3.786451
## MA(2)               MA(2) (0,0,2) 786.4656 796.8863 11.488221
##                                                   Coefficients
## Auto ARIMA                          ar1 = 0.6504, ma1 = 0.5256
## ARIMA(1,1,1)                        ar1 = 0.6504, ma1 = 0.5256
## AR(2)        ar1 = 1.8107, ar2 = -0.8297, intercept = 140.1117
## ARMA(1,1)     ar1 = 0.9927, ma1 = 0.7984, intercept = 149.3662
## MA(2)         ma1 = 1.7426, ma2 = 0.9547, intercept = 137.4306
cat("\nBest model:", ranked_models$Model[1], "with AIC =", round(ranked_models$AIC[1], 2))
## 
## Best model: Auto ARIMA with AIC = 514.3