Graficos de subseries estacionales (gg_subseries).

library(fpp3)
library(GGally)
aus_retail
ropa_nsw <- aus_retail |>
  filter(Industry == "Clothing retailing", State == "New South Wales")
ropa_nsw |>
  gg_subseries(Turnover) +
  labs(title = "Ventas minoristas de ropa en New South Wales", y = "Turnover", x = "Mes")


  1. ¿Qué patrones estacionales se evidencian a lo largo del período observado?

En el grafico se nota que las ventas suben mucho en diciembre todos los años, lo que tiene sentido por la temporada navideña. Despues, en enero y febrero las ventas bajan bastante, probablemente porque ya paso la epoca de mas consumo. El resto del año se mantiene mas o menos estable sin muchos cambios grandes

  1. Existen meses que se comporten diferente frente a los demas?

Si, claramente diciembre es el mes con mas ventas y enero y febrero los mas bajos. Los demas meses se ven parecidos entre si, sin subidas ni bajadas tan marcadas. En resumen, esos tres meses son los que mas destacan cada año.

  1. Se puede identificar alguna tendencia general (creciente o decreciente) dentro de los patrones mensuales?

Si, aunque las ventas suben y bajan cada año, en general se ve una tendencia creciente. Eso quiere decir que con el tiempo las ventas de ropa en New South Wales han ido aumentando poco a poco.


Graficos estacionales (gg_season).

comida_victoria <- aus_retail |>
  filter(Industry == "Food retailing", State == "Victoria")
comida_victoria |>
  gg_season(Turnover) +
  labs(title = "Ventas minoristas de alimentos en Victoria", x = "Mes", y = "Turnover")


  1. Que patrones estacionales se observan en las ventas de alimentos en Victoria?

En general las ventas se mantienen bastante estables todo el año, no cambian tanto mes a mes. Igual se nota que al final del año, como en noviembre y diciembre, las ventas suben un poco, probablemente por las fiestas de navidad, fin de año, etc. No hay grandes bajones, asi que el consumo de alimentos es bastante constante.

  1. Hay algun mes o periodo del año con un comportamiento atipico o destacable?

Si, se nota que en marzo y en diciembre las ventas suben un poco mas que en los demas meses, diciembre seguramente por las fiestas de fin de año, y marzo podria ser por un aumento temporal del consumo. El resto del año las ventas se mantienen bastante estables, sin cambios grandes.

  1. Como podria influir esta informacion en la planificacion de inventarios o promociones?

Esto ayuda a saber que en los ultimos meses del año hay mas movimiento, entonces se puede tener mas inventario o hacer promociones para aprovechar la demanda. Tambien sirve para no quedarse corto de productos justo cuando la gente compra mas.


Diagramas de dispersion

supermarket_vic_ts <- aus_retail |>
  filter(State == "Victoria", Industry == "Supermarket and grocery stores")
supermarket_vic_ts |>
  ggplot(aes(x = Month, y = Turnover)) +
  geom_point(color = "blue") +
  labs(title = "Ventas minoristas en supermercados de Victoria",x = "Mes",y = "Turnover")


  1. Que patrones visualizas en la dispersion de los datos?

Se nota que los puntos siguen una linea ascendente con el tiempo, eso muestra que las ventas han ido aumentando de manera constante y no se ve mucho desorden, asi que el patron general es claro.

  1. Se observa alguna tendencia o estacionalidad?

Si, hay una tendencia creciente en las ventas de los supermercados de Victoria, A lo largo de los años se ve que los valores de Turnover van subiendo. No se nota mucho la estacionalidad porque es un grafico de puntos, pero igual la tendencia general es al alza.

  1. Hay indicios de alguna anomalia o puntos atipicos?

No, los puntos se ven bastante alineados y ninguno se aleja demasiado del resto, No parece haber datos raros ni saltos bruscos, asi que no hay valores atipicos evidentes.


Coeficiente de correlacion

ropa_victoria <- aus_retail |>
  filter(State == "Victoria", Industry == "Clothing retailing")

comida_victoria <- aus_retail |>
  filter(State == "Victoria", Industry == "Food retailing")
correlacion_data <- ropa_victoria |>
  select(Month, Turnover) |>
  rename(Ropa = Turnover) |>
  inner_join(
    comida_victoria |>
      select(Month, Turnover) |>
      rename(Comida = Turnover),
    by = "Month"
  )

