pymgarch
Multivariate GARCH for Python: DCC, ADCC, and CCC correlation dynamics built on top of arch univariate marginals, validated against R's rmgarch/tsmarch.
Why
Python has no maintained general-purpose multivariate GARCH framework. The existing packages cover Gaussian DCC(1,1) at most, while R users have had DCC, ADCC, GO-GARCH and copula-GARCH in rmgarch (now tsmarch) for a decade. pymgarch closes that gap incrementally, starting with the correlation layer:
- stage 1 (univariate volatility) is delegated to
arch, the ecosystem's dominant, battle-tested GARCH package; - stage 2 (correlation dynamics) is what this library implements, with correct two-stage Engle-Sheppard standard errors and replication tests against rmgarch's fitted parameters and likelihoods.
Install
pip install pymgarch # or: pip install pymgarch[numba]
The optional numba extra JIT-compiles the correlation recursions; without
it everything runs in pure NumPy.
Quickstart
import pymgarch as mg
# returns: (T, N) DataFrame, percent scale recommended
res = mg.DCC(dist="t").fit(returns)
print(res.summary())
res.conditional_correlations # (T, N, N)
res.conditional_covariances # (T, N, N)
fc = res.forecast(horizon=10) # analytic
fc = res.forecast(horizon=10, method="simulation", n_paths=2000)
flt = res.filter(new_returns) # fixed params, new data
Marginals default to constant-mean GARCH(1,1). Customize per-column via a spec, or bring your own fitted arch results:
spec = mg.UnivariateSpec(vol="GARCH", p=1, o=1, q=1, dist="t") # GJR-t
res = mg.ADCC().fit(returns, marginals=spec)
from arch import arch_model
fitted = [arch_model(returns[c], rescale=False).fit(disp="off") for c in returns]
res = mg.DCC().fit(returns, marginals=fitted)
Models (v0.1)
| Model | Distribution | Estimation |
|---|---|---|
| CCC (Bollerslev 1990) | Gaussian | closed form given marginals |
| DCC(1,1) (Engle 2002) | Gaussian, Student-t | two-stage QML, correlation targeting |
| ADCC (Cappiello-Engle-Sheppard 2006) | Gaussian, Student-t | two-stage QML, PSD-constrained targeting |
| GO-GARCH (van der Weide 2002) | Gaussian or t factors | fastICA rotation + univariate factor fits |
| Copula-GARCH (Patton 2006) | Gaussian or t copula, static or DCC | two-stage QML, parametric or empirical margins |
| Scalar/diagonal BEKK (Engle-Kroner 1995) | Gaussian | direct QML with variance targeting |
For large cross-sections, DCC and ADCC accept method="composite" (Engle-
Shephard-Sheppard pairwise composite likelihood), replacing the N-dimensional
likelihood with O(N) bivariate recursions for the default contiguous pairs
(O(N^2) with pairs="all").
Standard errors: the correlation-family models (DCC/ADCC/copula) use
Engle-Sheppard (2001) two-stage sandwich estimates -- marginal and
correlation scores stacked so stage-2 uncertainty reflects stage-1
estimation error, with correlation targets held fixed (the same
approximation rmgarch makes); if the stacked system is singular the library
falls back to a stage-2-only sandwich and says so in summary(). Composite
fits report Godambe-sandwich SEs labelled composite-godambe. BEKK is
estimated in a single stage, so its SEs are a plain QML sandwich
(qml-robust) that additionally holds the estimated mean and targeting
covariance fixed; on boundary or degenerate optima it degrades to NaN SEs
with a warning instead of failing the fit.
License
MIT
Release files for pymgarch 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pymgarch-0.4.0.tar.gz | 728.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pymgarch-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 774.0 kB
Release files / pymgarch-0.4.0.tar.gz
| Download URL | pymgarch-0.4.0.tar.gz |
|---|---|
| Size | 728.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d8fcee4f26c44ac57f69b4baa35e7482aa5f538b32b454e27b41fa071adacd77
|
|
BLAKE2b-256 checksum How to use checksums |
f1d3ca94db771b437103623be39a1d666f8b2369b708118352c92000f3eecd05
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / pymgarch-0.4.0-py3-none-any.whl
| Download URL | pymgarch-0.4.0-py3-none-any.whl |
|---|---|
| Size | 45.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
525aab30542bd7319bdf7abe3fbaad6397e23291442c1a8731373ad80a7a98f7
|
|
BLAKE2b-256 checksum How to use checksums |
6dfee592c74e637bc5a35c0be589451914f4a82a02cd0ece06c16f3a59208b4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency log