Copula Processes with V-Transforms

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 δ 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 δ does not take place. To identify a reasonable value for δ 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 (ARMA type)

VT-D-Vine processes are created by adding a v-transform to an dsvinecopula 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 <- sdvinecopula(basefamily = "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: sdvinecopula
#> name: stationary d-vine
#> kpacf: kpacf_arma
#> base family: joe 
#>  - positive and negative rotations: 0 0 
#>  - maximum lag is 20 
#> parameters: 
#>    ar    ma 
#>  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 <- sdvinecopula(basefamily = "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: sdvinecopula
#> name: stationary d-vine
#> kpacf: kpacf_arma
#> base family: joe 
#>  - positive and negative rotations: 0 0 
#>  - maximum lag is 30 
#> parameters: 
#>         ar         ma 
#> -0.7623306  0.8412958 
#> ____________ 
#> V-transform: 
#> name: V2p
#> parameters: 
#>     delta     kappa 
#> 0.6000000 0.9206342 
#> _____________________
#> Summary of estimates:
#>              ar         ma   vt.kappa
#> par -0.76233064 0.84129584 0.92063424
#> se   0.03516346 0.02501713 0.07420578
#> convergence status: 0, log-likelihood: 49.84777
coef(vcopfit)
#>         ar         ma      delta      kappa 
#> -0.7623306  0.8412958  0.6000000  0.9206342
coef(vcopmod)
#>    ar    ma 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 sdvinecopula object based on Kendall rank correlations.

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