Skip to content

mfe vs. arch vs. statsmodels

Decision guide

Task Use
GARCH / EGARCH / TARCH / APARCH estimation arch
FIGARCH, HARCH, MIDAS-GARCH arch
Unit root tests (ADF, PP, KPSS, DFGLS) arch.unitroot
Cointegration (Johansen, Engle-Granger) statsmodels
ARMA/ARMAX estimation statsmodels
VAR with robust VCV options mfe
Granger causality with heteroskedastic VCV mfe
Impulse response functions under heteroskedasticity mfe
Realized variance / BPV / MedRV mfe
Realized kernel (noise-robust) mfe
TSRV / MSRV (two-scale noise correction) mfe
Hayashi-Yoshida non-synchronous covariance mfe
Multivariate realized kernel (PSD guaranteed) mfe
DCC-GARCH mfe
BEKK-GARCH mfe
CCC-GARCH mfe
GO-GARCH / O-GARCH mfe
RCC (Rotated Conditional Correlation) mfe
HAR-RV model mfe
HEAVY model (realized variance in mean equation) mfe
Beveridge-Nelson decomposition mfe
SPA test / StepM FWER mfe
Wild bootstrap for realized volatility mfe
Fama-MacBeth regression mfe
OLS with White / Newey-West SEs mfe (thin wrapper) or statsmodels
PCA with financial conventions mfe
Hansen Skew-t / GED distributions (standalone) mfe

Key API differences

arch (univariate, correct home for GARCH)

from arch import arch_model
am = arch_model(returns, vol="Garch", p=1, q=1)
res = am.fit()

mfe (multivariate, realized, everything arch doesn't cover)

from mfe.multivariate import DCC
from mfe.realized import realized_kernel

dcc = DCC().fit(returns)          # (T, K) → (T, K, K) sigma_t
rk = realized_kernel(r)           # noise-robust RV

statsmodels (ARIMA, VAR basic, cointegration)

from statsmodels.tsa.api import VAR
mod = VAR(data)
res = mod.fit(maxlags=2)
# → no robust VCV, no GC test with het-robust options
from mfe.timeseries import vectorar, grangercause
res = vectorar(data, lags=2, het=True)          # White-robust VCV
gc  = grangercause(data, lags=2, method="wald") # Wald test with robust VCV

What mfe does NOT replace

  • arch for any univariate GARCH estimation — we use arch internally for the first step of DCC/RCC/CCC.
  • statsmodels for ARIMA, SARIMA, SARIMAX estimation.
  • scipy.signal for filtering.
  • sklearn.decomposition.PCA for general-purpose PCA (our PCA is tailored to financial returns with covariance convention and factor interpretation tools).