MessyTimeSeries.jl and MessyTimeSeriesOptim.jl

Hi there,

I have some major news for those who are interested in time series analysis: I have renamed TSAnalysis.jl to MessyTimeSeries.jl (link) and released a new package called MessyTimeSeriesOptim.jl (link)

The renaming - initially suggested here - indicates that these packages are compatible with series that show irregularities such as missing observations in the measurements and provide ways for modelling data with periodic patterns (e.g., cycles and seasonality) and non-stationary trends.

MessyTimeSeries.jl includes a series of basic functions for state-space modelling (e.g., Kalman filter and smoother). Compared to the equivalent versions in the - now deprecated - TSAnalysis.jl, these implementations are much faster since they are based on the low-level matrix functions in LinearAlgebra.jl and further optimised for performance.

MessyTimeSeriesOptim.jl includes optimisation and validation methods for multivariate time series models. Right now, I have implemented VARs, VMAs and DFMs.

Model Description
VAR The current implementation enforces causality at every round of the estimation algorithm. Therefore, it is not compatibile with data exhibiting non-stationary trends.
VMA The current implementation enforces invertibility at every round of the estimation algorithm. Therefore, it is not compatibile with data exhibiting non-stationary trends.
DFM The current implementation of DFMs is a multivariate trend-cycle decompositions. As such, it expects data with non-stationary trends. The trends can be common across multiple series or idiosyncratic, with or without a drift (fixed or non-stationary). It supports block structures for the factor and similar custom configurations. The factors are modelled as independent and causal ARs.

I am planning to add the following implementations:

  1. VAR and VMA trend-cycle decompositions;
  2. the traditional DFM for stationary data.

Right now, all models are estimated with an ECM algorithm and implemented to support elastic-net shrinkage for the coefficients. Furthermore, the package provides a wide set of tools to regulate the penalty and select the optimal number of lags (for all models).

Given the structure of the ECM algorithm, this package allows to create custom “recipes” for ad-hoc models. Therefore, you could use the ECM algorithm in MessyTimeSeriesOptim.jl to estimate other linear / linearisable models of interest for specific empirical problems. The tools provided for validating the models are also as easily extendable to custom “recipes”.

While the documentation is not ready yet, the docstrings should be helpful to understand how I have implemented the ECM described in:

  1. [2111.14000] Factor-augmented tree ensembles
  2. [2002.04697] Selecting time-series hyperparameters with the artificial jackknife

I have added a short documentation for both packages. I will add a few examples in February.