Taller Series de Tiempo

if (!require("pacman")) install.packages("pacman")
pacman::p_load(fpp3, GGally, feasts, tsibble, lubridate, broom, patchwork, ggplot2, dplyr, tidyr)

1. Gráficos de Subseries Estacionales

Enfoque paso a paso:

  1. Cargar el conjunto de datos aus_retail del paquete fpp3
  2. Filtrar la información correspondiente a la industria Clothing retailing y al estado New South Wales
  3. Generar un gráfico de subseries estacionales utilizando la función gg_subseries()
  4. Mejorar la legibilidad del gráfico rotando los textos del eje X y añadiendo un título descriptivo

Solución:

# 1. Cargar el conjunto de datos aus_retail
# 2. Filtrar la información correspondiente a la industria Clothing retailing y al estado New South Wales
clothing_nsw <- aus_retail %>%
  filter(Industry == "Clothing retailing", State == "New South Wales") %>%
  as_tsibble(index = Month)

# 3. Generar un gráfico de subseries estacionales
# 4. Mejorar la legibilidad del gráfico
clothing_nsw %>% gg_subseries(Turnover) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  labs(title = "Subseries estacional: Clothing retailing en New South Wales (Turnover)",
       y = "Turnover", x = "Mes")

Análisis:

El gráfico de subseries estacionales para la industria de ropa en New South Wales muestra patrones estacionales claros:

  1. Patrones estacionales evidenciados: Se observa un pico consistente en diciembre (temporada navideña) y una caída notable en enero y febrero, seguida de una recuperación gradual hacia mediados de año. También hay un segundo pico menos pronunciado alrededor de julio-agosto.

  2. Meses con comportamiento diferente: Diciembre muestra consistentemente los valores más altos del año, mientras que febrero tiende a tener los valores más bajos. Enero también muestra valores bajos, probablemente debido al efecto post-navidad.

  3. Tendencia general: Se observa una tendencia creciente a lo largo de los años, con los valores de todos los meses aumentando gradualmente con el tiempo. Los picos de diciembre se han vuelto más pronunciados en los años más recientes.

2. Gráficos Estacionales (gg_season)

Enfoque paso a paso:

  1. Cargar la base de datos aus_retail del paquete fpp3
  2. Filtrar los datos para la industria Food retailing y el estado Victoria
  3. Utilizar la función gg_season() para visualizar el comportamiento estacional del Turnover
  4. Realizar un análisis interpretativo de la gráfica

Solución:

# 1. Cargar la base de datos aus_retail
# 2. Filtrar los datos para la industria Food retailing y el estado Victoria
food_vic <- aus_retail %>%
  filter(Industry == "Food retailing", State == "Victoria") %>%
  as_tsibble(index = Month)

# 3. Utilizar la función gg_season() para visualizar el comportamiento estacional
food_vic %>% gg_season(Turnover, labels = "right") +
  labs(title = "Patrón estacional de Turnover - Food retailing (Victoria)",
       y = "Turnover", x = "Mes") +
  theme(axis.text.x = element_text(angle = 90))

Análisis:

El gráfico estacional para la industria de alimentos en Victoria revela varios patrones importantes:

  1. Patrones estacionales observados: Hay un patrón estacional claro con un pico pronunciado en diciembre (temporada navideña). También se observa un ligero aumento en marzo-abril (probablemente relacionado con la Semana Santa) y otro aumento menor en septiembre-octubre.

  2. Meses con comportamiento atípico: Diciembre muestra consistentemente los valores más altos del año, con un aumento significativo respecto a noviembre. Hay una caída pronunciada de diciembre a enero cada año. Los meses de invierno (junio-agosto) muestran valores relativamente estables.

  3. Implicaciones para planificación: Esta información es crucial para la gestión de inventarios y promociones. Se debería aumentar el inventario antes de diciembre para satisfacer la demanda navideña. Las promociones podrían enfocarse en enero-febrero para estimular las ventas en meses bajos. Las campañas de marzo-abril podrían aprovechar el ligero repunte natural de esas fechas.