correlacion_valor <- cor(correlacion_data$Ropa, correlacion_data$Comida)
correlacion_valor
## [1] 0.9284541
correlacion_data |>
  ggplot(aes(x = Comida, y = Ropa)) +
  geom_point(color = "purple") +
  geom_smooth(method = "lm", se = FALSE, color = "black") +
  labs(title = "Relacion entre ventas de ropa y alimentos en Victoria", x = "Ventas de alimentos", y = "Ventas de ropa")


  1. Que indica el valor del coeficiente de correlacion respecto a la relacion entre las ventas de ambas industrias?

El coeficiente muestra que tan relacionadas estan las ventas de ropa y las de alimentos, Si el valor es alto (como es el caso), nos dice que ambas tienden a moverse en la misma direccion, o sea, cuando una sube la otra tambien.

  1. La correlacion es positiva o negativa? Es fuerte o debil?

el valor nos indica que las dos industrias tienen un comportamiento parecido, aunque no igual. O sea, cuando las ventas de comida suben, las de ropa tambien tienden a subir un poco, pero no al mismo ritmo. Entonces la correlacion es positiva y de fuerza media.

  1. Que conclusiones se pueden sacar para la toma de decisiones en analisis de series temporales?

Saber que las dos series se mueven de forma parecida nos sirve para planificar estrategias conjuntas, por ejemplo en promociones o campañas, ademas de que nos ayuda a entender que factores economicos generales (como el gasto de los hogares) pueden afectar a las dos industrias al mismo tiempo.


Matriz de correlacion entre industrias minoristas en Victoria

vic_industrias <- aus_retail |>
  filter(State == "Victoria", Industry %in% c("Clothing retailing", "Food retailing", "Hardware, building and garden supplies retailing", "Household goods retailing", "Liquor retailing"))
vic_wide <- vic_industrias |>
  select(Month, Industry, Turnover) |>
  pivot_wider(names_from = Industry, values_from = Turnover)

vic_wide <- vic_wide |>
  drop_na()

vic_wide_num <- vic_wide |>
  select(-Month) |>
  mutate(across(everything(), as.numeric))
ggpairs(vic_wide_num)


  1. Interprete brevemente la matriz de correlacion

En la matriz se puede ver que casi todas las industrias tienen una correlacion positiva entre si, lo que significa que cuando las ventas de una suben, las demas tambien tienden a hacerlo. Las correlaciones mas altas suelen estar entre Food retailing y Liquor retailing, esto considero que es porque ambas estan relacionadas con el consumo diario y por otro lado, Clothing retailing tiene correlaciones un poco mas bajas, ya que sus ventas dependen mas de las temporadas o modas.

  1. Explique que importancia tiene conocer estas relaciones al analizar series de tiempo economicas

Conocer estas correlaciones nos ayuda a entender como se mueven las distintas industrias entre si, por ejemplo si dos sectores tienen una correlacion alta, se puede predecir que si uno crece o cae, el otro probablemente hara algo parecido, esto sirve mucho para la planificacion economica, promociones conjuntas o para saber donde enfocar inversiones cuando la economia cambia. Tambien ayuda a detectar si un sector esta teniendo un comportamiento raro comparado con los demas.


Autocorrelacion (ACF)

supermarket_vic.ts <- aus_retail |>
  filter(Industry == "Supermarket and grocery stores", State == "Victoria") |>
  select(Month, Turnover)
supermarket_vic.ts |>
  ACF(Turnover) |>
  autoplot() +
  labs(title = "Autocorrelacion (ACF) - Supermercados en Victoria", x = "Rezago", y = "Autocorrelacion")


  1. Que nos indica la grafica de autocorrelacion sobre la dependencia entre los valores de la serie en diferentes rezagos?

Se ve que los primeros rezagos tienen barras altas, o sea que las ventas de un mes estan muy relacionadas con las de los meses anteriores, si un mes se vende bien, los meses siguientes tienden a mantener un nivel parecido.

  1. Existe evidencia de estacionalidad o patrones repetitivos en la serie?

Sí, se notan picos que se repiten cada cierto numero de rezagos (como cada 12), lo que muestra un patron estacional, probablemente las ventas suben en ciertas epocas del año, como fin de año o en meses con mas movimiento comercial.

  1. Como se puede interpretar el decaimiento o persistencia de las autocorrelaciones observadas?

Las barras van bajando de a poco, lo que significa que los valores pasados siguen influyendo varios meses, en pocas palabras, la serie no cambia de golpe, sino que mantiene una tendencia o un comportamiento parecido con el tiempo.


Tendencia y estacionalidad en ACF

supermarket_vic.ts <- aus_retail |>
  filter(Industry == "Supermarket and grocery stores", State == "Victoria") |>
  select(Month, Turnover)
