Author: Alexander J. McNeil and Martin Bladt
Date: 2024-02-16

# Models with Margins

#### Alexander J. McNeil and Martin Bladt

#### 2024-02-16

## 1. Gaussian ARMA Process

### Construction

We generate a Gaussian ARMA model.

    set.seed(13)
    data1 <- 0.5 + 2*arima.sim(list(ar =0.95, ma =-0.85), 1000)
    ts.plot(data1)

### Estimation

A model spec can be fitted to data with the generic command `fit`.

    copspec <- armacopula(pars = list(ar =0.01, ma =0.01))
    margspec <- margin("norm")
    fullspec <- tscm(copspec, margspec)
    modfit <- fit(fullspec, data1, method = "full")
    modfit
    #> object class: tscmfit
    #> _______
    #> MARGIN:
    #> name: gauss
    #> parameters:
    #>        mu     sigma
    #> 0.5845416 2.1558708
    #> _______
    #> COPULA:
    #> object class: armacopula
    #> name: ARMA(1,1)
    #> parameters:
    #>        ar1        ma1
    #>  0.9380637 -0.8255022
    #> _________________________
    #> summary of all estimates:
    #>       ar.ar1       ma.ma1    margin.mu margin.sigma
    #>    0.9380637   -0.8255022    0.5845416    2.1558708
    #> convergence status: 0 , log-likelihood: -2135.118

### Plotting

As well as the copula plots we can also plot the marginal fit.

    plot(modfit, plottype = "residual")
    plot(modfit, plottype = "kendall")
    plot(modfit, plottype = "margin")

## 2. VT-D-Vine Process (type 2) with Skewed Laplace Margin

### Construction

    copmod <- dvinecopula2(family = "joe",
                           kpacf = "kpacf_arma",
                           pars = list(ar = 0.9, ma = -0.8),
                           maxlag = 20)
    vcopmod <- vtscopula(copmod,
                         Vtransform = V2p(delta = 0.5, kappa = 2))
    margmod <- margin("slaplace",
                      pars = c(mu = 1, scale = 2, gamma = 0.7))
    tscmmod <- tscm(vcopmod, margmod)
    tscmmod
    #> object class: tscm
    #> _______
    #> MARGIN:
    #> name: slaplace
    #> parameters:
    #>    mu scale gamma
    #>   1.0   2.0   0.7
    #> _______
    #> COPULA:
    #> 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.9 -0.8
    #> ____________
    #> V-transform:
    #> name: V2p
    #> parameters:
    #> delta kappa
    #>   0.5   2.0

### Simulation

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

### Estimation

First fit a marginal model only.

    margfit <- fit(margmod, data2)

Now fit the time series copula model stepwise.

    tscmfit_step <- fit(tscmmod, data2)
    tscmfit_step
    #> object class: tscmfit
    #> _______
    #> MARGIN:
    #> name: slaplace
    #> parameters:
    #>        mu     scale     gamma
    #> 1.0136622 2.0855250 0.7108397
    #> _______
    #> COPULA:
    #> 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.9045782 -0.7980417
    #> ____________
    #> V-transform:
    #> name: V2p
    #> parameters:
    #>   delta   kappa
    #> 0.50000 1.98948
    #> _________________________
    #> summary of all estimates:
    #>           ar           ma     vt.kappa    margin.mu margin.scale margin.gamma
    #>    0.9045782   -0.7980417    1.9894803    1.0136622    2.0855250    0.7108397
    #> convergence status: 0 , log-likelihood: -4819.964
    coef(tscmfit_step)
    #>                            delta      kappa         mu      scale      gamma
    #>  0.9045782 -0.7980417  0.5000000  1.9894803  1.0136622  2.0855250  0.7108397
    coef(tscmmod)
    #>             delta kappa    mu scale gamma
    #>   0.9  -0.8   0.5   2.0   1.0   2.0   0.7

Final optimization over all parameters.

    tscmfit_full <- fit(tscmfit_step, data2, method = "full")
    tscmfit_full
    #> object class: tscmfit
    #> _______
    #> MARGIN:
    #> name: slaplace
    #> parameters:
    #>        mu     scale     gamma
    #> 1.0132969 2.0839697 0.7119104
    #> _______
    #> COPULA:
    #> 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.9043820 -0.7981071
    #> ____________
    #> V-transform:
    #> name: V2p
    #> parameters:
    #>    delta    kappa
    #> 0.500000 1.979627
    #> _________________________
    #> summary of all estimates:
    #>           ar           ma     vt.kappa    margin.mu margin.scale margin.gamma
    #>    0.9043820   -0.7981071    1.9796267    1.0132969    2.0839697    0.7119104
    #> convergence status: 0 , log-likelihood: -4819.961

Comparison of model.

    AIC(margfit, tscmfit_step, tscmfit_full)
    #>              df      AIC
    #> margfit       3 9947.347
    #> tscmfit_step  6 9651.929
    #> tscmfit_full  6 9651.921

### Plotting

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

The first plots relate to the fitted copula.

    plot(tscmfit_full)
    plot(tscmfit_full, plottype = "kendall")

The next plot is the QQplot of the marginal fit.

    plot(tscmfit_full, plottype = "margin")

The next two plots are the estimated v-transform and the estimated volatility profile function.

    plot(tscmfit_full, plottype = "vtransform")
    plot(tscmfit_full, plottype = "volprofile")

The final plot shows aspect of the fit of the v-transform to the data.

    plot(tscmfit_full, plottype = "volproxy")