1. Selección y preparación del conjunto de datos

Selección del dataset

Para este análisis trabajaremos con el conjunto de datos aus_retail, que está disponible en el paquete fpp3.
Este dataset contiene información mensual sobre el volumen de ventas minoristas en diferentes regiones de Australia, por lo que tiene una columna de tipo fecha (Month) y varias variables cuantitativas como el gasto o volumen de ventas (Turnover).
El conjunto de datos aus_retail ya está en formato tsibble, lo cual es útil porque este tipo de estructura se diseñó especialmente para manejar series de tiempo en R. En caso de que no lo estuviera, habríamos tenido que convertirlo con la función as_tsibble().

library(fpp3)
## Registered S3 method overwritten by 'tsibble':
##   method               from 
##   as_tibble.grouped_df dplyr
## ── Attaching packages ──────────────────────────────────────────── fpp3 1.0.2 ──
## ✔ tibble      3.2.1     ✔ tsibble     1.1.6
## ✔ dplyr       1.1.4     ✔ tsibbledata 0.4.1
## ✔ tidyr       1.3.1     ✔ feasts      0.4.2
## ✔ lubridate   1.9.4     ✔ fable       0.4.1
## ✔ ggplot2     4.0.0
## ── Conflicts ───────────────────────────────────────────────── fpp3_conflicts ──
## ✖ lubridate::date()    masks base::date()
## ✖ dplyr::filter()      masks stats::filter()
## ✖ tsibble::intersect() masks base::intersect()
## ✖ tsibble::interval()  masks lubridate::interval()
## ✖ dplyr::lag()         masks stats::lag()
## ✖ tsibble::setdiff()   masks base::setdiff()
## ✖ tsibble::union()     masks base::union()
datos <- aus_retail
datos

1.2 Selección de columnas relevantes

Ahora usamos la función select() para quedarnos únicamente con las variables que vamos a analizar:

Month → la columna de fechas (índice temporal).

Turnover → nuestra variable principal de análisis (ventas minoristas).

State → una variable categórica que nos permitirá comparar resultados según la región.

1.3 Justificación de la selección

Elegimos estas tres columnas porque:

La columna Month nos permite ordenar y analizar la evolución temporal de la serie.

La columna Turnover será nuestra variable principal de estudio, ya que muestra el comportamiento de las ventas minoristas.

La columna State nos da un contexto adicional para diferenciar los resultados entre distintas regiones de Australia, lo cual puede enriquecer el análisis.

De esta manera simplificamos el dataset, enfocándonos en la información más importante para el análisis de series de tiempo.

datos <- datos |>
  select(Month, Turnover, State)

head(datos)

2. Generación de variables temporales y derivadas

En esta sección vamos a trabajar con la columna Month (que representa las fechas).
Lo que buscamos es sacarle más información a esa columna, creando variables nuevas como el Año, el Mes y el Trimestre, porque nos van a ayudar a entender mejor la evolución de la serie en el tiempo.

Después de eso, usaremos la función summarise() para calcular promedios y totales, de modo que podamos ver los datos de una manera más resumida y fácil de analizar.


2.1. Mutate

Con la función mutate() agregamos tres nuevas variables: - Anio: para identificar el año de cada registro.
- Mes: para poner el nombre del mes (en texto, no solo el número).
- Trimestre: que nos dice a qué trimestre pertenece (1, 2, 3 o 4).

datos |> 
  mutate(
    Año = year(Month),                            
    Mes = month(Month, label = TRUE, abbr = FALSE),
    Trimestre = quarter(Month)                     
  ) |> 
  select(Month, Año, Mes, Trimestre, State, Turnover) |> 
  as_tsibble(index = Month)

2.2 Summarise

Ahora que ya tenemos la variable del año, podemos resumir los datos agrupándolos por Estado y Año. De esta manera, reducimos la gran cantidad de datos mensuales y nos quedamos con un panorama más claro. —

