## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
library(GEVStableGarch)

## -----------------------------------------------------------------------------
spec <- gs_spec(arma = c(1, 0), garch = c(1, 1), aparch = TRUE, dist = gs_gev())
spec
model <- gs_model(spec, mu = 0.0005, ar = 0.05, omega = 0.02, alpha = 0.12,
                  gamma = 0.5, beta = 0.6, delta = 1.0, dist_par = c(xi = 0.25))
gs_stationarity(model)

## -----------------------------------------------------------------------------
x <- gs_sim(model, n = 4000, seed = 7)$y
fit <- gs_fit(x, spec)
fit

## -----------------------------------------------------------------------------
z <- residuals(fit, type = "standardized")
Box.test(abs(z), lag = 20, type = "Ljung-Box")$p.value
u <- residuals(fit, type = "pit")
ks.test(u, "punif")$p.value

## -----------------------------------------------------------------------------
predict(fit, n_ahead = 1, level = c(0.01, 0.05))

## -----------------------------------------------------------------------------
predict(fit, n_ahead = 5, level = 0.01, n_sim = 5000, seed = 2)

## ----eval = FALSE-------------------------------------------------------------
# w <- 1000
# origins <- w:(length(x) - 1)
# var_1 <- numeric(length(origins)); prev <- NULL
# for (k in seq_along(origins)) {
#   t <- origins[k]
#   fit_t <- gs_fit(x[(t - w + 1):t], spec, start = prev, hessian = FALSE)
#   prev <- coef(fit_t)
#   var_1[k] <- -predict(fit_t, level = 0.01)$q_0.01    # VaR for x[t + 1]
# }
# violations <- x[origins + 1] < -var_1
# mean(violations)                                      # should be close to 0.01

## -----------------------------------------------------------------------------
norm <- gs_dist(
  name = "norm",
  log_density = function(z, par) dnorm(z, log = TRUE),
  random = function(n, par) rnorm(n),
  cdf = function(q, par) pnorm(q),
  quantile = function(p, par) qnorm(p),
  par_names = character(0), lower = numeric(0), upper = numeric(0), start = numeric(0),
  default_delta = 2,
  max_power = function(par) Inf,
  mean = function(par) 0)

## ----error = TRUE-------------------------------------------------------------
try({
gs_dist(
  name = "norm",
  log_density = function(z, par) dnorm(z, log = TRUE),
  random = function(n, par) rnorm(n),
  cdf = function(q, par) pnorm(q),
  quantile = function(p, par) qnorm(p),
  par_names = character(0), lower = numeric(0), upper = numeric(0), start = numeric(0),
  default_delta = 2,
  max_power = function(par) Inf,
  mean = function(par) 0.5)
})

## -----------------------------------------------------------------------------
spec_n <- gs_spec(garch = c(1, 1), dist = norm)
m_n <- gs_model(spec_n, mu = 0, omega = 0.1, alpha = 0.1, beta = 0.8)
fit_n <- gs_fit(gs_sim(m_n, n = 1000, seed = 3)$y, spec_n)
coef(fit_n)
predict(fit_n, n_ahead = 3, n_sim = 2000, seed = 4)

