# ══════════════════════════════════════════════════ # T18 · Series Temporales — Teoría de Valores Extremos (EVT) # Abre primero mSeriesTemporales.Rproj en RStudio # ══════════════════════════════════════════════════ library(tidyverse) library(evd) library(ismev) library(POT) pausa <- function(msg = "\n [Pulsa ENTER para continuar...]") { if (interactive()) { cat(msg); invisible(readline()) } } set.seed(2026) # ── 1. SIMULAR MAXIMOS DE UNA t DE STUDENT (COLA PESADA) ─ # Los maximos de una t deberian converger a una GEV con xi>0 (Frechet) n_bloques <- 500 tam_bloque <- 22 maximos <- replicate(n_bloques, max(rt(tam_bloque, df = 4))) cat(sprintf("Maximo medio de %d bloques de %d obs. de una t(4): %.3f\n", n_bloques, tam_bloque, mean(maximos))) pausa() # ── 2. AJUSTE GEV Y DOMINIO DE ATRACCION ────────── fit_gev <- gev.fit(maximos, show = FALSE) cat(sprintf("GEV: mu=%.3f sigma=%.3f xi=%.3f (se=%.3f)\n", fit_gev$mle[1], fit_gev$mle[2], fit_gev$mle[3], fit_gev$se[3])) cat(ifelse(fit_gev$mle[3] > 2 * fit_gev$se[3], "-> xi significativamente positivo: dominio de Frechet (cola pesada), como se esperaba de una t.\n", "-> xi no claramente positivo: revise el tamano de la simulacion.\n")) pausa() # ── 3. PEAKS-OVER-THRESHOLD SOBRE LA MISMA SIMULACION ─ x <- rt(20000, df = 4) u <- quantile(x, 0.95) fit_gpd <- fitgpd(x, threshold = u, est = "mle") cat(sprintf("GPD (POT): umbral=%.3f xi=%.3f (se=%.3f)\n", u, fit_gpd$fitted.values["shape"], fit_gpd$std.err["shape"])) cat("El xi de la GPD deberia ser similar al de la GEV: son dos caras del mismo teorema.\n") pausa() # ── 4. VaR EXTREMO CON LA FORMULA DE LA GPD ─────── alpha <- 0.001 n <- length(x); Nu <- sum(x > u) sigma_gpd <- fit_gpd$fitted.values["scale"]; xi_gpd <- fit_gpd$fitted.values["shape"] VaR_evt <- u + (sigma_gpd / xi_gpd) * (((n / Nu) * alpha)^(-xi_gpd) - 1) VaR_hist <- quantile(x, 1 - alpha) cat(sprintf("VaR EVT (99.9%%): %.3f | VaR historico (99.9%%): %.3f\n", VaR_evt, VaR_hist)) # === FIN Script T18 — Teoría de Valores Extremos (EVT) ===