library(mFilter)
library(ggplot2)
library(dplyr)
library(tidyr)
library(readxl)
datos_pib<-read_excel("C:/Users/henry/Downloads/datos_PIB_trim_CA.xlsx",sheet="Table", skip=5)
# Limpiar nombres de columnas
names(datos_pib)[1]<-"Trimestre"
names(datos_pib)[2:8]<-c("Costa_Rica", "El_Salvador", "Guatemala", "Honduras", "Nicaragua", "Republica_Dominicana", "Panama")
# Filtrar solo filas con datos de trimestres y eliminar filas vacías
datos_pib<-datos_pib[!is.na(datos_pib$Trimestre), ]
datos_pib<-datos_pib[grepl("^[0-9]{4}", datos_pib$Trimestre), ]
# Convertir todas las columnas de países a numérico
for(col in names(datos_pib)[2:8]) {
datos_pib[[col]] <- as.numeric(datos_pib[[col]])
}
# Convertir a formato largo para facilitar el análisis
datos_largo<-datos_pib %>%
pivot_longer(cols = -Trimestre, names_to = "Pais", values_to = "PIB") %>%
filter(!is.na(PIB))
# Extraer año del trimestre
datos_largo<-datos_largo %>%
mutate(Anio = as.numeric(substr(Trimestre, 1, 4)))Aplique el filtro HP para cada uno de los países de Centroamérica, para los periodos disponibles para cada país
aplicar_hp_pais<-function(datos_pais, nombre_pais) {
# Ordenar por año
datos_pais <- datos_pais %>% arrange(Anio)
# Crear serie temporal
pib_ts <- ts(datos_pais$PIB, start = min(datos_pais$Anio), frequency = 4)
# Aplicar filtro HP
hp_result <- hpfilter(pib_ts, freq = 1600)
return(list(
pais = nombre_pais,
datos = datos_pais,
hp_result = hp_result,
pib_ts = pib_ts
))
}# Lista para almacenar resultados
resultados_hp <- list()
# Países a analizar
paises <- unique(datos_largo$Pais)
for(pais in paises) {
datos_pais <- datos_largo %>%
filter(Pais == pais) %>%
filter(!is.na(PIB))
if(nrow(datos_pais) > 8) { # Mínimo de observaciones para aplicar HP
resultados_hp[[pais]] <- aplicar_hp_pais(datos_pais, pais)
}
}# Función para gráfico personalizado
grafico_hp_personalizado <- function(resultado) {
pais <- resultado$pais
pib_ts <- resultado$pib_ts
hp_result <- resultado$hp_result
# Crear datos para ggplot
datos_plot <- data.frame(
Tiempo = time(pib_ts),
PIB_Original = as.numeric(pib_ts),
Tendencia_HP = as.numeric(hp_result$trend),
Componente_Ciclico = as.numeric(hp_result$cycle)
)
# Gráfico 1: PIB Original vs Tendencia HP
p1 <- ggplot(datos_plot, aes(x = Tiempo)) +
geom_line(aes(y = PIB_Original, color = "PIB Original"), linewidth = 1) +
geom_line(aes(y = Tendencia_HP, color = "Tendencia HP"), linewidth = 1, linetype = "dashed") +
scale_color_manual(values = c("PIB Original" = "black", "Tendencia HP" = "red")) +
labs(title = paste("Filtro HP -", pais),
subtitle = paste("Periodo:", min(floor(datos_plot$Tiempo)), "-", max(floor(datos_plot$Tiempo))),
x = "Anio", y = "PIB", color = "") +
theme_minimal() +
theme(legend.position = "top")
# Gráfico 2: Componente Cíclico
p2 <- ggplot(datos_plot, aes(x = Tiempo, y = Componente_Ciclico)) +
geom_line(color = "blue", linewidth = 1) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray") +
labs(title = paste("Componente Ciclico -", pais),
x = "Anio", y = "Desviacion del Ciclo") +
theme_minimal()
return(list(grafico_tendencia = p1, grafico_ciclo = p2))
}## Graficos de: El_Salvador
## Graficos de: Costa_Rica
## Graficos de: Republica_Dominicana
## Graficos de: Panama
## Graficos de: Honduras
## Graficos de: Guatemala
## Graficos de: Nicaragua
for(pais in names(resultados_hp)) {
cat("\nGráfico rápido de:", pais, "\n")
# Gráfico rápido del filtro HP
plot(resultados_hp[[pais]]$hp_result)
# Título agregado después
title(main = paste("Filtro HP -", pais, "(Representación rápida)"))
}##
## Gráfico rápido de: El_Salvador
##
## Gráfico rápido de: Costa_Rica
##
## Gráfico rápido de: Republica_Dominicana
##
## Gráfico rápido de: Panama
##
## Gráfico rápido de: Honduras
##
## Gráfico rápido de: Guatemala
##
## Gráfico rápido de: Nicaragua