Metodología Box Jenkins

##Introducción

Objetivos

Objetivo: Crear en código R la metodología Box Jenkins para 4 tipos de series de precios de activos financieros (Renta variable, renta fija, moneda y fondo de inversión)

Activos seleccionados

Renta Variable (Acción): NVIDIA → NVDA Renta Fija (Tasa de interés): Bonos de tesoro 10 años → TNX Moneda: EUR/USD → EURUSD=X Fondo de inversión: MSCI ACWI → ACWI

##Serie de precios

Series de rendimientos financieros y rendimientos financieros al cuadrado

En el caso de los bonos del Tesoro USA, estamos trabajando con niveles de tasas de interés, no con precios de activos. Esta distinción es fundamental porque las tasas de interés poseen propiedades económicas y estadísticas diferentes. Mientras que para acciones, divisas y ETFs calculamos rendimientos logarítmicos que representan cambios porcentuales en precios, para las tasas de interés utilizamos cambios absolutos en los niveles de tasa.

La razón principal es que el logaritmo natural de una tasa de interés representa matemáticamente una segunda diferencia en términos económicos, lo que introduciría una transformación excesiva y distorsionaría la interpretación económica del modelo.

Al modelar cambios absolutos en las tasas, capturamos directamente la dinámica de los movimientos en los niveles de interés, que es lo que realmente importa para el análisis.

Esta aproximación asegura que nuestros modelos ARIMA capturen la verdadera naturaleza estocástica de las tasas de interés sin alteraciones matemáticas

Renta Variable (Acción): NVIDIA

Gráficos de serie de precios, rendimientos financieros y rendimientos financieros al cuadrado

Test de Autocorrelación (Correlograma)

Precios (primer gráfico).

Las autocorrelaciones de los precios son altas y se mantienen significativas en varios rezagos. Esto muestra que la serie depende mucho de sus valores pasados y no es estacionaria. Es decir, los precios siguen una trayectoria persistente en el tiempo, lo cual es común en series en niveles.

Rendimientos (segundo gráfico).

En los rendimientos, la mayoría de las autocorrelaciones están cerca de cero, y solo unas pocas se acercan a los límites de significancia. Esto indica que los rendimientos no tienen una dependencia fuerte en el tiempo y se comportan de manera similar a un proceso aleatorio, con poca o casi nula memoria.

Rendimientos al cuadrado / Volatilidad (tercer gráfico).

En la serie de rendimientos al cuadrado, las autocorrelaciones son positivas y disminuyen de forma gradual conforme aumentan los rezagos. Este comportamiento evidencia persistencia en la volatilidad: los periodos de alta o baja variabilidad tienden a concentrarse, lo que se conoce como clustering de volatilidad.

Test de Normalidad

La interpretación de la gráfica de rendimientos de JNJ indica que los datos no siguen una distribución normal. Específicamente, la Curtosis excedente alta (8.99) significa que la distribución es leptocúrtica o tiene “colas pesadas”: esto implica que la probabilidad de que la acción experimente movimientos de precio muy grandes, tanto positivos como negativos, es significativamente mayor de lo que asumiría un modelo tradicional.

La no normalidad y, en particular, la alta curtosis (colas pesadas) justifican la necesidad de pasar del modelado ARMA al modelado GARCH que está diseñado para capturar esta característica de las colas pesadas y la volatilidad que cambia con el tiempo, lo cual es fundamental para obtener una estimación precisa del riesgo (VaR).

Test de Raíz Unitaria (Estacionariedad)

Selección de series estacionarias

El test de Dickey-Fuller muestra que los precios de JNJ no son estacionarios (tienen raíz unitaria), mientras que los rendimientos y la volatilidad sí lo son. Esto significa que los precios presentan tendencia y dependen de su pasado, lo cual dificulta hacer modelos estadísticos confiables. En cambio, los rendimientos no tienen esa dependencia, su comportamiento es más estable en el tiempo y por eso son la variable adecuada para análisis, estimación y modelamiento financiero. Por lo tanto vamos a trabajar con los rendimientos continuamente compuestos en este caso

Estimación de modelos Autoregresivos

A continuación, con serie seleccionada se estiman los siguientes modelos: a. AR(p) b. MA(q) c. ARMA (p,q)