2.2.1. Explicación

Promedio_Turnover: es el valor promedio de ventas en cada Estado durante un año. Nos sirve para darnos una idea de cuál es el comportamiento típico o normal.

Total_Turnover: es la suma de todas las ventas en ese Estado durante un año. Esto nos ayuda a comparar el nivel de actividad económica entre distintos Estados y ver cuáles tienen más peso en las ventas.

La idea de este paso es que, en lugar de tener datos dispersos mes por mes, ahora tenemos un resumen más fácil de interpretar, lo que facilita identificar patrones y comparaciones entre los Estados a lo largo de los años.

datos |> 
  mutate(
    Año = year(Month),
    Trimestre = quarter(Month)
  ) |> 
  group_by(State, Año) |> 
  summarise(
    Promedio_Turnover = mean(Turnover, na.rm = TRUE),
    Total_Turnover = sum(Turnover, na.rm = TRUE)
  )

3. Filtrado de datos

En esta parte vamos a restringir el intervalo de tiempo de nuestra serie de datos.
El objetivo es enfocarnos en un rango específico que sea razonable (ni muy corto ni demasiado largo).

Elegí trabajar con el periodo 2005 a 2015 porque son 11 años:
- Es suficiente tiempo para ver la evolución y los cambios.
- No es tan largo como para que la serie se vea saturada.
- Nos permite analizar con calma las tendencias y estacionalidades sin distraernos con toda la serie histórica.


3.1. Aplicando filter()

Con la función filter() vamos a seleccionar solo las observaciones entre enero de 2005 y diciembre de 2015.

library(lubridate)

datos_filtrados <- datos |> 
  filter(Month >= yearmonth("2005 Jan"), 
         Month <= yearmonth("2015 Dec"))

datos_filtrados

3.2. Justificación del periodo seleccionado

El rango de 2005 a 2015 fue escogido porque:

Permite analizar un lapso lo suficientemente amplio (más de una década).

Incluye variaciones económicas y cambios de tendencia que enriquecen el análisis.

A nivel académico, trabajar con un periodo intermedio nos ayuda a practicar el uso de funciones sin sobrecargar las tablas o los gráficos.

En conclusión, este rango de tiempo nos da un equilibrio entre cantidad de información y claridad en el análisis.

4. Agrupamiento y resumen estadístico

En esta sección vamos a resumir los datos agrupándolos por año.
De esta forma, podemos observar cómo se comporta la variable principal de análisis (en nuestro caso, el Cost, que representa el costo de ventas de medicamentos) en cada año.


4.1. Agrupar por periodo temporal con group_by()

Primero agrupamos los datos por año, utilizando la columna de fecha Month. .2. Cálculo de estadísticas descriptivas

En este caso calculamos:

Promedio anual del costo (mean).

Suma anual del costo (sum).

Esto nos ayuda a ver cómo fue evolucionando el gasto total en medicamentos por año y también cuál fue el costo promedio mensual en cada año.

4.3. Tabla resumen obtenida

La tabla generada (datos_resumen) muestra una fila por cada año del periodo 2005–2015, junto con:

El costo promedio mensual.

El costo total anual.

Así podemos comparar de un año a otro.

4.4. Interpretación de resultados

De manera general, podemos observar que:

El costo total anual va mostrando una tendencia creciente (cada año se gastó más en promedio).

El costo mensual promedio sigue la misma lógica, lo que refleja que no solo hubo más gasto por año, sino que mes a mes el costo también fue aumentando.

Este patrón nos indica que la demanda de medicamentos antidiabéticos (nuestro ejemplo de análisis) ha tenido un crecimiento sostenido en el tiempo, lo cual puede estar relacionado con factores demográficos o de salud pública.

datos_resumen <- datos_filtrados |> 
  mutate(Año = year(Month)) |> 
  group_by(Año) |> 
  summarise(
    promedio_costo = mean(Turnover, na.rm = TRUE),
    suma_costo = sum(Turnover, na.rm = TRUE)
  )

