Load Data

setwd("~/Documents/MSAE/Predictive Analytics")
tempdata <- read.csv("monthly_global_surface_air_temperature.csv")

#Creating Tsibble

tempdata <- tempdata %>% 
  mutate(Month = yearmonth(Month)) %>% 
  tsibble(index = Month)

Training Set (2000-2012) & Test Set (2013-2016)

training <- head(tempdata, 822)
test <- tail(tempdata, 6)

Plots

tempdata %>% autoplot()
## Plot variable not specified, automatically selected `.vars = AirTemp`

tempdata %>% gg_season(AirTemp)

Auto ARIMA

ARIMA_model <- training %>% 
  model(ARIMA(AirTemp))
report(ARIMA_model)
## Series: AirTemp 
## Model: ARIMA(1,0,1)(1,1,1)[12] w/ drift 
## 
## Coefficients:
##          ar1      ma1     sar1     sma1  constant
##       0.9117  -0.3835  -0.0902  -0.8472    0.0013
## s.e.  0.0182   0.0403   0.0415   0.0233    0.0004
## 
## sigma^2 estimated as 0.01424:  log likelihood=602.85
## AIC=-1193.69   AICc=-1193.59   BIC=-1165.51
ARIMA_fcst <- ARIMA_model %>% forecast(test)
ARIMA_plot <- ARIMA_model %>% forecast(test) %>% autoplot(test) + labs(title = "ARIMA model")
ARIMA_plot

ARIMA_accuracy <- accuracy(ARIMA_fcst, test)

ARIMA_model %>% gg_tsresiduals(lag_max = 12) + labs(title = "ARIMA model")

# ETS model

ETS_model <- training %>% 
  model(ETS(AirTemp))

report(ETS_model)
## Series: AirTemp 
## Model: ETS(A,N,A) 
##   Smoothing parameters:
##     alpha = 0.4505226 
##     gamma = 0.1683865 
## 
##   Initial states:
##      l[0]      s[0]      s[-1]      s[-2]     s[-3]    s[-4]   s[-5]    s[-6]
##  286.3821 -1.307656 -0.7903739 0.02488645 0.8770862 1.533041 1.72093 1.480633
##      s[-7]      s[-8]     s[-9]    s[-10]    s[-11]
##  0.7619302 -0.2368477 -1.084362 -1.491543 -1.487725
## 
##   sigma^2:  0.0143
## 
##      AIC     AICc      BIC 
## 2043.358 2043.954 2114.034
ETS_fcst <- ETS_model %>% forecast(test)
ETS_plot <- ETS_model %>% forecast(test) %>% autoplot(test) + labs(title = "ETS model")
ETS_plot 

ETS_accuracy <- accuracy(ETS_fcst, test)

ETS_model %>% gg_tsresiduals(lag_max = 12) + labs(title="ETS Model")

#Plot

fit <- training %>% 
  model('ETS' = ETS(AirTemp),
        'ARIMA' = ARIMA(AirTemp)
        )

fcst <- fit %>% forecast(test)

fcst %>% 
  autoplot(test, level = NULL) +
  autolayer(test)
## Plot variable not specified, automatically selected `.vars = AirTemp`

Accuracy Metrics

accuracy_metrics = rbind(ETS_accuracy, ARIMA_accuracy)
accuracy_metrics <- accuracy_metrics %>% arrange(RMSE)
accuracy_metrics
## # A tibble: 2 × 10
##   .model         .type      ME   RMSE    MAE     MPE   MAPE  MASE RMSSE   ACF1
##   <chr>          <chr>   <dbl>  <dbl>  <dbl>   <dbl>  <dbl> <dbl> <dbl>  <dbl>
## 1 ETS(AirTemp)   Test  -0.0390 0.0658 0.0588 -0.0135 0.0204   NaN   NaN -0.211
## 2 ARIMA(AirTemp) Test   0.0719 0.0858 0.0719  0.0250 0.0250   NaN   NaN -0.170