This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
## Libraries
library(fastDummies)
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(generics)
##
## Attaching package: 'generics'
## The following object is masked from 'package:caret':
##
## train
## The following object is masked from 'package:lubridate':
##
## as.difftime
## The following objects are masked from 'package:base':
##
## as.difftime, as.factor, as.ordered, intersect, is.element, setdiff,
## setequal, union
library(tsibble)
##
## Attaching package: 'tsibble'
## The following object is masked from 'package:lubridate':
##
## interval
## The following objects are masked from 'package:base':
##
## intersect, setdiff, union
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:generics':
##
## explain
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(fpp3)
## ── Attaching packages ──────────────────────────────────────────── fpp3 0.4.0 ──
## ✓ tibble 3.1.6 ✓ feasts 0.2.2
## ✓ tidyr 1.2.0 ✓ fable 0.3.1
## ✓ tsibbledata 0.4.0
## ── Conflicts ───────────────────────────────────────────────── fpp3_conflicts ──
## x lubridate::date() masks base::date()
## x dplyr::filter() masks stats::filter()
## x tsibble::intersect() masks generics::intersect(), base::intersect()
## x tsibble::interval() masks lubridate::interval()
## x dplyr::lag() masks stats::lag()
## x fabletools::MAE() masks caret::MAE()
## x fabletools::RMSE() masks caret::RMSE()
## x tsibble::setdiff() masks generics::setdiff(), base::setdiff()
## x tsibble::union() masks generics::union(), base::union()
library(modeest)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Registered S3 method overwritten by 'forecast':
## method from
## predict.default statip
##
## Attaching package: 'forecast'
## The following object is masked from 'package:modeest':
##
## naive
## The following objects are masked from 'package:generics':
##
## accuracy, forecast
library(latex2exp)
library(seasonal)
##
## Attaching package: 'seasonal'
## The following object is masked from 'package:tibble':
##
## view
## Data Set
df <- read.csv("//Users//kevinclifford//Downloads//Alcohol_Sales.csv", header=TRUE)
df$Sales <- df$S4248SM144NCEN
df$S4248SM144NCEN <- NULL
ts <- ts(df$Sales, frequency = 12, start=c(1992))
plot(ts)
## ETS Models
fit1 <- ets(ts)
fit1
## ETS(M,Ad,M)
##
## Call:
## ets(y = ts)
##
## Smoothing parameters:
## alpha = 0.0805
## beta = 0.0232
## gamma = 1e-04
## phi = 0.9592
##
## Initial states:
## l = 4199.083
## b = 3.4466
## s = 1.1642 1.0362 1.0338 0.9829 1.0534 1.0081
## 1.106 1.0665 0.9754 0.9758 0.8275 0.7702
##
## sigma: 0.0455
##
## AIC AICc BIC
## 5672.314 5674.549 5740.422
plot(fit1)
accuracy(fit1)
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 53.45892 364.3906 285.5164 0.5004852 3.657119 0.6753521 -0.2918586
fe <- forecast(fit1, 12)
acc <- accuracy(fe, df$Sales[1:12])
acc
## ME RMSE MAE MPE MAPE MASE
## Training set 53.45892 364.3906 285.5164 0.5004852 3.657119 0.312568
## Test set -9484.70207 9600.8980 9484.7021 -228.2510458 228.251046 10.383342
## ACF1
## Training set -0.2918586
## Test set NA
plot(fe, main="MMN")
arima1 <- auto.arima(ts)
arima1
## Series: ts
## ARIMA(3,1,1)(0,1,2)[12]
##
## Coefficients:
## ar1 ar2 ar3 ma1 sma1 sma2
## -0.1428 0.1580 0.5125 -0.9483 -0.2601 -0.2642
## s.e. 0.0637 0.0651 0.0609 0.0328 0.0581 0.0543
##
## sigma^2 = 102379: log likelihood = -2242.28
## AIC=4498.56 AICc=4498.93 BIC=4524.77
plot(arima1)
accuracy(arima1)
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 34.22564 310.4741 232.8522 0.3437269 2.939946 0.5507817 0.02751723
fe2 <- forecast(arima1, 12)
acc2 <- accuracy(fe2, df$Sales[1:12])
acc2
## ME RMSE MAE MPE MAPE MASE
## Training set 34.22564 310.4741 232.8522 0.3437269 2.939946 0.2549141
## Test set -9644.03404 9745.1509 9644.0340 -232.2911945 232.291195 10.5577699
## ACF1
## Training set 0.02751723
## Test set NA
plot(fe2, main="Auto-ARIMA")
train <- ts(df$Sales[1:319], frequency = 12, start = c(1992))
test <- ts(df$Sales[320:325], frequency = 12, start=c(2018, 8))
ets_train <- ets(train)
forecast_ets <- forecast(ets_train, h=6)
autoplot(ts) +
autolayer(forecast_ets, series = "ETS Model")
arima_train <- auto.arima(train)
forecast_arima <- forecast(arima_train, h=6)
autoplot(ts) +
autolayer(forecast_arima, series = "ARIMA Model")
ets_acc <- accuracy(forecast_ets, test)
ets_acc
## ME RMSE MAE MPE MAPE MASE
## Training set 17.67402 357.2065 282.4461 0.1167282 3.674768 0.6856084
## Test set 417.98531 555.1506 531.6242 3.1123649 4.029104 1.2904623
## ACF1 Theil's U
## Training set -0.3562882 NA
## Test set -0.4140589 0.230625
arima_acc <- accuracy(forecast_arima, test)
arima_acc
## ME RMSE MAE MPE MAPE MASE
## Training set 32.05491 307.1495 230.0796 0.3651227 2.940372 0.5584942
## Test set 501.53692 565.8644 513.9100 3.6570141 3.756829 1.2474628
## ACF1 Theil's U
## Training set 0.03072723 NA
## Test set -0.02538462 0.2383725