Getting Started
Installation
The TwinCopulas package is available through the Julia package system by running Pkg.add("TwinCopulas")
. Throughout, we assume that you have installed the package.
Starting With a Bivariate Gaussian Copula
We start by drawing 1000 observations from a Gaussian Copula random variable.
The first step is to set up the environment:
julia> using Random, Distributions, TwinCopulas
julia> Random.seed!(123) # Setting the seed
Then, we create a bivariate Gaussian Copula distribution G
and obtain samples using rand
:
julia> G = GaussianCopula(0.5)
GaussianCopula{Float64}(θ=0.5)
The object G
represents a probability distribution, in our case the bivariate Gaussian Copula. One can query its properties such as the Kendall's tau ($\tau$, we need de letter \tau) :
julia> TwinCopulas.τ(G)
0.33333333333333337
We can also draw samples from G
with rand
.
julia> x = rand(G,1000)
2×1000 Matrix{Float64}:
0.842684 0.151638 0.488056 0.0362257 0.474858 … 0.525896 0.640167 0.965114 0.0298152 0.632266
0.195875 0.189835 0.777506 0.0273238 0.425615 0.41442 0.467543 0.533448 0.750643 0.359143
You can easily obtain the pdf
, cdf
, and many other functions for a distribution. For instance, the $\rho_s$ (Spearman's Rho), $\lambda_u, \lambda_l$ (Upper and lower tail dependence), $\beta$ (Blomqvist $\beta$) and $\gamma$ (Ginni's coefficient):
julia> cdf(G, [0.5,0.6])
0.3804363762931904
julia> pdf(G, [0.5,0.6])
1.1424140110638463
Note:
Functions such as β
(Blomqvist's $\beta$), τ
(Kendall's tau), ρ_s
(Spearman's Rho), and tail dependence measures (λ_u, λ_l
) must be prefixed with TwinCopulas because they are not directly exported by the module. For example, use TwinCopulas.β(copula) to access Blomqvist's $\beta$.
Using Other Copulas
The package contains a large number of additional Copulas of two main types:
bicopula == ArrayLikeVariate{1}
SklarDist == ArrayLikeVariate{1}
Each type splits further into bivariate Continuous
.
For instance, you can define the following Copulas (among many others):
julia> T = tCopula(ν, ρ) # bicopula (Elliptical)
julia> A = ClaytonCopula(θ) # bicopula (Archimedean)
julia> E = GalambosCopula(θ) # bicopula (Extreme Value)
julia> R = ArchimaxCopula(A, E) # bicopula (Archimax)
In addition, you can create Copulas from univariate distributions (univariate margins):
julia> SklarDist(GaussianCopula(θ), [Normal(mu, sigma), Beta(α, β)])
To find out which parameters are appropriate for a given Copula C
, you can use fieldnames(D)
:
julia> fieldnames(tCopula)
(:θ, :ν)
julia> fieldnames(ArchimaxCopula)
(:Archimedean, :Extreme)
julia> fieldnames(SklarDist)
(:copula, :margins)
This tells you that a t Copula is initialized with dregree of freddom ν
and θ
, ArchimaxCopula with an Archimedean Copula
and Extreme value Copula
, SklarDist need a bivariate copula
(bicopula) and univariate distributions margins
.