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().
## 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()
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.
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.
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.
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)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. —
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)
)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.
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.
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.
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.
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.
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_resumenLa 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)")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:
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.
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.
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)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.
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.