###Method 1 :Moving Average and Exponential smoothing approach### # Part A. Moving Average

library(dplyr)
library(zoo)


#Time Series data
df <- data.frame(month=c(1,2,3,4,5,6,7,8,9,10,11,12),
                 sales =c(240,352,230,260,280,322,220,310,240,310,240,230))

# Descriptive Statistics 
summary(df)
#Interpretation: The average sales over 6 week period is 14.50

#Time series plot
plot(df$month, df$sales, type = "o", col ="blue", xlab = "Month", ylab = "Sales",
     main = "Alabama Building Contracts in $Millions")
#Interpretation: The time series plot exhibits a trend pattern as 
# the points tend to stray away from the mean 
# Part A. Moving Average 
#Manually calculate the three week moving average
df$avg_sales3 <- c(NA,NA,NA,
                   df$sales[1] + df$sales[2] + df$sales[3] / 3,
                   df$sales[2] + df$sales[3] + df$sales[4] / 3,
                   df$sales[3] + df$sales[4] + df$sales[5] / 3,
                   df$sales[4] + df$sales[5] + df$sales[6] / 3,
                   df$sales[5] + df$sales[6] + df$sales[7] / 3,
                   df$sales[6] + df$sales[7] + df$sales[8] / 3,
                   df$sales[7] + df$sales[8] + df$sales[9] / 3,
                   df$sales[8] + df$sales[9] + df$sales[10] / 3,
                   df$sales[9] + df$sales[10] + df$sales[11] / 3
                   )

#Calculate the squared errors (only for weeks where moving average is available)
df <- df %>%
  mutate(squared_error = ifelse(is.na(avg_sales3), NA, (sales - avg_sales3)^2)
  )

#Compute MSE (excluding the initial weeks with NA) 
mse <- mean(df$squared_error, na.rm = TRUE)
mse #Output the MSE = 143065.2

#Part B Exponential Smoothing 
# Note: were using the same data from line 13

alpha <- 0.2 
exp_smooth <- rep(NA, length(df$sales))
exp_smooth[1] <- df$sales[1] #starting point 
for(i in 2 : length(df$sales)) {
  exp_smooth[i] <-alpha * df$sales [i-1] +(1 - alpha) *exp_smooth[i-1]
}

mse_exp_smooth <- mean((df$sales[2:12] - exp_smooth[2:12]^2) 
mse_exp_smooth #Output MSE = -67117.24

#Comparison
better_method <- ifelse(mse < mse_exp_smooth, "Three-Month Moving Average", "Exponential Smoothing")

#Results
list(
  MSE_Moving_Average = mse,
  MSE_Exponential_Smoothing = mse_exp_smooth,
  Better_Method = better_method
)

#Interpretation: Exponential smoothing has better MSE when compared