Introduction

The Copulas.jl package provides a large collection of models for dependence structures between random variables, so-called copulas, with a good selection of features:

  • random number generation
  • evaluation of (log)density and distribution functions
  • copula-based multivariate distributions through Sklar's theorem
  • fitting procedures, including marginal models or not

Since copulas are distribution functions, we fully comply with the Distributions.jl API. This compliance allows direct interoperability with other packages based on this API such as, e.g., Turing.jl.

Usually, people that use and work with copulas turn to the R package copula. While still well-maintained and regularly updated, the R package copula is a complicated code base for readability, extensibility, reliability, and maintenance. This is an attempt to provide a very light, fast, reliable and maintainable copula implementation in native Julia. Among others, one of the notable benefits of such a native implementation is the floating point type agnosticism, i.e., compatibility with BigFloat, DoubleFloats, MultiFloats and other kind of numbers.

The package revolves around two main types:

  • Copula, the abstract mother type of all copulas
  • SklarDist, the type for multivariate compound distribution through Sklar's theorem.

Installation

The package is available on Julia's general registry, and can be installed as follows:

] add Copulas

Contributing

Contributions are welcomed ! If you want to contribute to the package, ask a question, found a bug or simply want to chat, do not hesitate to open an issue on this repo. General guidelines on collaborative practices (colprac) are available at https://github.com/SciML/ColPrac.

Cite this work

Please use the following BibTeX if you want to cite this work:

@article{Laverny2024, 
    doi = {10.21105/joss.06189}, 
    url = {https://doi.org/10.21105/joss.06189}, 
    year = {2024}, 
    publisher = {The Open Journal}, 
    volume = {9}, 
    number = {94}, 
    pages = {6189}, 
    author = {Oskar Laverny and Santiago Jimenez}, 
    title = {Copulas.jl: A fully Distributions.jl-compliant copula package}, journal = {Journal of Open Source Software}
}