supermarket_vic.ts |>
  ACF(Turnover, lag_max = 60) |>
  autoplot() +
  labs(title = "Tendencia y Estacionalidad ACF - Supermercados en Victoria", x = "Rezago", y = "Autocorrelacion")


  1. Como se manifiesta la tendencia en la grafica de ACF?

La tendencia se nota cuando las barras bajan muy despacio y siguen siendo altas incluso con muchos rezagos, O sea, los valores de las ventas se parecen bastante entre meses seguidos, lo que indica que hay una direccion general en el tiempo.

  1. Que evidencia en la ACF indicaria que existe estacionalidad?

Si se ven picos que se repiten cada cierto numero de rezagos (cada 12 meses), eso muestra estacionalidad y en este caso, podria ser que las ventas aumenten todos los años en las mismas fechas, como diciembre.

  1. Que diferencia existe en la forma de decaimiento de la ACF entre una serie con tendencia y una con estacionalidad?

Cuando hay tendencia, la ACF cae de forma lenta y continua, en cambio, cuando hay estacionalidad, la ACF tiene subidas y bajadas periodicas, como si hiciera ondas, porque los valores se repiten cada cierto tiempo.


Graficos de rezagos (lags plots)

supermarket_vic.ts <- aus_retail |>
  filter(Industry == "Supermarket and grocery stores",
         State == "Victoria") |>
  select(Month, Turnover)

supermarket_vic.qtr <- supermarket_vic.ts |>
  index_by(Quarter = yearquarter(Month)) |>
  summarise(Turnover = sum(Turnover))
supermarket_vic.qtr |>
  gg_lag(Turnover, lags = 9) +
  geom_point() +
  labs(title = "rezagos del Turnover trimestral - Supermercados en Victoria", x = "Turnover rezagado", y = "Turnover actual")


  1. ¿Se evidencian patrones en los rezagos? ¿Qué tan fuerte parece ser la correlación entre los valores rezagados y actuales?

Si, se evidencian patrones claros en los primeros rezagos (1 a 3) ya que los puntos tienden a alinearse en una forma aproximadamente lineal positiva, lo que sugiere una correlación positiva fuerte entre los valores actuales del Turnover y los valores de los trimestres anteriores, despues, a medida que el rezago aumenta (del 6 al 9), los puntos se dispersan más, indicando una menor dependencia temporal.

  1. ¿Qué nos indican estos gráficos sobre la dependencia temporal o estructura autocorrelacional de la serie?

Los graficos muestran que la serie tiene una dependencia temporal considerable, especialmente a corto plazo. Esto significa que el Turnover en un trimestre depende en buena medida de los valores de los trimestres recientes, esto concuerda con lo que se observa en la ACF donde los primeros rezagos muestran autocorrelaciones altas y significativas.

  1. ¿Se puede inferir presencia de estacionalidad o ciclos? Justifique su respuesta.

Sí, se puede inferir presencia de estacionalidad trimestral. El Turnover de supermercados tiende a ser mayor en ciertas epocas del año (por ejemplo, fin de año o periodos festivos), lo que genera patrones repetitivos cada 4 trimestres. Esto se observa en los rezagos donde aparecen nubes de puntos con forma curvilinea o eliptica, lo cual es tipico de una serie con ciclos o componentes estacionales.

  1. Compare visualmente con lo observado en otras series (por ejemplo, industria textil o de pasajeros): ¿los patrones son más o menos evidentes?

En comparación con otras industrias, los patrones en los supermercados son más marcados y estables. Esto puede deberse a que el consumo de alimentos y productos de supermercado es mas regular y predecible que el de sectores como el textil que es influido por modas o temporadas. Por eso, en esta serie los rezagos presentan una estructura más limpia y consistente.


Ruido Blanco

set.seed(123)
ruido <- rnorm(100, mean = 0, sd = 1)

ruido_blanco <- tibble(tiempo = 1:100, valor = ruido) |>
  as_tsibble(index = tiempo)

ruido_blanco |>
  autoplot(valor) +
  labs(title = "Serie de Ruido Blanco Simulada", x = "Tiempo", y = "Valor") +
  theme_minimal()

ruido_blanco |>
  ACF(valor, lag_max = 30) |>
  autoplot() +
  labs(title = "Función de Autocorrelación (ACF) - Ruido Blanco", x = "Rezago", y = "Autocorrelacion") +
  theme_minimal()


  1. Que caracteriza a una serie de ruido blanco?