Para determinar los números que acompañan al modelo ARMA, es decir p y q, se analiza cómo la serie se relaciona con sus propios valores pasados.

El número p, que corresponde a la parte autorregresiva (AR), se obtiene observando la función de autocorrelación parcial (PACF). Esta muestra hasta qué punto los valores actuales dependen de los valores anteriores de la misma serie. Cuando la PACF deja de mostrar relaciones importantes después de cierto rezago, ese número indica cuántos rezagos debemos incluir en el modelo, y por tanto define el valor de p.

Por otro lado, el número q, que pertenece a la parte de promedio móvil (MA), se determina a partir de la función de autocorrelación (ACF). Esta refleja cómo los errores o choques pasados influyen en los valores actuales de la serie. Al igual que con la PACF, cuando la ACF deja de ser significativa después de un número determinado de rezagos, ese valor se toma como q.

Test de Heterocedasticidad ( Modelos Autoregresivos)

  1. En cada uno de los modelos estimados en el numeral 8, revisar la presencia de posibles problemas de autocorrelación y heterocedasticidad

Diagnóstico de autocorrelación y heterocedasticidad

Para evaluar los modelos se utiliza el test Ljung-Box sobre residuales para identificar si tiene problemas de autocorrelación. El test ARCH-LM se utiliza para evaluar si tiene problemas de heterocedasticidad. En este caso los tres modelos presentan problemas de heterocedasticidad y autocorrelación

# -----------------------------------------------------------------------------
# PUNTO 9: DIAGNOSTICO DE RESIDUALES (AUTOCORRELACION Y HETEROCEDASTICIDAD) - NVDA
# -----------------------------------------------------------------------------

# Cargar librerias necesarias
library(tseries)
library(stats)
library(DT)
library(graphics)

# Asegurar FinTS para ARCH-LM
if (!requireNamespace("FinTS", quietly = TRUE)) install.packages("FinTS")
library(FinTS)

# --- FUNCION DE ACF ESTILO EVIEWS (ADAPTADA A TU COLOR #2E86AB) ---
plot_acf_eviews <- function(x, main = "", lag.max = 20,
                            col_fill = "#2E86AB", col_border = "#1B4F72") {
  
  x_core <- as.numeric(coredata(na.omit(x)))
  
  acf_x <- acf(x_core, lag.max = lag.max, plot = FALSE)
  acf_vals <- acf_x$acf[-1]
  lags <- 1:length(acf_vals)

  ci <- 1.96 / sqrt(length(x_core))

  ylim_low <- min(acf_vals, -ci) - 0.02
  ylim_high <- max(acf_vals, ci) + 0.02

  plot(NA, xlim = c(0.5, length(acf_vals) + 0.5), ylim = c(ylim_low, ylim_high),
       xlab = "Rezagos", ylab = "ACF", main = main,
       xaxt = "n", yaxt = "s", bty = "n")

  axis(1, at = lags)
  axis(2)

  abline(h = ci, lty = 2, col = "red")
  abline(h = -ci, lty = 2, col = "red")
  abline(h = 0, lwd = 1.2)

  ancho <- 0.4
  for (i in lags) {
    top <- acf_vals[i]
    if (top >= 0) {
      rect(i - ancho, 0, i + ancho, top,
           col = col_fill, border = col_border)
    } else {
      rect(i - ancho, top, i + ancho, 0,
           col = col_fill, border = col_border)
    }
  }
}

