srlanalytics / bdfm

Bayesian dynamic factor model estimation and predictive statistics including nowcasting and forecasting
MIT License
5 stars 6 forks source link

Related Packages #19

Closed christophsax closed 5 years ago

christophsax commented 5 years ago

We should evaluate related packages

MARSS

greta

This one requires tensorflow and claims to be fast. How fast compared to this package? https://mdscheuerell.github.io/gretaDFA/#background

srlanalytics commented 5 years ago

MARSS / dynfactoR

There are a few other packages that do DFMs that I'm aware of, though every package that estimates the full parameter space that I know of only offers maximum likelihood estimation, such as MARSS or dynfactoR. This could be a good way to benchmark our own models as you say, but we should do better in terms of speed for ML estimation, and Bayesian estimation isn't supported by these packages. To date I've been benchmarking ML and Bayesian estimates (using this package) against each other for simulated data (thus I know the true parameters).

greta

From what I understand greta is a totally different creature altogether. It uses Hamiltonian Monte Carlo simulation find posterior distributions of model parameters for whatever model the user specifies. It looks superb, and we should probably test BDFM against it for a simple model. However, being general purpose it is much more difficult to implement DFMs than with BDFM. Moreover, because BDFM uses conjugate prior distributions we have closed form results for conditional posterior distributions of parameters and factors. greta uses gradient techniques to find posterior distributions --- this is much more flexible but probably slower. Additionally, I'm not sure how greta would handle missing observations. One of the main attractions of BDFM is that it's great for noisy data, data with missing observations, data that isn't square, or data that is just plain messy. Finally, a sophisticated user could even sample the full distribution of predicted values with BDFM. I've not included this in the basic package because the memory requirements are huge, but this is what I do for real world forecasting applications since it makes predictions more robust to problems with posterior distributions (i.e. poor convergence) and model identification.

christophsax commented 5 years ago

added a section the readme