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")
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
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.
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.
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")
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.
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.
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.
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")
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.
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.
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.
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")
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.
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.
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.
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)
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.
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.
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")
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.
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.
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.
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")
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.
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.
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.
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")
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.
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.
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.
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.
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()
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
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.
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.
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")
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.
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.
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.
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")
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.
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.
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.
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")
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.
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.
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.