← Catálogo
· Capítulo 2
T02_mST_CP_Macro.R
# ══════════════════════════════════════════════════
# 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) ===