# --- FUNCION PRINCIPAL DE DIAGNOSTICO ---
run_model_diagnostics <- function(model, model_name, lag_test = 20) {
  
  res <- residuals(model)
  
  lb_res <- Box.test(res, lag = lag_test, type = "Ljung-Box")
  arch_test <- FinTS::ArchTest(res, lags = lag_test)

  # Plot ACF
  plot_acf_eviews(
    res,
    main = paste("Autocorrelacion de Residuales -", model_name, "(NVDA)"),
    lag.max = lag_test
  )

  fmt_pval <- function(pval) {
    ifelse(pval < 0.0001, "< 0.0001",
           format.pval(pval, digits = 4, eps = 1e-4))
  }
  
  dec_lb <- ifelse(lb_res$p.value < 0.05, "Rechazar H0", "No Rechazar H0")
  con_lb <- ifelse(dec_lb == "Rechazar H0",
                   '<span style="color:red; font-weight:bold;">Problema: Autocorrelacion</span>',
                   '<span style="color:green; font-weight:bold;">✓ Correcto: Ruido Blanco</span>')
  
  dec_arch <- ifelse(arch_test$p.value < 0.05, "Rechazar H0", "No Rechazar H0")
  con_arch <- ifelse(dec_arch == "Rechazar H0",
                     '<span style="color:red; font-weight:bold;">Problema: Heterocedasticidad</span>',
                     '<span style="color:green; font-weight:bold;">✓ Correcto: Homocedastico</span>')
  
  df_diag <- data.frame(
    Prueba = c("Ljung-Box (Residuales)", "ARCH-LM (Residuales)"),
    Hipotesis_Nula = c("Residuales son ruido blanco", "No hay efectos ARCH"),
    Estadistico_Chi_sq = c(round(lb_res$statistic, 4),
                          round(arch_test$statistic, 4)),
    Valor_p = c(fmt_pval(lb_res$p.value), fmt_pval(arch_test$p.value)),
    Decision_alpha_5 = c(dec_lb, dec_arch),
    Conclusion = c(con_lb, con_arch),
    check.names = FALSE,
    stringsAsFactors = FALSE
  )
  
  datatable(
    df_diag, rownames = FALSE, escape = FALSE,
    caption = htmltools::tags$caption(
      style = 'caption-side: top;
               text-align: center;
               color: #2E86AB;
               font-size: 16px;
               font-weight: bold;
               padding: 10px;',
      paste('Diagnostico de Residuales -', model_name, '(NVDA)')
    ),
    options = list(dom = "t", paging = FALSE, ordering = FALSE)
  )
}

# --- EJECUCION PARA LOS MODELOS DE NVDA ---
# Estos objetos ya deben existir del PUNTO 8:
#   model_ar
#   best_ar_p
#   model_ma
#   best_ma_q
#   model_arma
#   best_arma_p
#   best_arma_q

run_model_diagnostics(model_ar, paste0("AR(", best_ar_p, ")"))

run_model_diagnostics(model_ma, paste0("MA(", best_ma_q, ")"))

run_model_diagnostics(model_arma, paste0("ARMA(", best_arma_p, ",", best_arma_q, ")"))

Estimación con Modelos GARCH

Selección del modelo que mejor se ajusta

Entre los modelos lineales estimados, el mejor según el criterio de información (AIC/BIC) corresponde a una especificación ARMA de baja orden. Los coeficientes resultan en su mayoría significativos, lo que sugiere cierta dependencia de corto plazo, pero los residuos aún presentan heterocedasticidad, indicando que un modelo GARCH es necesario.

# -----------------------------------------------------------------------------
# PUNTO 11: SELECCIÓN DEL MEJOR MODELO GARCH - VERSIÓN ADAPTADA A NVDA
# -----------------------------------------------------------------------------

library(rugarch)
library(DT)
library(htmltools)

# Cargar modelos estimados del Punto 10
load("box_jenkins_analysis/03_modelos_garch_NVDA.RData")

# -----------------------------------------------------------------------------
# EXTRAER CRITERIOS DE INFORMACIÓN
# -----------------------------------------------------------------------------

# AR-GARCH
ic_ar   <- infocriteria(model_ar_garch)
aic_ar  <- ic_ar["Akaike", 1]
bic_ar  <- ic_ar["Bayes", 1]

# MA-GARCH
ic_ma   <- infocriteria(model_ma_garch)
aic_ma  <- ic_ma["Akaike", 1]
bic_ma  <- ic_ma["Bayes", 1]

# ARMA-GARCH
ic_arma  <- infocriteria(model_arma_garch)
aic_arma <- ic_arma["Akaike", 1]
bic_arma <- ic_arma["Bayes", 1]

# -----------------------------------------------------------------------------
# CREAR TABLA DE COMPARACIÓN
# -----------------------------------------------------------------------------

comparacion <- data.frame(
  Modelo = c(
    paste0("AR(", best_ar_p, ")-GARCH(1,1)"),
    paste0("MA(", best_ma_q, ")-GARCH(1,1)"),
    paste0("ARMA(", best_arma_p, ",", best_arma_q, ")-GARCH(1,1)")
  ),
  AIC = c(aic_ar, aic_ma, aic_arma),
  BIC = c(bic_ar, bic_ma, bic_arma),
  stringsAsFactors = FALSE
)