Es una serie totalmente aleatoria, sin tendencia, sin estacionalidad y con valores que no se relacionan entre si y al fin y al cabo cada dato es independiente del anterior

  1. Como se refleja esto en la grafica de la serie y en el ACF?

En la grafica la serie se ve desordenada, sin ningun patron y en la ACF casi todos los rezagos estan cerca de cero y dentro de las bandas de confianza, o sea que no hay correlacion.

  1. Que esperarias observar en la autocorrelacion si es ruido blanco?

Esperaria ver que todas las barras del grafico ACF estan dentro de las bandas azules si es asi, confirma que la serie es ruido blanco y no hay dependencia entre los valores.


Transformaciones y ajustes (poblacion e inflacion)

global_economy
## # A tsibble: 15,150 x 9 [1Y]
## # Key:       Country [263]
##    Country     Code   Year         GDP Growth   CPI Imports Exports Population
##    <fct>       <fct> <dbl>       <dbl>  <dbl> <dbl>   <dbl>   <dbl>      <dbl>
##  1 Afghanistan AFG    1960  537777811.     NA    NA    7.02    4.13    8996351
##  2 Afghanistan AFG    1961  548888896.     NA    NA    8.10    4.45    9166764
##  3 Afghanistan AFG    1962  546666678.     NA    NA    9.35    4.88    9345868
##  4 Afghanistan AFG    1963  751111191.     NA    NA   16.9     9.17    9533954
##  5 Afghanistan AFG    1964  800000044.     NA    NA   18.1     8.89    9731361
##  6 Afghanistan AFG    1965 1006666638.     NA    NA   21.4    11.3     9938414
##  7 Afghanistan AFG    1966 1399999967.     NA    NA   18.6     8.57   10152331
##  8 Afghanistan AFG    1967 1673333418.     NA    NA   14.2     6.77   10372630
##  9 Afghanistan AFG    1968 1373333367.     NA    NA   15.2     8.90   10604346
## 10 Afghanistan AFG    1969 1408888922.     NA    NA   15.0    10.1    10854428
## # ℹ 15,140 more rows
aus_retail
## # A tsibble: 64,532 x 5 [1M]
## # Key:       State, Industry [152]
##    State                        Industry         `Series ID`      Month Turnover
##    <chr>                        <chr>            <chr>            <mth>    <dbl>
##  1 Australian Capital Territory Cafes, restaura… A3349849A    1982 abr.      4.4
##  2 Australian Capital Territory Cafes, restaura… A3349849A    1982 may.      3.4
##  3 Australian Capital Territory Cafes, restaura… A3349849A    1982 jun.      3.6
##  4 Australian Capital Territory Cafes, restaura… A3349849A    1982 jul.      4  
##  5 Australian Capital Territory Cafes, restaura… A3349849A    1982 ago.      3.6
##  6 Australian Capital Territory Cafes, restaura… A3349849A   1982 sept.      4.2
##  7 Australian Capital Territory Cafes, restaura… A3349849A    1982 oct.      4.8
##  8 Australian Capital Territory Cafes, restaura… A3349849A    1982 nov.      5.4
##  9 Australian Capital Territory Cafes, restaura… A3349849A    1982 dic.      6.9
## 10 Australian Capital Territory Cafes, restaura… A3349849A    1983 ene.      3.8
## # ℹ 64,522 more rows
usa <- global_economy |>
  filter(Country == "United States") |>
  mutate(PIB_percapita = GDP / Population)

ggplot(usa, aes(x = Year, y = PIB_percapita)) +
  geom_line(color = "steelblue", size = 1.2) +
  labs(title = "Evolucion del PIB per capita en Estados Unidos", x = "Año", y = "PIB per capita") 

ropa_aus <- aus_retail |>
  filter(Industry == "Clothing retailing") |>
  select(Month, Turnover)

ropa_aus_anual <- ropa_aus |>
  index_by(Year = year(Month)) |>
  summarise(Turnover = sum(Turnover))

ropa_aus_cpi <- ropa_aus_anual |>
  left_join(global_economy |>
              filter(Country == "Australia") |>
              select(Year, CPI), by = "Year")

ropa_aus_cpi <- ropa_aus_cpi |>
  mutate(Turnover_ajustado = Turnover / CPI * 100)

ropa_aus_cpi_long <- ropa_aus_cpi |>
  pivot_longer(cols = c(Turnover, Turnover_ajustado),
               names_to = "Tipo", values_to = "Valor")

ggplot(ropa_aus_cpi_long, aes(x = Year, y = Valor, color = Tipo, group = Tipo)) +
  geom_line(size = 1.2) +
  labs(title = "Turnover anual original y ajustado por inflacion - Ropa en Australia", x = "Año", y = "Turnover", color = "Serie")


  1. Cual es la utilidad de representar el PIB en terminos per capita?

