library(readr)
library(fpp)
library(astsa)
library(DT)
library(dygraphs)
library(psd)
library(TSA)
# ------------------TIME SERIES FORECASTING GROUP ASSIGNMENT----------------------#
# Working Directory
setwd("D:/Group Assignment")
# Load beer production dataset
TSData <- read.csv('beer.csv')
# Data Exploration and Visualization
str(TSData)
summary(TSData)
head(TSData)
tail(TSData)
sum(is.na(TSData)) # no null data
# To predict the next 2 years beer sales, it is required to convert beer data
# Converting beer data into ts object(time series)
TS_Beer <- ts(TSData, start = 2000, frequency = 4, end=2018)
is.ts(TS_Beer)
summary(TS_Beer)
str(TS_Beer)
#-----------------------Beer Sales in past 18 years------------------------#
ts.plot(beer_ts, col="red" ,main="Beer Sales in past 18 years",
xlab="Years (2000 - 2018)", ylab="Sales in (000)$", type="b")
# ---------------------Sampling Times of Time Series-----------------------#
deltat(TS_Beer)
frequency(TS_Beer)
cycle(TS_Beer)
Annual_Beer <- aggregate(TS_Beer)
str(Annual_Beer)
summary(Annual_Beer)
#-------------------Annual consumption of beer Year Over Year------------------#
plot(Annual_Beer,col="blue", main="Annual consumption of beer YOY")
avg_beer <- aggregate(TS_Beer,FUN=mean)
summary(avg_beer)
str(avg_beer)
# -----------------Average consumption of beer Year Over Year------------------#
plot(avg_beer,col="red", main="Average consumption of beer YOY")
# --------------------- Quarterly based sub-series plot ----------------------#
ggsubseriesplot(TS_Beer,facets=TRUE, main=" Quarterly based sub-series plot ")
# ------------------ Boxplot between quarters and years-----------------------#
boxplot(TS_Beer~cycle(TS_Beer), main="Variation between quarters and years")
# -------------------------Lagplot of Beer data------------------------------#
gglagplot(TS_Beer)
# ------------------------Seasonal plot of Beer Sales------------------------#
ggseasonplot(TS_Beer,facets=TRUE,polar = TRUE)
# --------------------------Autocorrelation Analysis ------------------------#
acf(TS_Beer)
pacf(TS_Beer)
# ----------------- stationary or non-stationary Check------------------#
# Augmented Dickey-Fuller Test
adf.test(TS_Beer)
# Kwiatkowski-Phillips-Schmidt-Shin Test
kpss.test(TS_Beer)
# ---------------------------seasonality check ----------------------------#
periodogram(TS_Beer)
# To Detrend the pattern and removing seasonality
diff_beer <- diff(TS_Beer,lag=frequency(TS_Beer))
kpss.test(diff_beer)
#------------To check variance of stability----------------------#
BoxCox.lambda(diff_beer)
# ----------------Detrend and Deseasonality-----------------------#
plot(diff_beer, col="Blue", main="Detrend and Deseasonality")
# ---------------Check for autocorrelation ---------------------#
acf(diff_beer)
pacf(diff_beer)
# -----------------Visualizing the trend----------------------#
Beer_Trend = ma(TS_Beer,order = 4,centre = T)
plot(TS_Beer, col="blue", main ="Quartely Beer Sales")
lines(Beer_Trend, col="red")
# Beer trend line
plot(Beer_Trend,col="red",main="Trend Line in Beer Sales series")
# Detrend beer time series
detrend_beer = TS_Beer - Beer_Trend
plot(detrend_beer, col="blue", main = "Time Series after removing the Trend Component")
# Stable data
matrix_beer = t(matrix(data = detrend_beer, nrow = 4))
matrix_beer
# Seasonality in beer
seasonal_beer = colMeans(matrix_beer, na.rm = T)
seasonal_beer
seasonal = rep(seasonal_beer,18)
plot.ts(seasonal, col="green", main="Seasonal Component of Time Series")
# Randomization in beer
random_beer = detrend_beer-seasonal
plot(random_beer,col="violet", main = "Random Noise")
# Reconstruct the original time series
reconstruct = Beer_Trend + seasonal + random_beer
plot(reconstruct,col="Blue", main = "Getting the original time series")
#----------------------Compare with original time series---------------------------#
# Decompose the beer_ts time series
decompose_beer <- decompose(TS_Beer)
plot(decompose_beer)
# Seasonal decomposition
sd_fitness <- stl(TS_Beer, s.window="period")
plot(sd_fitness)
#------------------------MODELLING TECHNIQUES--------------------------------#
# Winter Holt’s method
autoplot(diff_beer)
hw_beer <- hw(TS_Beer,seasonal = "additive")
summary(hw_beer)
autoplot(forecast(hw_beer,n.ahead=8))
# Decomposing the HW forecast)
states=hw_beer$model$states[,1:3]
colnames(states)= cbind('level','trend','seasonality')
plot(states,col="blue",main = "Decomposing the forecast")
# Residual Check
checkresiduals(hw_beer)
# Exponential Smoothing (ETS) Method
ETS_beer <- ets(TS_Beer)
ETS_beer
# ------------------FORCASTING FOR THE NEXT 2 YEARS ------------------#
ETS_beer %>% forecast(h=8) %>% autoplot()