# Identificar mejores modelos
mejor_aic_idx <- which.min(comparacion$AIC)
mejor_bic_idx <- which.min(comparacion$BIC)

comparacion$`Mejor AIC` <- ""
comparacion$`Mejor AIC`[mejor_aic_idx] <- "seleccionado"

comparacion$`Mejor BIC` <- ""
comparacion$`Mejor BIC`[mejor_bic_idx] <- "seleccionado"

# Nombre del modelo seleccionado por AIC
modelo_seleccionado <- comparacion$Modelo[mejor_aic_idx]

# -----------------------------------------------------------------------------
# MOSTRAR TABLA COMPARATIVA EN DT
# -----------------------------------------------------------------------------

datatable(
  comparacion,
  rownames = FALSE,
  options = list(
    dom = 't',
    paging = FALSE,
    ordering = FALSE,
    autoWidth = FALSE,
    columnDefs = list(
      list(className = 'dt-left', targets = 0),
      list(className = 'dt-center', targets = 1:4)
    )
  ),
  class = 'cell-border stripe hover',
  caption = tags$caption(
    style = 'caption-side: top; text-align:left; font-weight:bold;',
    "Comparación de Modelos GARCH para NVDA"
  )
) %>%
  formatRound(columns = c('AIC', 'BIC'), digits = 6) %>%
  formatStyle(
    'Modelo',
    fontWeight = 'bold',
    color = '#2E86AB',
    fontSize = '14px'
  ) %>%
  formatStyle(
    'AIC',
    fontWeight = 'bold',
    color = styleInterval(min(comparacion$AIC) + 0.0001,
                          c('#2E86AB', '#666666'))
  ) %>%
  formatStyle(
    'BIC',
    fontWeight = 'bold',
    color = styleInterval(min(comparacion$BIC) + 0.0001,
                          c('#2E86AB', '#666666'))
  ) %>%
  formatStyle(
    'Mejor AIC',
    fontWeight = 'bold',
    backgroundColor = styleEqual('seleccionado', '#D6EAF8'),
    color = '#2E86AB'
  ) %>%
  formatStyle(
    'Mejor BIC',
    fontWeight = 'bold',
    backgroundColor = styleEqual('seleccionado', '#D6EAF8'),
    color = '#2E86AB'
  )
# -----------------------------------------------------------------------------
# GUARDAR EL MODELO SELECCIONADO
# -----------------------------------------------------------------------------

invisible({
  if (mejor_aic_idx == 1) {
    modelo_final <- model_ar_garch
    modelo_nombre <- paste0("AR(", best_ar_p, ")-GARCH(1,1)")
  } else if (mejor_aic_idx == 2) {
    modelo_final <- model_ma_garch
    modelo_nombre <- paste0("MA(", best_ma_q, ")-GARCH(1,1)")
  } else {
    modelo_final <- model_arma_garch
    modelo_nombre <- paste0("ARMA(", best_arma_p, ",", best_arma_q, ")-GARCH(1,1)")
  }
  
  save(
    modelo_final, modelo_nombre,
    file = "box_jenkins_analysis/04_modelo_seleccionado.RData"
  )
})

Diagnóstico de autocorrelación y heterocedasticidad del modelo seleccionado

Los tests Ljung-Box y ARCH-LM no rechazan las hipótesis nulas, lo que indica que los residuales se comportan como ruido blanco y no queda heterocedasticidad remanente. Con el modelo GARCH se solucionaron los problemas identificados previamente.

Cálculo de Volatilidad y VaR

VaR del modelo VS VaR Riskmetricks

El VaR-GARCH tiende a ser tener valores ligeramente mayores, reflejando de manera más estricta las posibles perdidas en el mercado accionario.

Esto ocurre porque el modelo GARCH tiene en cuenta que la volatilidad cambia con el tiempo, mientras que el método de RiskMetrics asume una varianza más estable y depende de un factor de suavizamiento fijo. En otras palabras, el GARCH reacciona con mayor sensibilidad ante periodos de alta volatilidad, ajustando el riesgo al alza cuando el mercado se vuelve más inestable. Por eso, sus valores de VaR suelen ser un poco mayores, ya que reflejan de forma más realista la posibilidad de pérdidas extremas.

