knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) library(tscopula) tsoptions <- list(hessian = TRUE, method = "Nelder-Mead", avoidzero= FALSE)
We first load the data and calculate log-returns.
data(bitcoin) X <- (diff(log(bitcoin))[-1]) * 100 # log-returns (as percentages) length(X) plot(X, type = "h")
We start with the fulcrum profile-likelihood plot which indicates that a value $\delta = 0.45$ is about right.
U <- strank(X) copmod_Gauss <- armacopula(pars = list(ar = 0.95, ma = -0.85)) pts <- seq(from=0.01, to=0.99, length=51) + 0.005 profilefulcrum(U, copmod_Gauss, locations = pts) abline(v = 0.45)
Our baseline model is a model with ARMA(1,1) copula and v-transform with fulcrum at $\delta=0.45$.
mod_Gauss <- vtscopula(copmod_Gauss, Vlinear(0.45)) fit_Gauss <- fit(mod_Gauss, U, tsoptions = tsoptions) fit_Gauss
In this next section we try a d-vine copula model of the second kind with a finite value for maxlag
and a linear v-transform. We continue to use the Frank copula. The resulting model is superior to the ARMA copula model and has the same number of parameters. Note that an infinite value for maxlag
makes next to no difference in the fit.
copmod_Frank <- dvinecopula2(family = "frank", pars = list(ar = 0.95, ma = -0.85), maxlag = 30) mod_Frank <- vtscopula(copmod_Frank, Vlinear(0.45)) fit_Frank <- fit(mod_Frank, U, tsoptions = tsoptions) AIC(fit_Gauss, fit_Frank)
We provide plots for the model with Frank copula to show aspects of the fit.
plot(fit_Frank, plottype = "residual") plot(fit_Frank, plottype = "kendall")
We fit 6 marginal distributions (3 symmetric and 3 skewed) of which the double Weibull gives the lowest AIC value.
marg_st <- fit(margin("st"), X) marg_sst <- fit(margin("sst"), X) marg_lp <- fit(margin("laplace", pars = c(mu = 0.2, scale = 2.7)), X) marg_slp <- fit(margin("slaplace", pars = c(mu = 0.2, scale = 2.7, gamma = 0.9)), X) marg_dw <- fit(margin("doubleweibull", pars = c(mu = 0.2, shape = 0.8, scale = 2.7)), X) marg_sdw <- fit(margin("sdoubleweibull", pars = c(mu = 0.2, shape = 0.8, scale = 2.7, gamma = 0.9)), X) AIC(marg_st, marg_sst, marg_slp, marg_lp, marg_dw, marg_sdw)
We fit a full model combining the double Weibull margin with the VT-d-vine model of the second kind.
fullmod <- tscm(fit_Frank, margin = marg_dw) fullmod <- fit(fullmod, as.numeric(X), method = "full", tsoptions = tsoptions) fullmod AIC(marg_dw, fullmod)
We show all the possible plots for the full model.
plot(fullmod, plottype = "residual") plot(fullmod, plottype = "kendall") plot(fullmod, plottype = "margin") plot(fullmod, plottype = "vtransform") plot(fullmod, plottype = "volprofile") plot(fullmod, plottype = "volproxy")
plot(fullmod, plottype = "glag")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.