
Last chance! 50% off unlimited learning
Sale ends in
This function calculatest the High frEquency bAsed VolatilitY (HEAVY) model proposed in Shephard and Sheppard (2010). This function is used as a predictive volatility model built to exploit highfrequency data.
heavyModel(
data,
p = matrix(c(0, 0, 1, 1), ncol = 2),
q = matrix(c(1, 0, 0, 1), ncol = 2),
startingvalues = NULL,
LB = NULL,
UB = NULL,
backcast = NULL,
compconst = FALSE
)
a (T x K) matrix containing the data, with T the number of days. For the traditional HEAVY model: K = 2, the first column contains the squared daily demeaned returns, the second column contains the realized measures.
a (K x K) matrix containing the lag length for the model innovations. Position (i, j) in the matrix indicates the number of lags in equation i of the model for the innovations in data column j. For the traditional heavy model p is given by matrix(c(0,0,1,1), ncol = 2) (default).
a (K x K) matrix containing the lag length for the conditional variances. Position (i, j) in the matrix indicates the number of lags in equation i of the model for conditional variances corresponding to series j. For the traditional heavy model introduced above q is given by matrix( c(1,0,0,1),ncol=2 ) (default).
a vector containing the starting values to be used in the optimization to find the optimal parameters estimates.
a vector of length K indicating the lower bounds to be used in the estimation. If NULL it is set to a vector of zeros by default.
a vector of length K indicating the upper bounds to be used in the estimation. If NULL it is set to a vector of Inf by default.
a vector of length K used to initialize the estimation. If NULL the unconditional estimates are taken.
a boolean variable. In case TRUE, the omega values are estimated in the optimization. In case FALSE, volatility targeting is done and omega is just 1 minus the sum of all relevant alpha's and beta's multiplied by the unconditional variance.
A list with the following values:
(i) loglikelihood: the log likelihood evaluated at the parameter estimates.
(ii) likelihoods: an xts object of length T containing the log likelihoods per day.
(iii) condvar: a (T x K) xts object containing the conditional variances
(iv) estparams: a vector with the parameter estimates. The order in which the
parameters are reported is as follows: First the estimates for omega then the
estimates for the non-zero alpha's with the most recent lags first in case max(p) > 1,
then the estimates for the non-zero beta's with the most recent lag first in case
max(q) > 1.
(v) convergence: an integer code indicating the successfulness of the optimization. See optim
for more information.
Assume there are
The most basic heavy model is the one with lag matrices p of
Equivalently, they can be presented in terms of matrix notation as below:
In this version, the parameters vector to be estimated is
In terms of startingvalues, Shephard and Sheppard recommend for this version of the Heavy model to set
In this version, the parameters vector to be estimated is
Shephard, N. and K. Sheppard (2010). Realising the future: forecasting with high frequency based volatility (heavy) models. Journal of Applied Econometrics 25, 197-231.
# NOT RUN {
# Implementation of the heavy model on DJI:
returns <- realized_library$open_to_close
bv <- realized_library$bv
returns <- returns[!is.na(bv)]
bv <- bv[!is.na(bv)] # Remove NA's
data <- cbind( returns^2, bv) # Make data matrix with returns and realized measures
backcast <- matrix(c(var(returns), mean(bv)), ncol = 1)
#For traditional (default) version:
startvalues <- c(0.004,0.02,0.44,0.41,0.74,0.56) # Initial values
output <- heavyModel(data = as.matrix(data,ncol=2), compconst=FALSE,
startingvalues = startvalues, backcast=backcast)
#For general version:
startvalues <- c(0.004, 0.02, 0.44, 0.4, 0.41, 0.74, 0.56) # Initial values;
p <- matrix(c(2, 0, 0, 1), ncol = 2)
q <- matrix(c(1, 0, 0, 1), ncol = 2)
heavy_model <- heavyModel(data = as.matrix(data, ncol = 2), p = p, q = q, compconst = FALSE,
startingvalues = startvalues, backcast = backcast)
# }
Run the code above in your browser using DataLab