Python library for bivariate, multivariate, vine, and stochastic copula models
Project description
pyscarcopula
A Python library for copula modelling: bivariate, multivariate, vine, and stochastic copula models for financial time series and risk analytics.
About
pyscarcopula fits bivariate and multivariate dependence models using copulas in Python. Alongside classical constant-parameter copulas, it supports stochastic copula autoregressive (SCAR) models where the copula parameter is driven by a latent Ornstein-Uhlenbeck process.
The package is aimed at financial time series, risk modelling, and experiments with dynamic dependence. It provides bivariate copulas, C-vines, R-vines, conditional sampling, prediction, goodness-of-fit diagnostics, and risk metrics.
Supported estimation methods:
| Method | Key | Description |
|---|---|---|
| Maximum likelihood | mle |
Constant copula parameter |
| SCAR transfer matrix | scar-tm-ou |
Deterministic OU latent-state likelihood |
| SCAR Monte Carlo | scar-p-ou, scar-m-ou |
Monte Carlo alternatives |
| GAS | gas |
Observation-driven score model |
Install
pip install pyscarcopula
For local development:
git clone https://github.com/AANovokhatskiy/pyscarcopula
cd pyscarcopula
pip install -e ".[test]"
pytest
Core dependencies: numpy, numba, scipy, joblib, tqdm.
Features
Copula families
- Archimedean: Gumbel, Frank, Clayton, Joe, including rotations where supported
- Elliptical: Gaussian and Student-t
- Independence copula for null models and vine pruning
- Experimental models in
pyscarcopula.copula.experimental
Vine copulas
- C-vine pair-copula construction with fixed star structure
- R-vine pair-copula construction with Dissmann-style structure selection
- Automatic family and rotation selection per edge using AIC/BIC
- Tree-level and edge-level truncation
- Mixed MLE, SCAR, GAS, and independence edges within one vine
Sampling and prediction
- Unconditional sampling from fitted bivariate and vine models
- Conditional sampling for R-vines, including exact suffix/rebuild paths and runtime-DAG plus MCMC fallback for arbitrary conditioning sets
PredictConfigfor explicit prediction options- Reproducible random generation via
rng - JSON persistence through
model.save()andModelClass.load()
Diagnostics and risk
- Rosenblatt-transform based goodness-of-fit tests
- Mixture Rosenblatt transform for stochastic models
- Smoothed and predictive time-varying copula parameter paths
- VaR and CVaR utilities in
pyscarcopula.contrib
Mathematical background
By Sklar's theorem, a joint distribution can be represented as
F(x_1, \ldots, x_d) = C(F_1(x_1), \ldots, F_d(x_d)),
where C is a copula and F_i are marginal distributions. This separates
marginal modelling from dependence modelling.
For a one-parameter Archimedean copula with generator phi,
C(u_1, \ldots, u_d; \theta)
= \phi^{-1}(\phi(u_1; \theta) + \cdots + \phi(u_d; \theta)).
In SCAR models the copula parameter is time-varying:
\theta_t = \Psi(x_t),
\qquad
dx_t = \kappa(\mu - x_t)dt + \nu dW_t,
where x_t is a latent Ornstein-Uhlenbeck process and Psi maps the latent
state to the valid parameter domain.
The transfer matrix method evaluates the latent-state likelihood by exploiting the Markov structure of the OU process. The path integral is computed as a sequence of matrix-vector products on a discretized grid, avoiding Monte Carlo variance at the cost of numerical grid approximation.
Vine copulas decompose a d-dimensional dependence model into bivariate copulas
arranged in a sequence of trees. R-vines choose the tree structure from data
subject to the proximity condition; C-vines use a fixed star structure.
Examples and docs
Worked notebooks are available in examples/:
01_basic_api.ipynb02_bivariate.ipynb03_vine.ipynb04_risk_metrics.ipynb05_pyvinecopulib_comparison.ipynb
Additional documentation is in docs/. Performance-related details are
kept in docs/guide/performance.md.
License
MIT License. See LICENSE.txt.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyscarcopula-0.12.0.tar.gz.
File metadata
- Download URL: pyscarcopula-0.12.0.tar.gz
- Upload date:
- Size: 192.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f0202a8fc91b14b2d69f4478788a93d7e3c80c6c71df0d14744a54384275895
|
|
| MD5 |
5d732c6cb2a98bbe7fa22c5ceef838e6
|
|
| BLAKE2b-256 |
c4f6a9abb9d5dfbda67d5dd8fa83f03457346d7fa609533797fd2c93f3cc01d9
|
File details
Details for the file pyscarcopula-0.12.0-py3-none-any.whl.
File metadata
- Download URL: pyscarcopula-0.12.0-py3-none-any.whl
- Upload date:
- Size: 176.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a19f137c42019aba562259727772e546e9718a7cb5facac1f7e7a8ea528d2b39
|
|
| MD5 |
76f5532cd1a44d130af3c932d243506d
|
|
| BLAKE2b-256 |
09a0c8c0e118557b65bbf25a283629efab6bcc7527ef1561836a998c5ef4d3b9
|