Iterative procedure which produces cross-temporally reconciled
forecasts by alternating forecast reconciliation along one single dimension
(either cross-sectional or temporal) at each iteration step. Each iteration
consists in the first two steps of the heuristic procedure by Kourentzes and Athanasopoulos (2019),
so the forecasts are reconciled by alternating cross-sectional (contemporaneous) reconciliation,
and reconciliation through temporal hierarchies in a cyclic fashion.
The choice of the dimension along which the first reconciliation step in each
iteration is performed is up to the user (param start_rec
), and there is
no particular reason why one should perform the temporal reconciliation first, and
the cross-sectional reconciliation then.
The iterative procedure allows the user to get non-negative reconciled forecasts.
iterec(basef, thf_comb, hts_comb, res, itmax = 100, tol = 1e-5,
start_rec = "thf", norm = "inf", note = TRUE, plot = "mti", ...)
(\(n \times h(k^\ast+m)\)) matrix of base forecasts to be reconciled, \(\widehat{\mathbf{Y}}\); \(n\) is the total number of variables, \(m\) is the highest time frequency, \(k^\ast\) is the sum of (a subset of) (\(p-1\)) factors of \(m\), excluding \(m\), and \(h\) is the forecast horizon for the lowest frequency time series. Each row identifies a time series, and the forecasts are ordered as [lowest_freq' ... highest_freq']'.
Type of covariance matrix (respectively
(\(n \times n\)) and (\((k^\ast + m) \times (k^\ast + m)\))) to
be used in the cross-sectional and temporal reconciliation, see more in
comb
param of htsrec()
and
thfrec()
.
(\(n \times N(k^\ast + m)\)) matrix containing the residuals
at all the temporal frequencies ordered [lowest_freq' ... highest_freq']'
(columns) for each variable (row), needed to estimate the covariance matrix
when hts_comb =
{"wls",
"shr",
"sam"}
and/or
hts_comb =
{"wlsv",
"wlsh",
"acov",
"strar1",
"sar1",
"har1",
"shr",
"sam"}
.
The row must be in the same order as basef
.
Max number of iteration (100
, default)
(old version maxit
).
Convergence tolerance (1e-5
, default).
Dimension along with the first reconciliation step in each
iteration is performed: it start from temporal reconciliation with
"thf
" (default), from cross-sectional with "hts
" and
it does both reconciliation with "auto
".
Norm used to calculate the temporal and the cross-sectional
incoherence. There are two alternatives: "inf
" (\(\max{|x_1|,
|x_2|,\dots}\), default) or "one
" (\(\sum |x_i|\)).
If note = TRUE
(default) the function writes some
notes to the console, otherwise no note is produced (also no plot).
Some useful plots: "mti"
(default) marginal trend
inconsistencies, "pat"
step by step inconsistency pattern for each
iteration, "distf"
distance forecasts iteration i and i-1,
"all"
all the plots.
any other options useful for htsrec()
and
thfrec()
, e.g. m
, C
(or Ut
and
nb
), nn
(for non negativity reconciliation only at first step),
mse
, corpcor
, type
, sol
, settings
,
W
, Omega
,...
iterec
returns a list with:
recf
(\(n \times h(k^\ast + m)\)) reconciled forecasts matrix, \(\widetilde{\mathbf{Y}}\).
d_cs
Cross-sectional incoherence at each iteration.
d_te
Temporal incoherence at each iteration.
start_rec
Starting coherence dimension (thf or hts).
tol
Tolerance.
flag
Control code (see details).
time
Elapsed time.
dist
If start_rec = "auto"
, matrix of distances of the forecasts reconciled
from the base.
This reconciliation procedure can be seen as an extension of the well known iterative proportional fitting procedure (Deming and Stephan, 1940, Johnston and Pattie, 1993), also known as RAS method (Miller and Blair, 2009), to adjust the internal cell values of a two-dimensional matrix until they sum to some predetermined row and column totals. In that case the adjustment follows a proportional adjustment scheme, whereas in the cross-temporal reconciliation framework each adjustment step is made according to the penalty function associated to the single-dimension reconciliation procedure adopted.
Control status of iterative reconciliation:
-2
Temporal/Cross-sectional reconciliation does not work.
-1
Convergence not achieved (maximum iteration limit reached).
0
Convergence achieved.
+1
Convergence achieved: incoherence has increased in the next iteration (at least one time).
+2
Convergence achieved: incoherence has increased in the next two or more iteration (at least one time).
+3
The forecasts are already reconciled.
Deming, E., Stephan, F.F. (1940), On a least squares adjustment of a sampled frequency table when the expected marginal totals are known, The Annals of Mathematical Statistics, 11, 4, 427–444.
Di Fonzo, T., and Girolimetto, D. (2023), Cross-temporal forecast reconciliation: Optimal combination method and heuristic alternatives, International Journal of Forecasting, 39(1), 39-57.
Johnston, R.J., Pattie, C.J. (1993), Entropy-Maximizing and the Iterative Proportional Fitting Procedure, The Professional Geographer, 45, 3, 317–322.
Kourentzes, N., Athanasopoulos, G. (2019), Cross-temporal coherent forecasts for Australian tourism, Annals of Tourism Research, 75, 393-409.
Miller, R.E., Blair, P.D. (2009), Input-output analysis: foundations and extensions, 2nd edition, New York, Cambridge University Press.
Schäfer, J.L., Opgen-Rhein, R., Zuber, V., Ahdesmaki, M., Duarte Silva, A.P., Strimmer, K. (2017), Package `corpcor', R package version 1.6.9 (April 1, 2017), https://CRAN.R-project.org/package= corpcor.
Schäfer, J.L., Strimmer, K. (2005), A Shrinkage Approach to Large-Scale Covariance Matrix Estimation and Implications for Functional Genomics, Statistical Applications in Genetics and Molecular Biology, 4, 1.
Stellato, B., Banjac, G., Goulart, P., Bemporad, A., Boyd, S. (2020). OSQP: An Operator Splitting Solver for Quadratic Programs, Mathematical Programming Computation, 12, 4, 637-672.
Stellato, B., Banjac, G., Goulart, P., Boyd, S., Anderson, E. (2019), OSQP: Quadratic Programming Solver using the `OSQP' Library, R package version 0.6.0.3 (October 10, 2019), https://CRAN.R-project.org/package=osqp.
# \donttest{
data(FoReco_data)
obj <- iterec(FoReco_data$base, note = FALSE,
m = 12, C = FoReco_data$C, thf_comb = "acov",
hts_comb = "shr", res = FoReco_data$res, start_rec = "thf")
# }