← Back to all sparks
F

FoReco

INFRA · APIS
Velocity0.0

Forecast Reconciliation

Forecast reconciliation with a real object model, five years after it started returning bare matrices.

forecastinghierarchical-reconciliationtime-seriess3-classesprobabilistic-forecastingr-package
Current state
FoReco reconciles hierarchical forecasts across cross-sectional, temporal, and cross-temporal frameworks, and now covers both point and probabilistic reconciliation. The 1.3.0 release gave every reconciliation function a shared foreco S3 class carrying framework, function, forecast type, and reconciliation metadata, which replaced the loose attribute-and-helper pattern the package had used since 1.0.0. The follow-up 1.3.1 turned the same attention on the API's edges: strict argument validation with errors that name the expected and supplied values, and a help index pruned down to user-facing functions only.
Where it's heading
The package is completing a reversal it started in 1.0.0. That release simplified outputs to plain matrices and pushed metadata into attributes reachable via recoinfo(); 1.3.0 removed recoinfo() outright and put the structure back as a class with components(), summary(), and plot() methods. The direction is toward being infrastructure rather than a function library — the class is exported through new_foreco_class() and a sibling package has already adopted it. Method coverage has meanwhile broadened from optimal combination into non-negative algorithms, bounded reconciliation, and Gaussian and sample-based probabilistic variants.
Prediction
The soft-deprecated res2matrix() is flagged for removal, so a subsequent release should finish that cleanup; with the class now exported, expect more methods to hang off foreco objects rather than more top-level functions.

Recent moves

  1. 1mo ago

    Strict argument validation and a pruned help index

    The polish pass on 1.3.0's restructuring. Argument errors now state what was expected and what arrived instead of generic diagnostics, and the help index stops advertising internal helpers and S3 methods, so the package's public surface finally matches its documented one.

    View source ↗
  2. 1mo ago

    Every reconciliation function now returns a shared foreco object

    ⚡ SPARK

    The structural release of the current arc, and a deliberate reversal of the bare-matrix simplification 1.0.0 made. Results become classed objects carrying their own provenance, recoinfo() and FoReco2matrix() are retired in favour of summary() and components(), and the constructor is exported so other packages can produce the same objects.

    View source ↗
  3. 3mo ago

    Bootstrap functions gain xreg; simulate() argument bug fixed

    A small release adding external regressor support to the three bootstrap functions and repairing dots handling in simulate(). Minor next to the surrounding releases, but it extends the probabilistic path that 1.2.0 had just widened.

    View source ↗
  4. 5mo ago

    Gaussian and sample-based probabilistic reconciliation added

    Probabilistic reconciliation gains Gaussian and sample-based methods across all three frameworks, built on the distributional package, alongside four non-negative algorithms and new layout converters. It broadens an axis the package had already opened with block bootstrap back in 0.2.6 rather than starting a new one, but it is the release that made the probabilistic path genuinely comparable to the point one.

    View source ↗
  5. 1y ago

    Bounded reconciliation and an oracle shrunk covariance estimator

    The bounds parameter is redesigned with a set_bounds() helper so constraints can be specified per series, and an experimental oracle shrinkage covariance estimator joins the covariance options. Both are the kind of knob that matters once users are running reconciliation on real hierarchies rather than textbook ones.

    View source ↗
  6. 1y ago

    Breaking rename: cs, te and ct prefixes across all functions

    A hard break with no backward compatibility, unifying function names under framework prefixes and stripping outputs down to plain matrices with metadata pushed into attributes. The naming convention stuck, but the output decision did not — 1.3.0 undoes exactly that simplification.

    View source ↗