3. Diagrama de dispersión

Enfoque paso a paso:

  1. Filtrar el dataset para quedarse solo con las observaciones correspondientes a Victoria y la industria Supermarket and grocery stores
  2. Construir un diagrama de dispersión (scatter plot) del Turnover en función del tiempo (Month)
  3. Analizar los patrones visualizados

Solución:

# 1. Filtrar el dataset para Victoria y la industria Supermarket and grocery stores
supermarket_vic_ts <- aus_retail %>%
  filter(State == "Victoria", Industry == "Supermarket and grocery stores") %>%
  as_tsibble(index = Month)

# 2. Construir un diagrama de dispersión
autoplot(supermarket_vic_ts, Turnover) +
  geom_point() + 
  labs(title = "Scatter: Turnover en Supermarkets (Victoria)", x = "Mes", y = "Turnover") +
  theme(axis.text.x = element_text(angle = 90))

Análisis:

El diagrama de dispersión de ventas en supermercados de Victoria muestra varios patrones importantes:

  1. Patrones visualizados: Se observa una clara tendencia creciente a lo largo del tiempo, con una variabilidad estacional que se repite cada año. La dispersión de los puntos aumenta con el tiempo, indicando mayor volatilidad en valores más altos.

  2. Tendencia y estacionalidad: La tendencia es claramente creciente, con un aumento sostenido de las ventas. Se evidencia estacionalidad con picos que parecen repetirse en períodos similares cada año. Los valores más altos parecen concentrarse en ciertos meses del año.

  3. Anomalías o puntos atípicos: No se observan puntos atípicos claros que se desvíen significativamente del patrón general. Hay algunos puntos con valores más bajos que podrían corresponder a meses específicos (probablemente febrero), pero en general la dispersión parece consistente con el comportamiento esperado de ventas minoristas.

4. Coeficiente de Correlación

Enfoque paso a paso:

  1. Filtrar los datos de ventas para las industrias Clothing retailing y Food retailing en el estado de Victoria
  2. Preparar las series temporales para cada industria, asegurándose de que estén alineadas temporalmente
  3. Calcular el coeficiente de correlación entre las dos series de ventas
  4. Realizar un diagrama de dispersión entre las ventas de ambas industrias
  5. Analizar los resultados

Solución:

# 1. Filtrar los datos para las industrias Clothing retailing y Food retailing en Victoria
clothing_vic <- aus_retail %>%
  filter(State == "Victoria", Industry == "Clothing retailing") %>%
  select(Month, Turnover) %>%
  rename(Turnover_Clothing = Turnover)

food_vic2 <- aus_retail %>%
  filter(State == "Victoria", Industry == "Food retailing") %>%
  select(Month, Turnover) %>%
  rename(Turnover_Food = Turnover)

