Skip to content

SebKrantz/dfms

Repository files navigation

dfms: Dynamic Factor Models for R

Status at rOpenSci Software Peer Review R-CMD-check dfms status badge CRAN status cran checks downloads per month downloads Codecov test coverage minimal R version dependencies

dfms provides efficient estimation of Dynamic Factor Models via the EM Algorithm. Estimation can be done in 3 different ways following:

  • Doz, C., Giannone, D., & Reichlin, L. (2011). A two-step estimator for large approximate dynamic factor models based on Kalman filtering. Journal of Econometrics, 164(1), 188-205. doi:10.1016/j.jeconom.2011.02.012

  • Doz, C., Giannone, D., & Reichlin, L. (2012). A quasi-maximum likelihood approach for large, approximate dynamic factor models. Review of Economics and Statistics, 94(4), 1014-1024. doi:10.1162/REST_a_00225

  • Banbura, M., & Modugno, M. (2014). Maximum likelihood estimation of factor models on datasets with arbitrary pattern of missing data. Journal of Applied Econometrics, 29(1), 133-160. doi:10.1002/jae.2306

The default is em.method = "auto", which chooses "BM" following Banbura & Modugno (2014) with missing data or mixed frequency, and "DGR" following Doz, Giannone & Reichlin (2012) otherwise. Using em.method = "none" generates Two-Step estimates following Doz, Giannone & Reichlin (2011). This is extremely efficient on bigger datasets. PCA and Two-Step estimates are also reported in EM-based methods. All methods support missing data, but em.method = "DGR" does not model them in EM iterations.

Comparison with Other R Packages

dfms is intended to provide a simple, numerically robust, and computationally efficient baseline implementation of (linear Gaussian) Dynamic Factor Models for R, allowing straightforward application to various contexts such as time series dimensionality reduction and forecasting. The implementation is based on efficient C++ code, making dfms orders of magnitude faster than packages that can be used to fit dynamic factor models such as MARSS, or nowcasting and nowcastDFM geared to mixed-frequency nowcasting applications - supporting blocking of variables into different groups for which factors are to be estimated and evaluation of news content. For large-scale nowcasting models the DynamicFactorMQ class in the statsmodels Python library is probably the most robust implementation - see the example by Chad Fulton. The dfms package is not intended to fit more general forms of the state space model like MARSS.

Installation

# CRAN
install.packages("dfms")

# Development Version
install.packages('dfms', repos = c('https://sebkrantz.r-universe.dev', 'https://cloud.r-project.org'))

Usage Example

library(dfms)

# Fit DFM with 6 factors and 3 lags in the transition equation
mod = DFM(diff(BM14_M), r = 6, p = 3) 

# 'dfm' methods
summary(mod)
plot(mod)
as.data.frame(mod)

# Forecasting 20 periods ahead
fc = predict(mod, h = 20)

# 'dfm_forecast' methods
print(fc)
plot(fc)
as.data.frame(fc)