Aunque el método RiskMetrics también calcula una volatilidad variable, utiliza una forma más simple basada en un promedio exponencial de los rendimientos pasados. En cambio, el modelo GARCH estima la volatilidad condicional de manera más flexible, permitiendo que los choques recientes tengan un efecto más fuerte y duradero sobre la varianza.


Renta Fija (Tasa de interés): Bonos de tesoro (EEUU) 10 años

Gráficos de serie de precios, rendimientos financieros y rendimientos financieros al cuadrado

Gráfica de las Serie

Correlogramas Precios (primer gráfico).

Las autocorrelaciones de los precios son altas y se mantienen significativas en varios rezagos. Esto muestra que la serie depende mucho de sus valores pasados y no es estacionaria. Es decir, los precios siguen una trayectoria persistente en el tiempo, lo cual es común en series en niveles.

Rendimientos (segundo gráfico).

En los rendimientos, la mayoría de las autocorrelaciones están cerca de cero, y solo unas pocas se acercan a los límites de significancia. Esto indica que los rendimientos no tienen una dependencia fuerte en el tiempo y se comportan de manera similar a un proceso aleatorio, con poca o casi nula memoria.

Rendimientos al cuadrado / Volatilidad (tercer gráfico).

En la serie de rendimientos al cuadrado, las autocorrelaciones son positivas y disminuyen de forma gradual conforme aumentan los rezagos. Este comportamiento evidencia persistencia en la volatilidad: los periodos de alta o baja variabilidad tienden a concentrarse, lo que se conoce como clustering de volatilidad.

Test de Normalidad Los cambios diarios en la tasa no siguen una distribución normal. Aunque la curtosis excedente es menor que en la renta variable, sigue siendo positiva, reflejando episodios esporádicos de saltos bruscos en los rendimientos. El test de Jarque-Bera también rechaza la normalidad, lo que indica que incluso las tasas presentan colas más pesadas de lo que uno puede visualizar

Test de Estacionariedad

Selección de Serie Estacionaria El test de Dickey-Fuller muestra que las tasas de los bonos no son estacionarios (tienen raíz unitaria), mientras que los rendimientos y la volatilidad sí lo son. Esto significa que las tasas presentan tendencia y dependen de su pasado, lo cual dificulta hacer modelos estadísticos confiables. En cambio, los cambios en los rendimientos no tienen esa dependencia, su comportamiento es más estable en el tiempo y por eso son la variable adecuada para análisis, estimación y modelamiento financiero. Por lo tanto vamos a trabajar con los rendimientos calculados con la diferencia absoluta.

Estimación de Modelos Lineales Para determinar los números que acompañan al modelo ARMA, es decir p y q, se analiza cómo la serie se relaciona con sus propios valores pasados.

Diagnóstico de Modelos Lineales Para evaluar los modelos se utiliza el test Ljung-Box sobre residuales para identificar si tiene problemas de autocorrelación. El test ARCH-LM se utiliza para evaluar si tiene problemas de heterocedasticidad. En este caso los tres modelos unicamente presentan problemas de heterocedasticidad, no hay problemas de autocorrelación.

Estimación con Modelos GARCH

Selección del Mejor Modelo Entre los modelos lineales estimados, el mejor según el criterio de información (AIC/BIC) corresponde a una especificación AR-GARCH. Los coeficientes resultan en su mayoría significativos, lo que sugiere cierta dependencia de corto plazo, pero los residuos aún presentan heterocedasticidad, indicando que un modelo GARCH es necesario.

Diagnóstico Final del Mejor Modelo Los tests Ljung-Box y ARCH-LM no rechazan las hipótesis nulas, lo que indica que los residuales se comportan como ruido blanco y no queda heterocedasticidad remanente. Con el modelo GARCH se solucionaron los problemas identificados previamente.

Cálculo de Volatilidad y VaR

Comparación de VaR El VaR-GARCH tiende a ser tener valores considerablemente mayores, reflejando de manera más estricta las posibles perdidas en el mercado de renta fija.

Esto ocurre porque el modelo GARCH tiene en cuenta que la volatilidad cambia con el tiempo, mientras que el método de RiskMetrics asume una varianza más estable y depende de un factor de suavizamiento fijo. En otras palabras, el GARCH reacciona con mayor sensibilidad ante periodos de alta volatilidad, ajustando el riesgo al alza cuando el mercado se vuelve más inestable. Por eso, sus valores de VaR suelen ser un poco mayores, ya que reflejan de forma más realista la posibilidad de pérdidas extremas.


