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)