Topdown model was the model that has the lowest mean RMSE and mean MAE indicating that topdown had the lowset errors while forecasting and accuracy of Topdown was beating all the other models. My hypothesis why Top down model is a winning model is that the total tourism series was smoother and less affected by regional noise.
The OLS reconciliation method produced the lowest mean RMSE and MAE, showing that it generated the most accurate forecasts among the three approaches. OLS performed better than MinT is that OLS uses a simpler error structure. It assumes similar forecast-error variance across the series and does not attempt to estimate complex covariance relationships.
Conclustion
Overall, all methods produced coherent forecasts that respected the hierarchical structure. However, the Top-Down approach achieved the best forecasting accuracy. While OLS and MinT effectively reconciled forecasts across all levels, incorporating information from more variable state and regional series slightly reduced their overall accuracy. These results suggest that, for this dataset, forecasting the stable aggregate series first provided the best balance between accuracy and coherence.
Part2.
aus_retail
# A tsibble: 64,532 x 5 [1M]
# Key: State, Industry [152]
State Industry `Series ID` Month Turnover
<chr> <chr> <chr> <mth> <dbl>
1 Australian Capital Territory Cafes, restaurant… A3349849A 1982 Apr 4.4
2 Australian Capital Territory Cafes, restaurant… A3349849A 1982 May 3.4
3 Australian Capital Territory Cafes, restaurant… A3349849A 1982 Jun 3.6
4 Australian Capital Territory Cafes, restaurant… A3349849A 1982 Jul 4
5 Australian Capital Territory Cafes, restaurant… A3349849A 1982 Aug 3.6
6 Australian Capital Territory Cafes, restaurant… A3349849A 1982 Sep 4.2
7 Australian Capital Territory Cafes, restaurant… A3349849A 1982 Oct 4.8
8 Australian Capital Territory Cafes, restaurant… A3349849A 1982 Nov 5.4
9 Australian Capital Territory Cafes, restaurant… A3349849A 1982 Dec 6.9
10 Australian Capital Territory Cafes, restaurant… A3349849A 1983 Jan 3.8
# ℹ 64,522 more rows
#Create the grouped structureretail_grouped <- aus_retail |>aggregate_key( State * Industry,Turnover =sum(Turnover) )#Select rerpesentative states and industriesselected_states <-c("New South Wales","Victoria","Queensland")selected_industries <-c("Food retailing","Household goods retailing","Clothing, footwear and personal accessory retailing")retail_selected <- aus_retail |>filter( State %in% selected_states, Industry %in% selected_industries )
The three states are the representative large retail markets.
Warning: The future dataset is incomplete, incomplete out-of-sample data will be treated as missing.
12 observations are missing between 2019 Jan and 2019 Dec
The OLS reconciliation method produced a lower mean RMSE and MAE than the ETS model .This delivers that reconciliation improved forecast accuracy ensuring coherence across the total,state, industry and state-industry levels. On the other hand, Mint could not be estimated because some grouped series produced missing residual values.
Part3. Volatility Modeling(S&P 500)
library(quantmod)
Warning: package 'quantmod' was built under R version 4.5.2
Loading required package: xts
Loading required package: zoo
Attaching package: 'zoo'
The following object is masked from 'package:tsibble':
index
The following objects are masked from 'package:base':
as.Date, as.Date.numeric
######################### Warning from 'xts' package ##########################
# #
# The dplyr lag() function breaks how base R's lag() function is supposed to #
# work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #
# source() into this session won't work correctly. #
# #
# Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
# conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #
# dplyr from breaking base R's lag() function. #
# #
# Code in packages is not affected. It's protected by R's namespace mechanism #
# Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
# #
###############################################################################
Attaching package: 'xts'
The following objects are masked from 'package:dplyr':
first, last
Loading required package: TTR
Registered S3 method overwritten by 'quantmod':
method from
as.zoo.data.frame zoo
library(rugarch)
Warning: package 'rugarch' was built under R version 4.5.2
Loading required package: parallel
Attaching package: 'rugarch'
The following object is masked from 'package:fabletools':
report
library(FinTS)
Attaching package: 'FinTS'
The following object is masked from 'package:fable':
ARIMA
As seen in the plot of S&P 500, there is some volatility that follows up with outbreaks in the financial market, while calm periods tend to remain calm.
The Arch test produced a p-value bleow 0.05. This means that there is conditional heteroskedasticity, so the assumption of constant variance was rejected, supporting the use of a GARCH model.
The unconditional variance remained constatnt at 1.279 throughout the sample period. In contrast, GARCH conditional variance has high response to the market conditions. In my case, it was able to be seen that there was volatility in the market that shakes the return of the sp&500. While during the COVID-19 market crash in 2020, the variance jumped dramatically nearly 60 before gradually returning to lower levels. This indicates that financial market volatility is time varying and shows volatility clustering.