# 2. Preparar las series temporales alineadas temporalmente
# 3. Calcular el coeficiente de correlación
corr_join <- left_join(clothing_vic, food_vic2, by = "Month") %>% drop_na()
corr_value <- cor(corr_join$Turnover_Clothing, corr_join$Turnover_Food)
corr_value
## [1] 0.9284541
# 4. Realizar un diagrama de dispersión
ggplot(corr_join, aes(x = Turnover_Clothing, y = Turnover_Food)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  labs(title = paste("Correlación (Pearson) =", round(corr_value, 3)),
       x = "Turnover Clothing (Victoria)", y = "Turnover Food (Victoria)")

Análisis:

El coeficiente de correlación entre las ventas de las industrias de ropa y alimentos en Victoria es de aproximadamente 0.928.

  1. Interpretación del coeficiente: Este valor indica una correlación positiva moderada entre las dos industrias. Cuando aumentan las ventas de una industria, también tienden a aumentar las de la otra, aunque no de manera perfecta.

  2. Naturaleza de la correlación: La correlación es positiva (ambas industrias tienden a moverse en la misma dirección) y de fuerza moderada (no es extremadamente fuerte pero sí significativa).

  3. Conclusiones para la toma de decisiones: Esta correlación sugiere que factores económicos comunes afectan a ambas industrias, como el poder adquisitivo de los consumidores o condiciones económicas generales. Esta información puede ser útil para pronosticar ventas basándose en el comportamiento de industrias relacionadas. Las estrategias de marketing podrían coordinarse entre industrias con alta correlación para maximizar el impacto.

5. Matriz de Correlaciones

Enfoque paso a paso:

  1. Filtrar los datos de la base aus_retail para el estado de Victoria y las industrias mencionadas
  2. Transformar los datos para que cada columna corresponda a una industria con su respectivo Turnover mensual
  3. Convertir todas las columnas a variables numéricas y eliminar filas con valores faltantes
  4. Utilizar la función ggpairs() para construir y visualizar la matriz de correlación
  5. Interpretar la matriz de correlación

Solución:

# 1. Filtrar los datos para el estado de Victoria y las industrias mencionadas
industries <- c("Clothing retailing", "Food retailing",
                "Hardware, building and garden supplies retailing",
                "Household goods retailing", "Liquor retailing")

# 2. Transformar los datos para que cada columna corresponda a una industria
# 3. Convertir todas las columnas a variables numéricas y eliminar filas con valores faltantes
vic_industries <- aus_retail %>%
  filter(State == "Victoria", Industry %in% industries) %>%
  select(Month, Industry, Turnover) %>%
  pivot_wider(names_from = Industry, values_from = Turnover) %>%
  arrange(Month) %>%
  select(-Month) %>%
  mutate(across(everything(), as.numeric)) %>%
  drop_na()

# 4. Construir la matriz de correlación
GGally::ggpairs(vic_industries)

Análisis:

La matriz de correlación entre las diferentes industrias minoristas en Victoria revela varias relaciones importantes:

  1. Industrias con mayor correlación positiva:
    • Food retailing y Supermarket and grocery stores (no incluido en el análisis pero sería la correlación más alta)
    • Household goods retailing y Hardware, building and garden supplies retailing muestran una correlación positiva moderada-alta
    • Clothing retailing muestra correlaciones positivas moderadas con varias otras industrias
  2. Industrias con relaciones más débiles o negativas:
    • Liquor retailing tiende a mostrar correlaciones más débiles con las otras industrias
    • No se observan correlaciones negativas fuertes entre las industrias analizadas
  3. Importancia de conocer estas relaciones:
    • Permite identificar industrias que se comportan de manera similar ante factores económicos
    • Ayuda a diversificar riesgos al entender qué industrias son más independientes
    • Facilita la creación de índices compuestos que representen el comportamiento general del retail
    • Proporciona información para pronósticos más precisos utilizando variables correlacionadas

6. Tendencia y estacionalidad en ACF- Supermarkets Victoria

Enfoque paso a paso:

  1. Cargar la serie temporal supermarket_vic_ts con la variable Turnover de supermercados en Victoria
  2. Graficar la función de autocorrelación (ACF) de la variable Turnover
  3. Realizar el análisis interpretativo de los resultados

Solución:

# 1. Cargar la serie temporal supermarket_vic_ts (ya cargada en el ejercicio 3)
# 2. Graficar la función de autocorrelación (ACF)
supermarket_vic_ts %>%
  ACF(Turnover) %>%
  autoplot() +
  labs(title = "ACF - Turnover Supermarket (Victoria)")

Análisis:

La función de autocorrelación para las ventas de supermercados en Victoria muestra varios patrones importantes:

  1. ¿Cómo se manifiesta la tendencia en la gráfica de ACF?: Los valores de la ACF decrecen lentamente, lo que indica una fuerte dependencia temporal. Los primeros rezagos muestran correlaciones muy altas (>0.8), indicando persistencia en la serie. Esta persistencia sugiere que los valores actuales están fuertemente influenciados por valores pasados.

  2. ¿Qué evidencia en la ACF indicar´ıa que existe estacionalidad?: Se observan picos en los rezagos múltiplos de 12 (12, 24, 36, 48), indicando estacionalidad anual. El patrón estacional es claro y consistente a lo largo de los años. La fuerza de la estacionalidad parece mantenerse relativamente constante en el tiempo.

  3. ¿Qué diferencia existe en la forma de decaimiento de la ACF entre una serie con tendencia y una con estacionalidad?: El decaimiento lento de la ACF sugiere la presencia de tendencia en la serie. La persistencia de correlaciones positivas incluso en rezagos altos indica no estacionariedad. Para modelar adecuadamente esta serie, sería necesario diferenciarla para eliminar la tendencia y posiblemente aplicar diferenciación estacional.

7. ACF extendida (lag_max = 60)

Enfoque paso a paso:

  1. Utilizando la serie temporal supermarket_vic_ts, generar la función de autocorrelación (ACF) con un número mayor de rezagos
  2. Analizar los patrones que se observan y explicar cómo identificar en la gráfica la presencia de tendencia y estacionalidad

Solución:

# 1. Generar la función de autocorrelación con más rezagos
supermarket_vic_ts %>%
  ACF(Turnover, lag_max = 60) %>%
  autoplot() +
  labs(title = "ACF extendida (hasta lag 60) - Supermarket (Victoria)")

Análisis:

La función de autocorrelación extendida con más rezagos permite identificar más claramente los patrones de tendencia y estacionalidad:

  1. Manifestación de la tendencia: La tendencia se manifiesta como un decaimiento muy lento de la autocorrelación. Los valores de ACF permanecen positivos y altos incluso para rezagos grandes. Este patrón de decaimiento lento es característico de series con tendencia. La tendencia indica que la serie no es estacionaria en media.

  2. Evidencia de estacionalidad: La estacionalidad se evidencia por picos repetitivos en intervalos regulares. Se observan picos claros en los rezagos 12, 24, 36, 48, 60. Estos picos corresponden a un patrón estacional anual (12 meses). La altura de los picos estacionales disminuye lentamente con el tiempo, pero permanece significativa.

  3. Diferencia en el decaimiento: En una serie con tendencia, la ACF decae lentamente de forma continua. En una serie con estacionalidad, la ACF muestra picos en los rezagos estacionales. Una serie con ambos componentes (como esta) muestra un decaimiento lento con picos estacionales superpuestos. Para modelar esta serie, se necesitaría diferenciar para eliminar la tendencia y posiblemente aplicar diferenciación estacional.

8. Gráficos de Rezagos (Lag Plots) trimestrales

Enfoque paso a paso:

  1. Utilizar el conjunto de datos aus_retail
  2. Filtrar únicamente la industria Supermarket and grocery stores en el estado Victoria
  3. Agrupar los datos por trimestre, a partir de la variable Month
  4. Sumar el Turnover trimestralmente para obtener una serie temporal trimestral(supermarket vic qtr).
  5. Graficar los rezagos del Turnover desde el lag 1 hasta el lag 9, usando gg_lag() con puntos
  6. Analizar los patrones observados

Solución:

# 1. Utilizar el conjunto de datos aus_retail
# 2. Filtrar la industria Supermarket and grocery stores en el estado Victoria
# 3. Agrupar los datos por trimestre
# 4. Sumar el Turnover trimestralmente
supermarket_vic_qtr <- aus_retail %>%
  filter(State == "Victoria", Industry == "Supermarket and grocery stores") %>%
  index_by(Quarter = yearquarter(Month)) %>%
  summarise(Turnover = sum(Turnover)) %>%
  as_tsibble(index = Quarter)

# 5. Graficar los rezagos del Turnover desde el lag 1 hasta el lag 9
supermarket_vic_qtr %>% gg_lag(Turnover, geom = "point", lags = 1:9) +
  labs(title = "Lag plots (lags 1-9) - Turnover trimestral Supermarkets (Victoria)")

Análisis:

Los gráficos de rezagos para las ventas trimestrales de supermercados en Victoria revelan varios patrones importantes:

  1. Patrones evidenciados en los rezagos: Los gráficos de rezagos muestran una fuerte correlación positiva, especialmente en los primeros rezagos. Los puntos en los gráficos de rezagos bajos (1-4) forman patrones lineales claros con pendiente positiva. A medida que aumenta el rezago, la dispersión de los puntos aumenta, indicando menor correlación. Los gráficos de rezagos más altos (7-9) muestran una correlación más débil pero aún positiva.

  2. Dependencia temporal: La fuerte correlación en rezagos bajos indica alta persistencia en la serie. La estructura autocorrelacional decae gradualmente con el tiempo, pero permanece positiva. Esta estructura sugiere que los valores actuales están fuertemente influenciados por valores pasados recientes. La persistencia de correlaciones positivas incluso en rezagos altos indica tendencia en la serie.

  3. Inferencia de estacionalidad o ciclos: No se observa un patrón estacional claro en los gráficos de rezagos trimestrales. Esto podría deberse a que al agregar datos mensuales a trimestrales, se suaviza el patrón estacional mensual. Si existiera estacionalidad trimestral, esperaríamos ver patrones específicos en los rezagos 4, 8, etc. La falta de patrones estacionales claros sugiere que la estacionalidad podría ser mensual más que trimestral.

  4. Comparación con otras series: Comparado con series de la industria textil, los patrones aquí son más consistentes y menos dispersos. La correlación en rezagos altos es más fuerte que en series más volátiles como la de pasajeros. Esto sugiere que las ventas de supermercados son más predecibles y muestran menor variabilidad estacional.

9. Ruido Blanco simulado

Enfoque paso a paso:

  1. Generar una serie temporal simulada de 100 observaciones que represente un proceso de ruido blanco
  2. Crear un objeto tipo tsibble con esta serie, con una variable de tiempo secuencial
  3. Graficar la serie temporal con autoplot
  4. Calcular y graficar la función de autocorrelación (ACF) para esta serie
  5. Analizar e interpretar los resultados

Solución:

# 1. Generar una serie temporal simulada de 100 observaciones de ruido blanco
set.seed(123)
wn <- tibble(
  Month = yearmonth(seq.Date(from = as.Date("2000-01-01"), by = "month", length.out = 100)),
  value = rnorm(100, mean = 0, sd = 1)
) %>%
  as_tsibble(index = Month) %>%
  fill_gaps()

# 3. Graficar la serie temporal
autoplot(wn, value) + 
  labs(title = "Serie simulada: Ruido blanco", y = "Valor", x = "Tiempo")

# 4. Calcular y graficar la función de autocorrelación (ACF)
wn %>% ACF(value) %>% autoplot() + 
  labs(title = "ACF - Ruido blanco (sin gaps)")

Análisis:

El análisis de la serie de ruido blanco simulada revela las siguientes características:

  1. ¿Qué caracteriza a una serie de ruido blanco?:
    • Media constante (generalmente cero)
    • Varianza constante a lo largo del tiempo
    • Sin autocorrelación entre observaciones en diferentes rezagos
    • Las observaciones son independientes e idénticamente distribuidas
  2. Reflexión en la gráfica de la serie:
    • La serie muestra fluctuaciones aleatorias alrededor de la media (cero)
    • No hay patrones evidentes de tendencia o estacionalidad
    • La variabilidad parece constante a lo largo del tiempo
    • No hay valores que se desvíen sistemáticamente de los demás
  3. Reflexión en la gráfica de ACF:
    • La mayoría de los valores de ACF están dentro de las bandas de significancia (líneas azules)
    • No hay autocorrelaciones significativas en ningún rezago
    • Los valores de ACF fluctúan aleatoriamente alrededor de cero
    • Esto confirma que no hay dependencia temporal entre las observaciones
  4. ¿Qu´e esperar´ıas observar en la autocorrelaci ´on si es ruido blanco?:
    • Se espera que todos los valores de ACF estén cerca de cero
    • Aproximadamente el 5% de los valores pueden estar fuera de las bandas de significancia por azar
    • No debería haber patrones sistemáticos en los valores de ACF
    • La serie de ruido blanco sirve como referencia para evaluar si otras series tienen patrones significativos

10. Transformaciones y ajuste por inflación

Enfoque paso a paso:

  1. Cargar la base de datos global_economy desde el paquete fpp3
  2. Filtrar la información correspondiente al país United States
  3. Generar un gráfico de línea que represente la evolución del PIB per cápita
  4. Desde la base de datos aus_retail, filtrar la industria Clothing retailing
  5. Agrupar los datos por año y calcular el turnover anual
  6. Realizar un cruce con la información de global_economy, específicamente con la economía de Australia
  7. Ajustar el turnover anual por inflación utilizando el CPI
  8. Representar en un gráfico ambos valores: el turnover original y el ajustado
  9. Analizar los resultados

Solución:

# 1. Cargar la base de datos global_economy
# 2. Filtrar la información correspondiente al país United States
# 3. Generar un gráfico de línea del PIB per cápita
us_g <- global_economy %>% filter(Country == "United States") %>% mutate(gdp_per_capita = GDP / Population)
autoplot(us_g, gdp_per_capita) + labs(title = "PIB per cápita - United States", y = "PIB per cápita")

# 4. Filtrar la industria Clothing retailing de aus_retail
# 5. Agrupar los datos por año y calcular el turnover anual
clothing_aust <- aus_retail %>%
  filter(Industry == "Clothing retailing") %>%
  index_by(Year = year(Month)) %>%
  summarise(Annual_Turnover = sum(Turnover))

# 6. Realizar un cruce con la información de global_economy para Australia
aust_econ <- global_economy %>% filter(Country == "Australia") %>% select(Year, CPI)

# 7. Ajustar el turnover anual por inflación
clothing_aust2 <- left_join(clothing_aust, aust_econ, by = "Year") %>% drop_na() %>%
  mutate(Adjusted = Annual_Turnover / (CPI / first(CPI)))

# 8. Representar en un gráfico ambos valores
ggplot(clothing_aust2, aes(x = Year)) +
  geom_line(aes(y = Annual_Turnover, color = "Original"), linetype = "dashed") +
  geom_line(aes(y = Adjusted, color = "Ajustado por inflación")) +
  labs(title = "Turnover anual - Clothing (Australia): original vs ajustado por CPI",
       y = "Turnover (moneda local)", x = "Año", color = "Serie") +
  scale_color_manual(values = c("Original" = "blue", "Ajustado por inflación" = "red"))

Análisis:

El análisis del PIB per cápita y las ventas ajustadas por inflación revela información importante:

  1. Utilidad de representar el PIB en términos per cápita:
    • Permite comparar el bienestar económico entre países de diferente tamaño
    • Refleja mejor el nivel de vida promedio de la población
    • Elimina el efecto del crecimiento poblacional en el análisis económico
    • Facilita la comparación temporal del desarrollo económico real
  2. Diferencias observadas entre PIB per cápita y PIB bruto:
    • El PIB per cápita muestra fluctuaciones más suaves que el PIB bruto
    • Mientras el PIB bruto siempre crece, el PIB per cápita puede estancarse o incluso disminuir
    • El PIB per cápita refleja mejor el impacto de crisis económicas en el bienestar individual
    • Las tasas de crecimiento del PIB per cápita suelen ser menores que las del PIB bruto
  3. Importancia de ajustar valores económicos por inflación:
    • Permite comparar valores reales a lo largo del tiempo
    • Elimina el efecto del aumento general de precios en las mediciones económicas
    • Refleja el poder adquisitivo real de los montos nominales
    • Es esencial para análisis económicos precisos y comparaciones temporales válidas
  4. Diferencias entre valores ajustados y no ajustados:
    • El turnover ajustado por inflación muestra un crecimiento más moderado que el nominal
    • En períodos de alta inflación, la diferencia entre ambos valores es más pronunciada
    • El turnover ajustado refleja mejor el cambio real en el volumen de ventas
    • En algunos años, el crecimiento nominal puede ocultar una disminución en ventas reales
  5. Conclusiones sobre la evolución económica y el consumo:
    • La economía de Estados Unidos muestra un crecimiento sostenido del PIB per cápita
    • El consumo en la industria de la ropa en Australia ha crecido en términos reales
    • Hay períodos de desaceleración económica que se reflejan en ambos indicadores
    • El ajuste por inflación revela que el crecimiento del consumo ha sido más modesto de lo que sugieren los valores nominales

11. Transformaciones matemáticas

Enfoque paso a paso:

  1. Filtrar la base de datos para obtener únicamente los datos de Victoria y Clothing retailing
  2. Crear una nueva tsibble con las siguientes columnas: sqrt_turnover, log_turnover, inv_turnover
  3. Generar y presentar los gráficos de la serie original y las series transformadas
  4. Analizar cuál transformación permite visualizar mejor la tendencia, estabiliza mejor la varianza, y si alguna distorsiona la estructura de la serie

Solución:

# 1. Filtrar la base de datos para Victoria y Clothing retailing
# 2. Crear una nueva tsibble con transformaciones
clothing_vic_full <- aus_retail %>%
  filter(State == "Victoria", Industry == "Clothing retailing") %>%
  as_tsibble(index = Month) %>%
  mutate(sqrt_turnover = sqrt(Turnover),
         log_turnover = log(Turnover),
         inv_turnover = 1 / Turnover)

# 3. Generar gráficos de la serie original y las transformaciones
p1 <- autoplot(clothing_vic_full, Turnover) + labs(title = "Original")
p2 <- autoplot(clothing_vic_full, sqrt_turnover) + labs(title = "Raíz cuadrada")
p3 <- autoplot(clothing_vic_full, log_turnover) + labs(title = "Logaritmo")
p4 <- autoplot(clothing_vic_full, inv_turnover) + labs(title = "Inversa")

(p1 / p2) | (p3 / p4)

Análisis:

El análisis de las transformaciones matemáticas aplicadas a la serie de ventas de ropa en Victoria revela lo siguiente:

  1. Transformación que permite visualizar mejor la tendencia:
    • La transformación logarítmica permite visualizar mejor la tendencia de largo plazo
    • Esta transformación reduce el impacto de valores extremos y hace más lineal la tendencia
    • La transformación de raíz cuadrada también ayuda, pero en menor medida
    • La transformación inversa distorsiona la tendencia, haciéndola decreciente
  2. Transformación que estabiliza mejor la varianza:
    • La transformación logarítmica es la que mejor estabiliza la varianza
    • Se observa que la amplitud de las fluctuaciones estacionales se vuelve más constante
    • La transformación de raíz cuadrada también estabiliza la varianza, pero menos efectivamente
    • La transformación inversa amplifica la varianza en valores bajos, no estabilizándola
  3. Transformaciones que distorsionan la estructura:
    • La transformación inversa distorsiona significativamente la estructura de la serie
    • Invierte la dirección de la tendencia y amplifica las fluctuaciones en valores bajos
    • La transformación logarítmica y de raíz cuadrada preservan mejor la estructura original
    • Sin embargo, la transformación logarítmica puede comprimir las diferencias en valores altos
  4. Recomendaciones:
    • Para análisis de tendencia, la transformación logarítmica es la más adecuada
    • Para modelado que requiera varianza constante, la transformación logarítmica también es preferible
    • La transformación de raíz cuadrada puede ser útil cuando se desea una transformación menos drástica
    • La transformación inversa no se recomienda para este tipo de datos económicos

12. Transformación Box-Cox

Enfoque paso a paso:

  1. Cargar la base de datos aus_retail del paquete fpp3
  2. Filtrar los datos correspondientes al estado de Victoria y la industria Hardware, building and garden supplies retailing
  3. Seleccionar las variables Month y Turnover
  4. Generar un gráfico de la serie original utilizando autoplot()
  5. Calcular el valor óptimo de lambda (λ) para la transformación Box-Cox utilizando la función features(…, features = guerrero)
  6. Aplicar la transformación Box-Cox con el valor de lambda obtenido
  7. Generar un gráfico de la serie transformada para compararla con la original
  8. Analizar los resultados

Solución:

# 1. Cargar la base de datos aus_retail
# 2. Filtrar los datos para Victoria y la industria Hardware, building and garden supplies retailing
# 3. Seleccionar las variables Month y Turnover
hardware_vic <- aus_retail %>%
  filter(State == "Victoria", Industry == "Hardware, building and garden supplies retailing") %>%
  as_tsibble(index = Month) %>% select(Month, Turnover)

# 4. Generar un gráfico de la serie original
autoplot(hardware_vic, Turnover) + labs(title = "Original: Hardware - Victoria")

# 5. Calcular el valor óptimo de lambda para la transformación Box-Cox
lambda <- hardware_vic %>% features(Turnover, features = guerrero) %>% pull(lambda_guerrero)
lambda
## [1] 0.5542454
# 6. Aplicar la transformación Box-Cox
hardware_vic <- hardware_vic %>% mutate(Turnover_boxcox = box_cox(Turnover, lambda))

# 7. Generar un gráfico de la serie transformada
autoplot(hardware_vic, Turnover_boxcox) + labs(title = paste("Transformada Box-Cox (lambda =", round(lambda,3), ")"))

Análisis:

El análisis de la transformación Box-Cox aplicada a ventas de hardware en Victoria revela lo siguiente:

  1. Ventajas de la transformación Box-Cox:
    • Es una familia de transformaciones que incluye logaritmo, raíz cuadrada y otras como casos especiales
    • Permite encontrar el valor óptimo de lambda que mejor estabiliza la varianza
    • Es más flexible que transformaciones fijas como logaritmo o raíz cuadrada
    • Puede adaptarse a diferentes tipos de datos y patrones de varianza
  2. Interpretación del valor de λ obtenido: El valor óptimo de lambda es 0.554.
    • Si λ = 0, la transformación logarítmica es la óptima
    • Si λ = 0.5, la transformación de raíz cuadrada es la óptima
    • Si λ = 1, no se necesita transformación
    • Si 0 < λ < 1, indica una transformación intermedia entre logaritmo e identidad
    • Un valor más cercano a 0 sugiere mayor necesidad de compresión de valores altos
  3. Cambios visuales observados:
    • La varianza de la serie se vuelve más constante a lo largo del tiempo
    • Las fluctuaciones estacionales parecen más proporcionales en toda la serie
    • La tendencia se visualiza de manera más lineal después de la transformación
    • Los valores extremos son menos pronunciados, lo que facilita el modelado
  4. Implicaciones para el análisis de series temporales:
    • La transformación Box-Cox facilita el cumplimiento de supuestos de modelos como ARIMA
    • Mejora la precisión de pronósticos al estabilizar la varianza
    • Es particularmente útil cuando la varianza crece con el nivel de la serie
    • Después del modelado, se debe aplicar la transformación inversa para interpretar los resultados

Conclusión

En este taller hemos explorado diversas técnicas para el análisis de series temporales utilizando R y el paquete fpp3. Los principales aprendizajes incluyen:

  1. Visualización de patrones estacionales: Las herramientas como gg_subseries() y gg_season() permiten identificar patrones recurrentes en los datos, fundamentales para entender la estacionalidad.

  2. Análisis de correlaciones: El estudio de correlaciones entre diferentes industrias y entre valores rezagados de una misma serie proporciona información valiosa sobre las relaciones temporales.

  3. Autocorrelación: La función de autocorrelación (ACF) es una herramienta poderosa para identificar patrones de dependencia temporal, tendencia y estacionalidad.

  4. Transformaciones de datos: Las transformaciones matemáticas y Box-Cox son esenciales para estabilizar la varianza y hacer que los datos cumplan con los supuestos necesarios para muchos modelos estadísticos.

  5. Ajustes económicos: El ajuste por inflación y la normalización por población son cruciales para realizar comparaciones temporales válidas y entender el comportamiento real de las variables económicas.

Estas técnicas constituyen la base para un análisis riguroso de series temporales y son fundamentales para desarrollar modelos de pronóstico precisos y tomar decisiones informadas basadas en datos históricos.