datos_resumen

5. Visualización general de la serie

La serie de ventas minoristas en cafés y restaurantes en New South Wales refleja una dinámica clara y consistente a lo largo del periodo analizado (2005–2019).

En primer lugar, se aprecia una tendencia general creciente, donde los niveles de facturación (medidos en millones de AUD) aumentan de forma sostenida con el paso del tiempo. Este comportamiento puede vincularse con el crecimiento económico de la región, el aumento del consumo en el sector gastronómico y posiblemente con el mayor interés de la población en actividades de ocio y servicios de alimentación fuera del hogar.

En segundo lugar, se identifica una estacionalidad muy marcada: cada año aparecen picos de consumo seguidos de descensos inmediatos. Estos patrones recurrentes suelen coincidir con periodos festivos y vacacionales, donde se incrementa la demanda en cafés y restaurantes.

turnover <- datos |>
  filter(State == "New South Wales",
         Industry == "Cafes, restaurants and catering services") |>
  select(Month, Turnover) |>
  filter(year(Month) >= 2005)

turnover |>
  autoplot(Turnover) +
  labs(y = "Millones AUD",
       title = "Evolución del Turnover en New South Wales (Cafés y Restaurantes)")

6. Análisis de estacionalidad

En este punto vamos a revisar si la serie de Turnover presenta patrones estacionales, es decir, si existen repeticiones en ciertos meses o trimestres de manera sistemática a lo largo de los años.

Primero, seleccionamos un solo estado e industria (para evitar ruido en la gráfica) y luego aplicamos la función gg_season().

Se observa que:

  • Diciembre es siempre el mes con mayor facturación. Esto puede estar relacionado con la época navideña, cuando las personas consumen más en restaurantes y cafés.
  • Enero y febrero suelen ser los meses con menor facturación, lo cual refleja una caída después de las festividades.
  • A lo largo de los años, las líneas son cada vez más altas, lo que significa que el sector ha crecido con el tiempo.
turnover |>
  gg_season(Turnover) +
  labs(y = "Millones AUD",
       title = "Patrones estacionales del Turnover en Cafés y Restaurantes (New South Wales)")
## Warning: `gg_season()` was deprecated in feasts 0.4.2.
## ℹ Please use `ggtime::gg_season()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

7. Interpretación del análisis por subseries

  • Consistencia estacional: cada mes mantiene una forma de comportamiento bastante similar en los diferentes años, lo que confirma la fuerte estacionalidad detectada anteriormente.
  • Meses con mayor gasto: destacan especialmente diciembre y enero, con niveles más altos de facturación, lo cual es coherente con los periodos festivos y vacacionales donde aumenta el consumo en el sector gastronómico.
  • Meses con menor facturación: en contraste, meses como febrero y marzo tienden a ubicarse en niveles más bajos, reflejando un ajuste después del gasto de fin de año.
  • Tendencia ascendente dentro de cada mes: incluso al analizar los mismos meses, se observa que los valores son progresivamente más altos con el paso de los años, lo que reafirma la tendencia de crecimiento sostenido en el sector.
turnover |>
  gg_subseries(Turnover) +
  labs(
    y = "Millones AUD",
    title = "Análisis por subseries del Turnover en Cafés y Restaurantes (New South Wales)"
  )
## Warning: `gg_subseries()` was deprecated in feasts 0.4.2.
## ℹ Please use `ggtime::gg_subseries()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

8. Interpretación del análisis de relaciones entre variables

El análisis de relaciones mediante ggpairs() muestra que el Turnover presenta una fuerte correlación positiva con el Año (corr = 0.931***), lo que confirma la tendencia creciente observada en las visualizaciones previas: a medida que pasan los años, los ingresos del sector de cafés y restaurantes en New South Wales han aumentado de manera sostenida.

