Leer los datos
Instalar paquete para poder ejecutar comandos
# Instalar 'dplyr' (solo la primera vez, luego puedes comentar esta línea)
install.packages("dplyr")
## Installing package into 'C:/Users/nicol/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'dplyr' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'dplyr'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\nicol\AppData\Local\R\win-library\4.5\00LOCK\dplyr\libs\x64\dplyr.dll
## a C:\Users\nicol\AppData\Local\R\win-library\4.5\dplyr\libs\x64\dplyr.dll:
## Permission denied
## Warning: restored 'dplyr'
##
## The downloaded binary packages are in
## C:\Users\nicol\AppData\Local\Temp\RtmpWGfTPm\downloaded_packages
# Instalar 'lubridate' para trabajar con fechas (también solo la primera vez)
install.packages("lubridate")
## Installing package into 'C:/Users/nicol/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'lubridate' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'lubridate'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\nicol\AppData\Local\R\win-library\4.5\00LOCK\lubridate\libs\x64\lubridate.dll
## a
## C:\Users\nicol\AppData\Local\R\win-library\4.5\lubridate\libs\x64\lubridate.dll:
## Permission denied
## Warning: restored 'lubridate'
##
## The downloaded binary packages are in
## C:\Users\nicol\AppData\Local\Temp\RtmpWGfTPm\downloaded_packages
# Cargar el paquete dplyr para manipulación de datos
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Cargar el paquete lubridate para manejar fechas (semanas, meses, etc.)
library(lubridate)
##
## Adjuntando el paquete: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(magrittr)
Resumenes semanales y mensuales
# Crear un resumen semanal de la generación de residuos
resumen_semanal <- Datos_residuos %>% # Toma la base de datos original
mutate(semana = floor_date(fecha, "week", week_start = 1)) %>% #Crea nueva columna semana con lunes de inicio
group_by(semana) %>% # Agrupa los datos por cada semana
summarise( # Resume las variables para cada grupo (cada semana)
total_residuos_t = sum(residuos_totales_t), # Suma total de residuos en la semana (toneladas)
promedio_diario_t = mean(residuos_totales_t), # Promedio diario de residuos en la semana
n_dias = n() # Número de días incluidos en esa semana
) %>% # Fin del resumen
ungroup() # Quita la agrupación para evitar problemas en pasos siguientes
# Ver las primeras filas del resumen semanal
head(resumen_semanal)
## # A tibble: 6 × 4
## semana total_residuos_t promedio_diario_t n_dias
## <dttm> <dbl> <dbl> <int>
## 1 2024-12-30 00:00:00 215. 43.0 5
## 2 2025-01-06 00:00:00 278. 39.7 7
## 3 2025-01-13 00:00:00 263. 37.6 7
## 4 2025-01-20 00:00:00 269. 38.4 7
## 5 2025-01-27 00:00:00 254. 36.3 7
## 6 2025-02-03 00:00:00 295. 42.1 7
# Ver un resumen estadístico del total semanal de residuos
summary(resumen_semanal$total_residuos_t)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 128.9 265.9 280.7 276.4 290.7 311.0
RESUMEN MENSUAL
# Crear un resumen mensual de la generación de residuos
resumen_mensual <- Datos_residuos %>% # Toma la base original
mutate(mes = floor_date(fecha, "month")) %>% # Crea una columna 'mes' con el primer día de cada mes
group_by(mes) %>% # Agrupa los datos por mes
summarise( # Resume las variables para cada mes
total_residuos_t = sum(residuos_totales_t), # Suma total de residuos en el mes (toneladas)
promedio_diario_t = mean(residuos_totales_t), # Promedio diario de residuos en el mes
n_dias = n() # Número de días incluidos en ese mes
) %>% # Fin del resumen
ungroup() # Quita la agrupación
# Ver las primeras filas del resumen mensual
head(resumen_mensual)
## # A tibble: 6 × 4
## mes total_residuos_t promedio_diario_t n_dias
## <dttm> <dbl> <dbl> <int>
## 1 2025-01-01 00:00:00 1214. 39.2 31
## 2 2025-02-01 00:00:00 1119. 40.0 28
## 3 2025-03-01 00:00:00 1248. 40.3 31
## 4 2025-04-01 00:00:00 1204 40.1 30
## 5 2025-05-01 00:00:00 1243. 40.1 31
## 6 2025-06-01 00:00:00 1170. 39.0 30
# Ver un resumen estadístico del total mensual de residuos
summary(resumen_mensual$total_residuos_t)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1119 1210 1231 1221 1249 1271
compara día feriado vs día normal
# Comparar la generación de residuos entre días normales y feriados
comparacion_feriados <- Datos_residuos %>% # Toma la base de datos original
group_by(tipo_dia) %>% # Agrupa por tipo de día: "Normal" o "Feriado"
summarise( # Calcula estadísticas por cada tipo de día
promedio_residuos_t = mean(residuos_totales_t), # Promedio de residuos por día (toneladas)
sd_residuos_t = sd(residuos_totales_t), # Desviación estándar de residuos
minimo_residuos_t = min(residuos_totales_t), # Valor mínimo de residuos
maximo_residuos_t = max(residuos_totales_t), # Valor máximo de residuos
n_dias = n() # Número de días en cada categoría
) %>% # Fin del resumen
ungroup() # Quita la agrupación
# Ver la tabla de comparación entre días normales y feriados
comparacion_feriados
## # A tibble: 2 × 6
## tipo_dia promedio_residuos_t sd_residuos_t minimo_residuos_t maximo_residuos_t
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Feriado 50.8 7.38 38.7 62.2
## 2 Normal 39.8 5.83 30.1 49.8
## # ℹ 1 more variable: n_dias <int>
Graficos inciales
# Histograma de residuos totales diarios
hist(
Datos_residuos$residuos_totales_t, # Vector numérico con residuos diarios
main = "Histograma de residuos diarios (t/día)", # Título del gráfico
xlab = "Residuos totales (toneladas/día)", # Etiqueta del eje X
ylab = "Frecuencia" # Etiqueta del eje Y
)
# Boxplot para comparar residuos en días normales vs feriados
boxplot(
residuos_totales_t ~ tipo_dia, # Fórmula: residuos en función del tipo de día
data = Datos_residuos, # Indica el data frame
main = "Residuos diarios: día normal vs feriado", # Título del gráfico
xlab = "Tipo de día", # Etiqueta eje X
ylab = "Residuos totales (t/día)" # Etiqueta eje Y
)
seperar feriados normales
# Filtrar el promedio de residuos en días normales
promedio_normal <- comparacion_feriados %>% # Toma la tabla de comparación
filter(tipo_dia == "Normal") %>% # Se queda solo con filas de tipo "Normal"
pull(promedio_residuos_t) # Extrae el valor de la columna promedio_residuos_t
# Filtrar el promedio de residuos en feriados
promedio_feriado <- comparacion_feriados %>% # Toma la misma tabla
filter(tipo_dia == "Feriado") %>% # Se queda solo con filas de tipo "Feriado"
pull(promedio_residuos_t) # Extrae el promedio de residuos en feriados
# Calcular el incremento absoluto (en toneladas)
incremento_absoluto <- promedio_feriado - promedio_normal # Diferencia entre promedios
# Calcular el incremento relativo (en porcentaje)
incremento_relativo <- (incremento_absoluto / promedio_normal) * 100 # Diferencia / normal * 100
# Mostrar los resultados en consola
promedio_normal # Promedio t/día en día normal
## [1] 39.80446
promedio_feriado # Promedio t/día en feriado
## [1] 50.75091
incremento_absoluto # Cuántas toneladas más en feriado
## [1] 10.94645
incremento_relativo # % más de residuos en feriado
## [1] 27.50055
# Crear un vector con los dos promedios
valores_promedio <- c(promedio_normal, promedio_feriado) # Vector con ambos promedios
# Crear un vector con los nombres de las categorías
nombres_tipos <- c("Normal", "Feriado") # Etiquetas para cada barra
# Hacer un gráfico de barras para comparar los promedios
barplot(
valores_promedio, # Altura de las barras (los promedios)
names.arg = nombres_tipos, # Nombres debajo de cada barra
main = "Promedio de residuos diarios: día normal vs feriado", # Título del gráfico
xlab = "Tipo de día", # Etiqueta eje X
ylab = "Residuos totales (t/día)"# Etiqueta eje Y
)
Analizar series de tiempo
# Asegurarse de que los datos están ordenados por fecha
Datos_residuos_ordenado <- Datos_residuos %>% # Usa la base original
arrange(fecha) # Ordena las filas cronológicamente
# Crear un objeto de serie de tiempo (ts) con datos diarios
residuos_ts <- ts(
Datos_residuos_ordenado$residuos_totales_t, # Vector numérico: residuos diarios
start = c(2025, 1), # Año 2025, "período" 1 (día 1)
frequency = 365 # Frecuencia: 365 observaciones por año (diario)
)
# Ver un resumen de la serie de tiempo
residuos_ts # Muestra parte de la serie en consola
## Time Series:
## Start = c(2025, 1)
## End = c(2025, 365)
## Frequency = 365
## [1] 46.44 49.01 44.64 41.97 33.12 33.12 31.16 47.32 42.02 44.16 30.41 49.40
## [13] 46.65 34.25 33.64 33.67 36.08 40.50 38.64 35.82 42.24 32.79 35.84 37.33
## [25] 39.12 45.70 33.99 40.28 41.85 30.93 42.15 33.41 31.30 48.98 49.31 46.17
## [37] 36.09 31.95 43.68 38.80 32.44 39.90 30.69 48.19 35.18 43.25 36.23 40.40
## [49] 40.93 33.70 49.39 45.50 48.79 47.90 41.96 48.44 31.77 33.92 30.90 36.51
## [61] 37.77 44.08 60.02 37.14 35.62 40.85 32.82 46.04 31.49 49.74 45.44 33.97
## [73] 30.11 46.31 44.14 44.58 45.43 31.48 37.17 32.32 47.26 42.47 36.62 31.27
## [85] 36.22 36.50 44.59 42.75 47.74 39.44 32.39 44.26 45.22 41.23 45.42 39.88
## [97] 40.45 38.55 30.51 32.16 30.63 42.73 36.29 40.17 48.15 34.99 38.21 54.33
## [109] 34.58 31.54 35.80 33.22 48.59 46.16 42.67 47.43 46.07 33.73 47.85 40.79
## [121] 46.15 57.72 36.36 32.20 34.56 38.54 46.36 47.21 30.14 40.21 38.35 34.44
## [133] 32.40 36.75 48.86 36.46 40.38 44.06 37.27 49.44 49.25 35.04 51.22 36.02
## [145] 35.70 30.74 42.19 40.05 31.03 35.57 48.17 34.79 32.90 39.79 49.71 34.84
## [157] 43.44 45.23 34.75 44.56 37.36 42.65 42.67 40.72 31.81 46.71 36.42 33.73
## [169] 30.82 41.82 43.55 30.33 40.24 34.53 42.90 33.49 43.82 37.73 48.73 32.75
## [181] 36.82 32.27 48.49 47.55 35.16 43.20 46.34 41.10 40.59 34.84 31.86 47.94
## [193] 48.01 42.66 36.78 36.98 44.52 47.94 47.74 45.60 42.84 31.68 33.23 47.97
## [205] 42.13 30.18 32.03 43.27 30.10 33.22 40.97 43.84 43.04 34.49 44.24 34.74
## [217] 36.51 44.93 42.99 46.98 43.15 41.37 38.66 37.35 35.30 34.88 49.46 37.86
## [229] 47.84 42.62 45.90 40.05 41.54 39.85 33.90 44.45 35.62 30.49 42.91 33.54
## [241] 48.81 49.08 48.30 37.40 30.31 48.57 38.56 49.33 49.27 47.06 35.89 37.70
## [253] 47.02 36.34 33.39 41.14 48.72 43.92 41.40 31.94 42.30 49.80 32.80 40.37
## [265] 47.55 44.82 43.94 44.05 37.19 35.87 46.19 46.20 47.34 48.26 40.23 40.03
## [277] 45.97 43.00 44.04 45.92 47.80 36.76 47.56 31.88 41.57 30.72 39.31 40.85
## [289] 35.73 41.82 30.61 30.75 46.45 37.20 32.54 40.44 45.40 34.32 42.46 31.71
## [301] 31.03 40.63 40.81 42.75 44.52 49.52 52.01 44.04 45.90 35.42 38.78 31.57
## [313] 30.51 49.25 46.72 43.92 38.18 33.47 33.13 35.00 40.98 44.29 43.20 35.60
## [325] 49.10 44.76 41.09 42.23 38.39 34.95 37.12 45.16 30.29 32.32 30.92 30.81
## [337] 47.11 44.07 39.48 31.96 39.83 39.47 33.46 38.68 37.97 42.32 42.70 30.91
## [349] 37.49 42.52 40.06 47.13 43.17 33.26 31.41 42.85 30.53 41.72 62.18 41.51
## [361] 37.76 42.87 39.17 40.91 48.83
# Ver clase del objeto (debe decir "ts")
class(residuos_ts)
## [1] "ts"
graficas de series de tiempo
# Graficar la serie de tiempo diaria
plot(
residuos_ts, # La serie de tiempo que creamos
main = "Serie de tiempo de residuos diarios (2025)", # Título del gráfico
xlab = "Tiempo (días del año 2025)", # Etiqueta eje X
ylab = "Residuos totales (toneladas/día)" # Etiqueta eje Y
)
# mejorar visualización
# Instalar el paquete 'zoo' para promedios móviles (solo la primera vez)
install.packages("zoo")
## Installing package into 'C:/Users/nicol/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
##
## There is a binary version available but the source version is later:
## binary source needs_compilation
## zoo 1.8-14 1.8-15 TRUE
##
## Binaries will be installed
## package 'zoo' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'zoo'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\nicol\AppData\Local\R\win-library\4.5\00LOCK\zoo\libs\x64\zoo.dll a
## C:\Users\nicol\AppData\Local\R\win-library\4.5\zoo\libs\x64\zoo.dll: Permission
## denied
## Warning: restored 'zoo'
##
## The downloaded binary packages are in
## C:\Users\nicol\AppData\Local\Temp\RtmpWGfTPm\downloaded_packages
# Cargar el paquete 'zoo'
library(zoo)
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
# Calcular un promedio móvil de 7 días (ventana semanal)
residuos_ma7 <- rollmean(
residuos_ts, # Serie de tiempo original
k = 7, # Tamaño de la ventana: 7 días
align = "center", # Centra la ventana en cada punto
fill = NA # Rellena bordes con NA para mantener la misma longitud
)
# Graficar serie original + promedio móvil
plot(
residuos_ts, # Serie original
main = "Residuos diarios y promedio móvil de 7 días", # Título del gráfico
xlab = "Tiempo (días)", # Etiqueta eje X
ylab = "Residuos (t/día)" # Etiqueta eje Y
)
# Crear una serie de tiempo mensual con el total de residuos por mes
residuos_mensual_ts <- ts(
resumen_mensual$total_residuos_t, # Vector con el total mensual de residuos
start = c(2025, 1), # Año 2025, mes 1 (enero)
frequency = 12 # 12 observaciones por año (mensual)
)
# Ver la serie mensual en consola
residuos_mensual_ts
## Jan Feb Mar Apr May Jun Jul Aug Sep
## 2025 1214.24 1119.17 1247.89 1204.00 1242.84 1169.61 1251.03 1270.85 1256.38
## Oct Nov Dec
## 2025 1228.55 1211.42 1233.06
# Graficar la serie mensual
plot(
residuos_mensual_ts, # Serie mensual
main = "Serie de tiempo mensual de residuos (2025)", # Título
xlab = "Tiempo (meses)", # Eje X
ylab = "Residuos totales (t/mes)" # Eje Y
)
Graficos de de los 12 por días
# Instalar paquetes (solo la primera vez)
install.packages(c("ggplot2","tidyr"))
## Installing packages into 'C:/Users/nicol/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'ggplot2' successfully unpacked and MD5 sums checked
## package 'tidyr' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'tidyr'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\nicol\AppData\Local\R\win-library\4.5\00LOCK\tidyr\libs\x64\tidyr.dll
## a C:\Users\nicol\AppData\Local\R\win-library\4.5\tidyr\libs\x64\tidyr.dll:
## Permission denied
## Warning: restored 'tidyr'
##
## The downloaded binary packages are in
## C:\Users\nicol\AppData\Local\Temp\RtmpWGfTPm\downloaded_packages
# Cargar paquetes necesarios
library(dplyr) # Manipulación de datos
library(lubridate) # Extraer año/mes/día desde fecha
library(tidyr) # Para completar días faltantes
##
## Adjuntando el paquete: 'tidyr'
## The following object is masked from 'package:magrittr':
##
## extract
library(ggplot2) # Gráficos
# Etiquetas de meses en español (estables, sin depender del locale)
mes_labels <- c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic")
# Preparar tabla: día del mes (1-31) y mes (1-12)
datos_dia_mes <- Datos_residuos %>%
mutate(
fecha = as.Date(fecha), # Asegura que fecha sea tipo Date
anio = year(fecha), # Extrae año
mes_num = month(fecha), # Extrae mes como número (1-12)
mes = factor(mes_num, levels = 1:12, labels = mes_labels), # Mes como factor con etiquetas
dia_mes = day(fecha) # Extrae día del mes (1-31)
) %>%
group_by(anio, mes, dia_mes) %>% # Agrupa por año, mes y día del mes
summarise(
residuos_t = sum(residuos_totales_t), # Suma por si hay más de un registro por día
.groups = "drop"
) %>%
complete( # Completa días 1:31 para cada mes (si faltan)
anio, mes, dia_mes = 1:31,
fill = list(residuos_t = NA_real_)
)
# (Opcional) Si solo quieres graficar 2025, filtra aquí:
datos_dia_mes <- datos_dia_mes %>% filter(anio == 2025)
# Gráfico: 12 líneas (una por mes) recorriendo días del mes
ggplot(datos_dia_mes, aes(x = dia_mes, y = residuos_t, color = mes, group = mes)) +
geom_line(linewidth = 0.9, na.rm = TRUE) + # Línea por mes
geom_point(size = 1.2, na.rm = TRUE) + # Puntos para ver datos reales
scale_x_continuous(breaks = seq(1, 31, 2)) + # Marcas en el eje X
labs(
title = "Patrón diario por mes (12 líneas)",
x = "Día del mes",
y = "Residuos totales (t/día)",
color = "Mes"
) +
theme_minimal()
digrama de cajas por día
library(dplyr)
library(lubridate)
library(ggplot2)
datos_box_dia <- Datos_residuos %>%
mutate(
fecha = as.Date(fecha),
dia_mes = factor(day(fecha), levels = 1:31) # 1..31 como categorías ordenadas
)
ggplot(datos_box_dia, aes(x = dia_mes, y = residuos_totales_t)) +
geom_boxplot(na.rm = TRUE, outlier.alpha = 0.4) +
geom_jitter(width = 0.15, alpha = 0.25, na.rm = TRUE) +
labs(
title = "Distribución de residuos por día del mes",
x = "Día del mes",
y = "Residuos totales (t/día)"
) +
theme_minimal()
heapmap diario
# 1) Consolidar a 1 valor por fecha (por si hay duplicados en un mismo día)
diario <- Datos_residuos %>%
mutate(fecha = as.Date(fecha)) %>%
group_by(fecha) %>%
summarise(residuos_t = sum(residuos_totales_t, na.rm = TRUE), .groups = "drop")
# 2) Completar días faltantes entre min y max (para que el "calendario" no tenga huecos raros)
diario_completo <- diario %>%
complete(fecha = seq.Date(min(fecha), max(fecha), by = "day")) %>%
mutate(
anio = isoyear(fecha),
semana = isoweek(fecha),
dia_sem = wday(fecha, week_start = 1, label = TRUE, abbr = TRUE) # Lun..Dom
)
# 3) Heatmap tipo GitHub (semana vs día de semana), por año
ggplot(diario_completo, aes(x = semana, y = dia_sem, fill = residuos_t)) +
geom_tile(color = NA) +
facet_wrap(~ anio, ncol = 1) +
labs(
title = "Calendar heatmap de residuos (diario)",
x = "Semana ISO",
y = "Día de la semana",
fill = "t/día"
) +
theme_minimal()
boxplo díario
datos_semana <- Datos_residuos %>%
mutate(
fecha = as.Date(fecha),
dia_sem = wday(fecha, week_start = 1, label = TRUE, abbr = TRUE) # Lun..Dom
)
ggplot(datos_semana, aes(x = dia_sem, y = residuos_totales_t)) +
geom_boxplot(na.rm = TRUE, outlier.alpha = 0.4) +
geom_jitter(width = 0.15, alpha = 0.25, na.rm = TRUE) +
labs(
title = "Residuos por día de la semana",
x = "Día de la semana",
y = "Residuos (t/día)"
) +
theme_minimal()
boxplot mensual
mes_labels <- c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic")
datos_mes <- Datos_residuos %>%
mutate(
fecha = as.Date(fecha),
mes = factor(month(fecha), levels = 1:12, labels = mes_labels)
)
ggplot(datos_mes, aes(x = mes, y = residuos_totales_t)) +
geom_boxplot(na.rm = TRUE, outlier.alpha = 0.4) +
geom_jitter(width = 0.15, alpha = 0.25, na.rm = TRUE) +
labs(
title = "Residuos por mes",
x = "Mes",
y = "Residuos (t/día)"
) +
theme_minimal()
# Instalar el paquete 'forecast' (solo la primera vez)
install.packages("forecast")
## Installing package into 'C:/Users/nicol/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'forecast' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'forecast'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\nicol\AppData\Local\R\win-library\4.5\00LOCK\forecast\libs\x64\forecast.dll
## a
## C:\Users\nicol\AppData\Local\R\win-library\4.5\forecast\libs\x64\forecast.dll:
## Permission denied
## Warning: restored 'forecast'
##
## The downloaded binary packages are in
## C:\Users\nicol\AppData\Local\Temp\RtmpWGfTPm\downloaded_packages
# Cargar el paquete 'forecast'
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
# Ajustar un modelo ARIMA automáticamente a la serie mensual
modelo_arima <- auto.arima(
residuos_mensual_ts # Serie mensual de entrada para el modelo
)
# Ver el resumen del modelo ARIMA ajustado
summary(
modelo_arima # Muestra coeficientes, AIC, etc.
)
## Series: residuos_mensual_ts
## ARIMA(0,0,0) with non-zero mean
##
## Coefficients:
## mean
## 1220.7533
## s.e. 11.6301
##
## sigma^2 = 1771: log likelihood = -61.38
## AIC=126.76 AICc=128.09 BIC=127.73
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -4.547474e-13 40.28761 30.88778 -0.1137917 2.577488 NaN
## ACF1
## Training set -0.1132613
# Hacer un pronóstico de 12 meses (todo el año 2026)
pronostico_2026 <- forecast(
modelo_arima, # Modelo previamente ajustado
h = 12 # Horizonte de pronóstico: 12 meses hacia adelante
)
# Ver los valores del pronóstico en consola
pronostico_2026 # Muestra predicciones, error estándar y rangos de confianza
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Feb 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Mar 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Apr 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## May 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Jun 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Jul 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Aug 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Sep 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Oct 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Nov 2026 1220.753 1166.827 1274.68 1138.28 1303.227
## Dec 2026 1220.753 1166.827 1274.68 1138.28 1303.227
# Graficar el pronóstico junto con la serie histórica
plot(
pronostico_2026, # Objeto de pronóstico (forecast)
main = "Pronóstico mensual de residuos para 2026", # Título del gráfico
xlab = "Tiempo (meses)", # Etiqueta eje X
ylab = "Residuos totales (t/mes)" # Etiqueta eje Y
)
library(dplyr)
# Asegurarse de que los datos están ordenados por fecha
Datos_residuos_ordenado <- Datos_residuos %>% # Usa tu data frame original
arrange(fecha) # Ordena de la fecha más antigua a la más reciente
# Crear la serie de tiempo diaria con frecuencia semanal (7 días)
residuos_diario_ts <- ts(
Datos_residuos_ordenado$residuos_totales_t, # Vector numérico: residuos diarios
start = c(2025, 1), # Año 2025, día 1 (aprox.)
frequency = 7 # Frecuencia semanal: 7 observaciones por “ciclo”
)
# Descomponer la serie diaria (estacionalidad semanal)
descomp_diaria <- decompose(
residuos_diario_ts, # Serie de tiempo diaria
type = "additive" # Modelo aditivo
)
# Ver el gráfico con serie, tendencia, estacionalidad y residuo
plot(descomp_diaria)