An R package that provides functionality to fit and simulate from stationary vine copula models for time series.
The package is build on top of rvinecopulib and univariateML.
Install the development version from Github.
# install.packages("remotes")
remotes::install_github("tnagler/svines")
For detailed documentation and examples, see the API documentation.
library(svines)
#> Loading required package: rvinecopulib
data(returns) # data set of stock returns
returns <- returns[1:500, 1:2]
fit <- svine(returns, p = 1) # Markov order 1
#> Warning in f(x, na.rm = na.rm): The iteration limit (iterlim = 100) was reached
#> before the relative tolerance requirement (rel.tol = 0.0001220703125).
#> Warning in f(x, na.rm = na.rm): The iteration limit (iterlim = 100) was reached
#> before the relative tolerance requirement (rel.tol = 0.0001220703125).
summary(fit)
#> $margins
#> # A data.frame: 2 x 5
#> margin name model parameters loglik
#> 1 Allianz Skew Student-t 0.00039, 0.01589, 5.45533, 0.91785 1382
#> 2 AXA Skew Student-t 0.00052, 0.02089, 4.35198, 0.90611 1260
#>
#> $copula
#> # A data.frame: 5 x 10
#> tree edge conditioned conditioning var_types family rotation parameters df
#> 1 1 2, 1 c,c t 0 0.86, 3.48 2
#> 1 2 3, 2 c,c t 0 0.037, 4.893 2
#> 2 1 4, 2 3 c,c joe 90 1.1 1
#> 2 2 3, 1 2 c,c indep 0 0
#> 3 1 4, 1 2, 3 c,c t 0 0.079, 8.994 2
#> tau
#> 0.662
#> 0.023
#> -0.033
#> 0.000
#> 0.051
contour(fit$copula)
svine_sim()
can be used in two different ways:
pairs(returns)
To generate new bootstrapped models from the asymptotic distribution, use
models <- svine_bootstrap_models(2, fit)
summary(models[[1]])
#> $margins
#> # A data.frame: 2 x 5
#> margin name model parameters loglik
#> 1 Allianz Skew Student-t -0.00048, 0.01754, 3.87548, 0.86223 NA
#> 2 AXA Skew Student-t 3.3e-05, 2.2e-02, 3.5e+00, 8.5e-01 NA
#>
#> $copula
#> # A data.frame: 5 x 10
#> tree edge conditioned conditioning var_types family rotation parameters df
#> 1 1 2, 1 c,c t 0 0.89, 3.60 2
#> 1 2 3, 2 c,c t 0 0.037, 4.364 2
#> 2 1 4, 2 3 c,c joe 90 1.1 1
#> 2 2 3, 1 2 c,c indep 0 0
#> 3 1 4, 1 2, 3 c,c t 0 0.04, 15.17 2
#> tau
#> 0.694
#> 0.024
#> -0.070
#> 0.000
#> 0.025
summary(models[[1]])
#> $margins
#> # A data.frame: 2 x 5
#> margin name model parameters loglik
#> 1 Allianz Skew Student-t -0.00048, 0.01754, 3.87548, 0.86223 NA
#> 2 AXA Skew Student-t 3.3e-05, 2.2e-02, 3.5e+00, 8.5e-01 NA
#>
#> $copula
#> # A data.frame: 5 x 10
#> tree edge conditioned conditioning var_types family rotation parameters df
#> 1 1 2, 1 c,c t 0 0.89, 3.60 2
#> 1 2 3, 2 c,c t 0 0.037, 4.364 2
#> 2 1 4, 2 3 c,c joe 90 1.1 1
#> 2 2 3, 1 2 c,c indep 0 0
#> 3 1 4, 1 2, 3 c,c t 0 0.04, 15.17 2
#> tau
#> 0.694
#> 0.024
#> -0.070
#> 0.000
#> 0.025