# ══════════════════════════════════════════════════ # T02 · Caso práctico Macro — PIB de España (INE) # Abre primero mSeriesTemporales.Rproj en RStudio # Datos: data/pib_trimestral_espana.RData (INE CNTR4893 -> nivel) # ══════════════════════════════════════════════════ library(tidyverse) library(forecast) pausa <- function(msg = "\n [Pulsa ENTER para continuar...]") { if (interactive()) { cat(msg); invisible(readline()) } } # ── 1. CARGA DE DATOS ───────────────────────────── load("data/pib_trimestral_espana.RData") pib <- pib_trimestral_espana pib$fecha <- as.Date(pib$fecha) pib_ts <- ts(pib$pib_indice, start = c(1995, 1), frequency = 4) cat(sprintf("PIB trimestral: %d obs (%s a %s)\n", nrow(pib), format(min(pib$fecha), "%Y"), format(max(pib$fecha), "%Y"))) pausa() # ── 2. GRÁFICO DEL NIVEL (NO ESTACIONARIO) ──────── plot(pib_ts, col = "steelblue", lwd = 1.5, ylab = "Índice de volumen (1995-T1 = 100)", main = "PIB trimestral de España (nivel)") cat("Nivel con tendencia clara: serie no estacionaria en media.\n") pausa() # ── 3. GRÁFICO RANGO-MEDIA ──────────────────────── x <- pib$pib_indice g <- cut(seq_along(x), breaks = 10, labels = FALSE) rm_df <- aggregate(x, list(g = g), FUN = function(v) c(media = mean(v), rango = max(v) - min(v))) rm_df <- data.frame(media = rm_df$x[, "media"], rango = rm_df$x[, "rango"]) plot(rm_df$media, rm_df$rango, pch = 16, xlab = "Media del subperiodo", ylab = "Rango", main = "Gráfico rango-media del PIB") abline(lm(rango ~ media, data = rm_df), lty = 2, col = "grey40") cat("Pendiente positiva => no estacionariedad en varianza => tomar logaritmos.\n") pausa() # ── 4. LOGARITMOS Y DIFERENCIACIÓN ──────────────── lpib <- log(pib$pib_indice) dlpib <- diff(lpib) # tasa de crecimiento trimestral op <- par(mfrow = c(1, 2)) acf(lpib, main = "FAC log(PIB) [niveles]") # decrece muy lento acf(dlpib, main = "FAC diff(log(PIB))") # decae deprisa par(op) cat("El nivel decrece lento (no estacionario); la serie diferenciada, deprisa.\n") pausa() # ── 5. LJUNG-BOX ANTES Y DESPUÉS ────────────────── lb_niv <- Box.test(lpib, lag = 8, type = "Ljung-Box") lb_dif <- Box.test(dlpib, lag = 8, type = "Ljung-Box") cat(sprintf("Ljung-Box log(PIB) : Q=%.1f p=%.4f\n", lb_niv$statistic, lb_niv$p.value)) cat(sprintf("Ljung-Box diff(log(PIB)): Q=%.1f p=%.4f\n", lb_dif$statistic, lb_dif$p.value)) # === FIN Caso Práctico Macro — Tema 02 (PIB) ===