EUR/COP

Correlogramas Precios (primer gráfico).

Las autocorrelaciones de los precios son altas y se mantienen significativas en varios rezagos. Esto muestra que la serie depende mucho de sus valores pasados y no es estacionaria. Es decir, los precios siguen una trayectoria persistente en el tiempo, lo cual es común en series en niveles.

Rendimientos (segundo gráfico).

En los rendimientos del EUR/COP, casi todas las autocorrelaciones se encuentran muy cerca de cero, lo que indica poca dependencia entre los valores actuales y los pasados. Las pocas que superan el límite de significancia lo hacen en sentido negativo, a diferencia de lo observado en las acciones o los bonos, donde predominaban correlaciones positivas.

Rendimientos al cuadrado / Volatilidad (tercer gráfico).

En la serie de rendimientos al cuadrado, las autocorrelaciones son positivas y se mantienen relativamente estables a lo largo de los rezagos, lo que refleja la presencia de persistencia en la volatilidad. Esto significa que los periodos de alta o baja volatilidad tienden a prolongarse en el tiempo, un comportamiento típico del mercado cambiario.

Test de Normalidad Los cambios diarios en la tasa de cambio no siguen una distribución normal. Aunque la curtosis excedente es menor que en la renta variable, un comportamiento parecido al de los bonos en cuando el valor de la curtosis. Sigue siendo positiva, reflejando episodios esporádicos de saltos bruscos en los rendimientos. El test de Jarque-Bera también rechaza la normalidad, lo que indica que incluso las tasas presentan colas más pesadas de lo que uno puede visualizar

Test de Estacionariedad

Selección de Serie Estacionaria El test de Dickey-Fuller muestra que los precios de EUR/COP no son estacionarios (tienen raíz unitaria), mientras que los rendimientos y la volatilidad sí lo son. Esto significa que los precios presentan tendencia y dependen de su pasado, lo cual dificulta hacer modelos estadísticos confiables. En cambio, los rendimientos no tienen esa dependencia, su comportamiento es más estable en el tiempo y por eso son la variable adecuada para análisis, estimación y modelamiento financiero. Por lo tanto vamos a trabajar con los rendimientos continuamente compuestos en este caso

Estimación de Modelos Lineales Para determinar los números que acompañan al modelo ARMA, es decir p y q, se analiza cómo la serie se relaciona con sus propios valores pasados.

Diagnóstico de Modelos Lineales Para evaluar los modelos se utiliza el test Ljung-Box sobre residuales para identificar si tiene problemas de autocorrelación. El test ARCH-LM se utiliza para evaluar si tiene problemas de heterocedasticidad. En este caso los tres modelos unicamente presentan problemas de heterocedasticidad, no hay problemas de autocorrelación.

Estimación con Modelos GARCH

Selección del Mejor Modelo Entre los modelos lineales estimados, el mejor según el criterio de información (AIC/BIC) corresponde a una especificación MA-GARCH. Los coeficientes resultan en su mayoría significativos, lo que sugiere cierta dependencia de corto plazo, pero los residuos aún presentan heterocedasticidad, indicando que un modelo GARCH es necesario.

Diagnóstico Final del Mejor Modelo Los tests Ljung-Box y ARCH-LM no rechazan las hipótesis nulas, lo que indica que los residuales se comportan como ruido blanco y no queda heterocedasticidad remanente. Con el modelo GARCH se solucionaron los problemas identificados previamente.

Cálculo de Volatilidad y VaR

Comparación de VaR El VaR-GARCH tiende a ser tener valores ligeramente mayores, reflejando de manera más estricta las posibles perdidas en el mercado cambiario.


Fondo de inversión: MSCI ACWI → ACWI

MSCI ACWI Gráfica de las Series

Correlogramas

Test de Normalidad

Test de Estacionariedad

Estimación de Modelos Lineales

Diagnóstico de Modelos Lineales

Estimación con Modelos GARCH

Selección del Mejor Modelo

Diagnóstico Final del Mejor Modelo

Cálculo de Volatilidad y VaR

Comparación de VaR