El PIB per capita sirve para comparar el crecimiento economico tomando en cuenta el tamaño de la poblacion. El PIB bruto puede crecer solo porque hay mas habitantes, pero el per capita muestra si las personas realmente estan mejorando su nivel de vida. En el grafico se ve que el PIB per capita crece de forma mas estable que el PIB total.

  1. Por que es importante ajustar los valores economicos por inflacion?

Porque la inflacion hace que los precios suban con el tiempo, entonces los valores nominales no reflejan el poder adquisitivo real. En el grafico del turnover se nota que los valores ajustados por inflacion crecen mas lento que los no ajustados, ya que el aumento de precios exagera el crecimiento nominal.

  1. En base a los graficos, que conclusiones se pueden sacar sobre la economia de Estados Unidos y el consumo en Australia?

En Estados Unidos el PIB per capita muestra una tendencia positiva, lo que indica crecimiento economico sostenido. En Australia, el consumo en la industria de ropa tambien aumenta, pero al ajustar por inflacion se ve que el crecimiento real es menor. Esto sugiere que parte del aumento en ventas se debe a los precios y no necesariamente a un mayor volumen de consumo.


Transformaciones matematicas

ropa_vic <- aus_retail |>
  filter(State == "Victoria", Industry == "Clothing retailing") |>
  select(Month, Turnover)

ropa_vic_trans <- ropa_vic |>
  mutate(
    sqrt_turnover = sqrt(Turnover),
    log_turnover = log(Turnover),
    inv_turnover = 1 / Turnover
  )
ropa_vic_trans |>
  pivot_longer(cols = c(Turnover, sqrt_turnover, log_turnover, inv_turnover),
               names_to = "Transformacion", values_to = "Valor") |>
  ggplot(aes(x = Month, y = Valor, color = Transformacion)) +
  geom_line(size = 1) +
  labs(title = "Transformaciones del Turnover - Ropa en Victoria", x = "Tiempo", y = "Valor")


  1. ¿Cuál de las transformaciones permite visualizar mejor la tendencia de largo plazo?

La transformacion logaritmica permite ver mejor la tendencia de largo plazo. Suaviza los picos y muestra los cambios de forma más clara sin alterar la forma general de la serie.

  1. ¿Cual parece estabilizar mejor la varianza de la serie?

El logaritmo tambien es el que mejor estabiliza la varianza. Los valores mas altos dejan de ser tan grandes y eso hace que la serie sea mas uniforme en el tiempo.

  1. ¿Alguna de las transformaciones distorsiona la estructura de la serie original? Justifique.

Si, la transformacion inversa distorsiona la estructura porque invierte la escala. Las subidas se ven como bajadas y cambia la forma original de la serie.


Transformacion BOX - COX

hardware_vic <- aus_retail |>
  filter(State == "Victoria", Industry == "Hardware, building and garden supplies retailing") |>
  select(Month, Turnover)

autoplot(hardware_vic, Turnover) +
  labs(title = "Serie original - Hardware en Victoria", x = "Tiempo", y = "Turnover")

lambda <- hardware_vic |>
  features(Turnover, features = guerrero) |>
  pull(lambda_guerrero)

hardware_vic <- hardware_vic |>
  mutate(Turnover_BoxCox = box_cox(Turnover, lambda))
hardware_vic |>
  pivot_longer(cols = c(Turnover, Turnover_BoxCox),
               names_to = "Serie", values_to = "Valor") |>
  ggplot(aes(x = Month, y = Valor, color = Serie)) +
  geom_line(size = 1) +
  labs(title = paste("Transformación Box-Cox (λ =", round(lambda, 3), ")"),
       x = "Tiempo", y = "Valor")


  1. ¿Qué ventajas presenta la transformación Box-Cox frente a otras transformaciones matemáticas?

La ventaja es que Box-Cox ajusta automáticamente la forma de la transformación según los datos, mientras que otras usan un valor fijo como el logaritmo o la raíz cuadrada.

  1. ¿Cómo se interpreta el valor de λ obtenido?

El valor de λ muestra qué tipo de transformación se aplicó. Si está cerca de 0, la transformación se parece a un logaritmo; si está cerca de 1, la serie casi no cambia.

  1. ¿Qué cambios visuales se observan en la serie después de aplicar la transformación?

Después de aplicar Box-Cox, la serie se ve más estable y con menor variación en los valores altos, lo que ayuda a ver mejor la tendencia general.