Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Paper] add comparison tables and benchmark #127

Merged
merged 8 commits into from
Feb 10, 2024
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions joss/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,27 @@ The Julia package `Copulas.jl` brings most standard copula-related features into
The R package `copula` [@r_copula_citation1; @r_copula_citation2; @r_copula_citation3; @r_copula_citation4] is the gold standard when it comes to sampling, estimating, or simply working around dependence structures. However, in other languages, the available tools are not as developed and/or not as recognized. We bridge the gap in the Julian ecosystem with this Julia-native implementation. Due to the very flexible type system in Julia, our code expressiveness and tidiness will increase its usability and maintainability in the long-run. Type-stability allows sampling in arbitrary precision without requiring more code, and Julia's multiple dispatch yields most of the below-described applications.

There are competing packages in Julia, such as [`BivariateCopulas.jl`](https://github.com/AnderGray/BivariateCopulas.jl) [@BivariateCopulas] which only deals with a few models in bivariate settings but has very nice graphs, or [`DatagenCopulaBased.jl`](https://github.com/iitis/DatagenCopulaBased.jl) [@DatagenCopulaBased_1; @DatagenCopulaBased_2; @DatagenCopulaBased_3; @DatagenCopulaBased_4], which only provides sampling and does not have exactly the same models as `Copulas.jl`. While not fully covering out both of these package's functionality (mostly because the three projects chose different copulas to implement), `Copulas.jl` is clearly the most fully featured, and brings, as a key feature, the compliance with the broader ecosystem.
# Comparison of other packages with copulas.jl
According to the package documentation, it is possible to summarize some of the most important functionalities of each package and those most needed by the community.
## Functionality
The following table shows some characteristics that differentiate each package.
| Characteristic | Copulas.jl | DatagenCopulaBased.jl | BivariateCopulas.jl |
|-----------------------------------------------|--------------------|--------------------|--------------------|
| Every Archimedean Copula sampling | Yes | No | No |
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could add here a line "Classic Bivariate copulas sampling" with Yes/Yes/Yes.

Also a line "Obscure bivariate copulas sampling" with "Yes/No/No ?" ^^

Maybe the first column could be refactored to :
Sampling
- Classic Bivariate Copulas Yes Yes Yes
- Obscure Bivariate Copulas Yes No No
- Archimedean copulas All / Classic Only / Classic Only
- Multivariate Copulas Yes Yes No (You exchanged the two i think)
- Archimedean Chains (this is the real name of "nested" : No No Yes
Fitting No No Yes
Plotting No No Yes
Dependence metrics Partial / ? / ? (check)

| Multivariate Copula sampling | Yes | No | Yes |
| Nested Copula Sampling | No | No | Yes |
| Fitting Copula | Yes | only bivariate case | No |
## Efficiency
To perform an efficiency test we use the "BenchmarkTools" package with the objective of comparing the execution time and the amount of memory necessary to generate copula samples with each package. We generate 10^6 samples for Clayton copula of dimensions 2, 5, 10 with parameter 0.8
| Package | Dimension | Execution Time (seconds) | Memory Usage (bytes) |
|-----------------------------------|-----------|--------------------------------------|-------------------------|
| Copulas.Clayton | 2 | 1.1495578e9 | 408973296 |
| Copulas.Clayton | 5 | 1.3448951e9 | 386723344 |
| Copulas.Clayton | 10 | 1.8044065e9 | 464100752 |
| BivariateCopulas.Clayton | 2 | 1.331608e8 | 56000864 |
| DatagenCopulaBased.Clayton | 2 | 1.9868345e9 | 1178800464 |
| DatagenCopulaBased.Clayton | 5 | 2.4276321e9 | 1314855488 |
| DatagenCopulaBased.Clayton | 10 | 2.8009263e9 | 1627164656 |

# Examples

Expand Down
Loading