The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Copula Processes with V-Transforms

Alexander J. McNeil and Martin Bladt

2024-02-16

All types of copula process can be combined with a v-transform to model volatile time series.

1. VT-ARMA Copula Processes

VT-ARMA processes are created by adding a v-transform to an armacopula process using the command vtscopula. The generic commands sim, fit and plot also work for these processes.

VT-ARMA(1,1) Example

This example uses a ARMA(1,1) copula and an off-centre linear v-transform. We set up the model and generate some data.

vtarma11 <- vtscopula(armacopula(list(ar = 0.95, ma = -0.85)),
  Vtransform = Vlinear(delta = 0.6))
vtarma11
#> object class: vtscopula
#> ____________ 
#> Base copula: 
#> object class: armacopula
#> name: ARMA(1,1)
#> parameters: 
#>   ar1   ma1 
#>  0.95 -0.85 
#> ____________ 
#> V-transform: 
#> name: Vlinear
#> parameters: 
#> delta 
#>   0.6
set.seed(19)
data <- sim(vtarma11, 2000)
ts.plot(data)

We now fit the model with a fixed value for the fulcrum parameter \(\delta\) and plot the results. (More on fulcrum choice next.)

vtarma11spec <- vtscopula(armacopula(list(ar = 0, ma = 0)), Vtransform = Vlinear(delta = 0.6))
vtarma11fit <- fit(vtarma11spec, data)
vtarma11fit
#> object class: vtscopula
#> ____________ 
#> Base copula: 
#> object class: armacopula
#> name: ARMA(1,1)
#> parameters: 
#>        ar1        ma1 
#>  0.9539846 -0.8525973 
#> ____________ 
#> V-transform: 
#> name: Vlinear
#> parameters: 
#> delta 
#>   0.6 
#> _____________________
#> Summary of estimates:
#>     ar.ar1     ma.ma1 
#>  0.9539846 -0.8525973 
#> convergence status: 0, log-likelihood: 104.0813

plot(vtarma11fit)
plot(vtarma11fit, plottype = "vtransform")
plot(vtarma11fit, plottype = "kendall" )

Optimization over the fulcrum parameter \(\delta\) does not take place. To identify a reasonable value for \(\delta\) we can carry a profile likelihood analysis using different fixed values for the fulcrum parameter.

profilefulcrum(data, tscopula = vtarma11spec, locations = seq(from = 0, to = 1, length = 11))
abline(v = 0.6)

2. VT-D-Vine Copula Processes (type 2)

VT-D-Vine processes are created by adding a v-transform to an dvinecopula2 object using the command vtscopula. The generic commands sim, fit and plot also work for these processes.

Construction

We add a 2-parameter V-transform.

copmod <- dvinecopula2(family = "joe",
                       kpacf = "kpacf_arma",
                       pars = list(ar = 0.9, ma = -0.85),
                       maxlag = 20)
vcopmod <- vtscopula(copmod,
  Vtransform = V2p(delta = 0.6, kappa = 0.8)
)
vcopmod
#> object class: vtscopula
#> ____________ 
#> Base copula: 
#> object class: dvinecopula2
#> name: type2-d-vine
#> copula family: joe
#> KPACF: kpacf_arma with max lag 20
#> parameters: 
#> [1]  0.90 -0.85
#> ____________ 
#> V-transform: 
#> name: V2p
#> parameters: 
#> delta kappa 
#>   0.6   0.8

Simulation

set.seed(13)
data2 <- sim(vcopmod, n = 2000)
hist(data2)
ts.plot(data2)

Estimation

copspec_Joe <- dvinecopula2(family = "joe",
                            pars = list(ar = 0, ma = 0),
                            maxlag = 30)
vcopspec <- vtscopula(copspec_Joe, V2p(delta = 0.6))
vcopfit <- fit(vcopspec, data2, 
               tsoptions = list(hessian = TRUE),
               control = list(maxit = 1000))
vcopfit
#> object class: vtscopula
#> ____________ 
#> Base copula: 
#> object class: dvinecopula2
#> name: type2-d-vine
#> copula family: joe
#> KPACF: kpacf_arma with max lag 30
#> parameters: 
#> [1]  0.8973846 -0.8434568
#> ____________ 
#> V-transform: 
#> name: V2p
#> parameters: 
#>     delta     kappa 
#> 0.6000000 0.7743815 
#> _____________________
#> Summary of estimates:
#>             ar         ma   vt.kappa
#> par 0.89738462 -0.8434568 0.77438147
#> se  0.01948553  0.0253182 0.06339235
#> convergence status: 0, log-likelihood: 48.57659
coef(vcopfit)
#>                            delta      kappa 
#>  0.8973846 -0.8434568  0.6000000  0.7743815
coef(vcopmod)
#>             delta kappa 
#>  0.90 -0.85  0.60  0.80

Plotting

We can plot the estimated v-transform and well as the goodness-of-fit plots for the dvinecopula2 object based on Kendall rank correlations.

plot(vcopfit, plottype = "vtransform")
plot(vcopfit, plottype = "kendall")
plot(vcopfit, plottype = "residual")

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.