En cuanto a la relación con el Mes, se aprecia una correlación más débil pero significativa (corr = 0.198*), lo que refleja la estacionalidad ya identificada, donde ciertos meses (especialmente diciembre y enero) concentran mayores niveles de facturación.

Por otro lado, no se observan correlaciones relevantes entre Año y Mes, lo cual es esperable ya que ambos corresponden a dimensiones temporales independientes.

En conjunto, este análisis confirma que el comportamiento del Turnover depende principalmente de una tendencia temporal de largo plazo (crecimiento año tras año), complementada por fluctuaciones estacionales que se repiten dentro de cada año.

En los histogramas de la diagonal se observa que la variable Turnover presenta una distribución inclinada hacia la derecha, lo que significa que en los primeros años los valores eran menores y que en los años más recientes se alcanzaron cifras mucho más altas. Esto coincide con la tendencia creciente que vimos en los gráficos de la serie. En cambio, las variables Año y Mes tienen distribuciones planas, lo cual es lógico porque los datos abarcan de manera uniforme todos los años y meses del periodo.

En los gráficos de dispersión, la relación entre Turnover y Año muestra una nube de puntos con pendiente ascendente, confirmando un crecimiento sostenido a lo largo del tiempo. La relación entre Turnover y Mes es más difusa, pero deja ver que en algunos meses específicos (como diciembre) se alcanzan valores más altos, lo cual evidencia un comportamiento estacional. Finalmente, la relación entre Año y Mes no presenta una forma particular más allá de la cuadrícula esperada, ya que los meses simplemente se repiten año tras año.

library(GGally)

turnover_pairs <- turnover |>
  mutate(
    Año = year(Month),
    Mes = month(Month)
  ) |>
  as_tibble() |> 
  select(Turnover, Año, Mes)

ggpairs(turnover_pairs)

9. Interpretación global de la serie

La serie de ventas minoristas en cafés y restaurantes en New South Wales (2005–2019) muestra un comportamiento muy claro al combinar tendencia, estacionalidad y fluctuaciones.

Tendencia general:
Los gráficos de línea y de dispersión confirman que existe una tendencia creciente sostenida. Año tras año, el Turnover (facturación en millones de AUD) ha aumentado de manera constante. Esto sugiere un crecimiento del sector gastronómico, probablemente asociado al mayor consumo de servicios fuera del hogar y a factores económicos y sociales.

Comportamientos estacionales:
En los gráficos de estacionalidad (gg_season y gg_subseries) se observa una estacionalidad fuerte y recurrente:
- Diciembre es siempre el mes con mayor facturación, lo cual coincide con la temporada navideña y de vacaciones.
- Enero y febrero suelen mostrar caídas pronunciadas, reflejando un ajuste después del gasto de fin de año.
- Los demás meses muestran oscilaciones regulares, pero mantienen un patrón bastante estable.

Ciclos o fluctuaciones adicionales:
Además de la tendencia y la estacionalidad, se observan picos y caídas más pequeños dentro de ciertos años. Estos movimientos no corresponden a un patrón fijo, por lo que pueden relacionarse con factores coyunturales, como cambios económicos puntuales, variaciones en el turismo o ajustes en los hábitos de consumo.

Relaciones entre variables:
El análisis con ggpairs() muestra una fuerte correlación positiva entre Turnover y Año (0.931*)**, lo que confirma la tendencia creciente. También existe una correlación más débil pero significativa con el Mes (0.198*), lo que representa la estacionalidad identificada. Los histogramas indican que la distribución del Turnover está sesgada hacia la derecha, porque los valores en los últimos años son mucho más altos que al inicio de la serie.


Conclusión final

La serie del Turnover en cafés y restaurantes en New South Wales se caracteriza por:
1. Una tendencia creciente a largo plazo.
2. Una estacionalidad marcada, con máximos en diciembre y mínimos en enero-febrero.