Leer los datos

Instalar paquete para poder ejecutar comandos

# Instalar 'dplyr' (solo la primera vez, luego puedes comentar esta línea)
#install.packages("dplyr")

# Instalar 'lubridate' para trabajar con fechas (también solo la primera vez)
#install.packages("lubridate")

# 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             1.02             0.203      5
## 2 2025-01-06 00:00:00             1.30             0.186      7
## 3 2025-01-13 00:00:00             1.20             0.172      7
## 4 2025-01-20 00:00:00             1.25             0.179      7
## 5 2025-01-27 00:00:00             1.28             0.183      7
## 6 2025-02-03 00:00:00             1.22             0.174      7
#La tabla presenta informacipn semanal donde los residuos totales oscilan entre 1.02 y 1.22 toneladas por semana, lo que sugiere que la generacion de residuos se mantiene bastante constante a lo largo del tiempo. El promedio diario de residuos varia entre 0.17 y 0.20 toneladas por dia, lo que indica que aunque hay ligeras fluctuaciones de una semana a otra, el comportamiento diario también es bastante estable.


# Ver un resumen estadístico del total semanal de residuos
summary(resumen_semanal$total_residuos_t)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.6926  1.2456  1.2776  1.2733  1.3138  1.4264
#El resumen estadístico sobre la cantidad de residuos generados semanalmente muestra que en promedio se producen alrededor de 1.27 toneladas cada semana. Los valores oscilan entre un mínimo de aproximadamente 0.69 toneladas, un máximo cercano a 1.43 toneladas y tanto la mediana como la media son bastante similares demostrando que los datos están bien equilibrados y no muestran variaciones extremas. La mayoría de los registros se sitúan entre 1.25 y 1.31 toneladas mostrando una estabilidad en la cantidad de residuos generados cada semana.

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             5.64             0.182     31
## 2 2025-02-01 00:00:00             5.12             0.183     28
## 3 2025-03-01 00:00:00             5.61             0.181     31
## 4 2025-04-01 00:00:00             5.54             0.185     30
## 5 2025-05-01 00:00:00             5.64             0.182     31
## 6 2025-06-01 00:00:00             5.43             0.181     30
#La tabla presenta un resumen mensual de residuos, donde los valores totales de residuos por mes varian entre 5.12 y 5.64 toneladas. El promedio diario de residuos es muy similar de un mes a otro, rondando las 0.18 toneladas por dia, lo que sugiere que la generacion diaria de residuos es constante. Tambien, el numero de dias considerados por mes varia entre 28 y 31, lo que se alinea con la duracion de cada mes calendario y refuerza la consistencia de los datos.

# Ver un resumen estadístico del total mensual de residuos
summary(resumen_mensual$total_residuos_t)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   5.125   5.514   5.625   5.624   5.688   6.150
#El resumen estadistico del total mensual de residuos revela que la cantidad minima registrada fue de 5.13 toneladas, mientras que la maxima alcanzo cerca de 6.15 toneladas, lo que indica que hay cierta variacion entre los meses. La media y la mediana son iguales, con valores alrededor de 5.62 toneladas, lo que sugiere que los datos estan bien distribuidos y no presentan valores atipicos significativos. Tambien se puede notar que la mayoria de los valores se agrupan entre 5.51 y 5.69 toneladas, lo que refleja una produccion mensual de residuos bastante estable.

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                0.221        0.0179             0.194             0.261
## 2 Normal                 0.183        0.0156             0.141             0.237
## # ℹ 1 more variable: n_dias <int>
#La tabla muestra una comparacion entre la generacion de residuos en dias feriados y dias normales. Se observa que en los dias feriados se produce un promedio mayor de residuos (0.221 toneladas) en comparacion con los dias normales (0.183 toneladas). Ademas, los valores minimo y maximo tambien reflejan esta diferencia, ya que en feriados van de 0.194 a 0.261 toneladas, mientras que en dias normales se ubican entre 0.141 y 0.237 toneladas. En general, estos resultados indican que durante los dias feriados la generacion de residuos aumenta respecto a los dias habituales.

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
)

#Esta gráfica corresponde a un histograma que muestra la distribución de la generación diaria de residuos sólidos, donde el eje horizontal representa la cantidad de residuos generados (en toneladas) y el eje vertical la frecuencia de ocurrencia de cada intervalo. A partir del gráfico se observa que los valores de generación se extienden aproximadamente desde un valor mínimo cercano a 0,14 toneladas hasta un valor máximo que se aproxima a 0,26 toneladas. La mayor concentración de datos se presenta en los rangos intermedios, aproximadamente entre 0,18 y 0,22 toneladas, los cuales registran las frecuencias más altas (alrededor de 60 registros). Los valores cercanos al mínimo y al máximo presentan frecuencias menores, lo que indica que estos escenarios ocurren con menor regularidad. Esta distribución evidencia que la generación de residuos en el cantón Quevedo se mantiene mayoritariamente dentro de rangos definidos y relativamente estables, lo cual es favorable para la planificación de un proyecto de valorización energética, al garantizar una disponibilidad constante de residuos como insumo energético.



# 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
)

#Esta gráfica presenta un diagrama de cajas que compara la generación diaria de residuos sólidos entre días normales y días feriados en el cantón Quevedo. En ambos casos, el eje vertical representa la cantidad de residuos generados en toneladas, mientras que las cajas muestran la distribución estadística de los datos (mediana, cuartiles y valores extremos).

#Para los días normales, se observa que el valor mínimo de generación se sitúa aproximadamente en 0,15 toneladas, mientras que el valor máximo alcanza cerca de 0,23 toneladas. La mediana se ubica alrededor de 0,19 toneladas, con un rango intercuartílico relativamente estrecho, lo que indica una generación más estable y con menor variabilidad.

#En contraste, los días feriados presentan un valor mínimo similar, cercano a 0,16 toneladas, pero un valor máximo mayor, que se aproxima a 0,26 toneladas. La mediana en este caso se encuentra alrededor de 0,21 toneladas, y el rango intercuartílico es más amplio, evidenciando una mayor dispersión de los datos. Esta diferencia indica que durante los días feriados no solo aumenta la cantidad de residuos generados, sino también su variabilidad.

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] 0.1832286
promedio_feriado          # Promedio t/día en feriado
## [1] 0.2210488
incremento_absoluto       # Cuántas toneladas más en feriado
## [1] 0.03782022
incremento_relativo       # % más de residuos en feriado
## [1] 20.641
# 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
)

#Este gráfico de barras compara la generación de residuos entre días normales y feriados, evidenciando que durante las festividades la producción aumenta de 0,18 a aproximadamente 0,22 toneladas diarias. Esta variación es un indicador crítico para el diseño de la planta, ya que identifica "picos de carga" estacionales que obligan a considerar una infraestructura de almacenamiento temporal o fosa de recepción con capacidad suficiente; de este modo, se garantiza que el excedente generado en feriados pueda ser dosificado de forma controlada, manteniendo un flujo de alimentación constante hacia el sistema de conversión energética a pesar de las fluctuaciones en la recolección.

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] 0.2484575 0.1786900 0.1900500 0.2128400 0.1861700 0.1773000 0.2035200
##   [8] 0.1917800 0.1739000 0.1885300 0.1826900 0.1826500 0.1841900 0.1530300
##  [15] 0.1557500 0.1725600 0.1660500 0.1944900 0.1759400 0.1602700 0.2018700
##  [22] 0.1774200 0.1816600 0.1600900 0.1814600 0.1914100 0.1640500 0.1861200
##  [29] 0.1720100 0.1764700 0.1719900 0.2176100 0.1893200 0.1652300 0.1923800
##  [36] 0.1628700 0.1835200 0.1522100 0.1693900 0.1925100 0.1911700 0.1829800
##  [43] 0.1788300 0.1761600 0.1591500 0.1786100 0.2099210 0.2251355 0.1854700
##  [50] 0.1550400 0.1851800 0.1749400 0.1792600 0.1988000 0.1953900 0.1939500
##  [57] 0.1683800 0.1760400 0.1852900 0.2009300 0.1792400 0.1748700 0.1618000
##  [64] 0.1605200 0.1890400 0.1967700 0.1853100 0.2013400 0.1826400 0.1683500
##  [71] 0.1826400 0.1993500 0.1770000 0.2097100 0.1473200 0.1891800 0.1787400
##  [78] 0.1732600 0.1788100 0.1492800 0.1831100 0.1917100 0.1984900 0.1701500
##  [85] 0.1660300 0.1703800 0.1905100 0.1912800 0.1784800 0.1848000 0.1803500
##  [92] 0.2217430 0.1942465 0.2004105 0.2093115 0.1659000 0.1832000 0.1826900
##  [99] 0.1790300 0.1756000 0.1586900 0.1815800 0.1827500 0.1674700 0.1766500
## [106] 0.1847400 0.2059600 0.1814600 0.1917800 0.1867800 0.1514900 0.1785800
## [113] 0.1798200 0.2142200 0.1762000 0.1924400 0.1873800 0.1622200 0.1953200
## [120] 0.1897200 0.2185600 0.1657400 0.2087400 0.1666300 0.1871300 0.2100600
## [127] 0.1645800 0.1706400 0.1801700 0.1801200 0.1644000 0.1797200 0.1635500
## [134] 0.1855100 0.1655900 0.2009000 0.1759200 0.1828400 0.1903700 0.1611400
## [141] 0.1819900 0.1974300 0.1557600 0.2190175 0.1915800 0.1899200 0.1610500
## [148] 0.1598600 0.1862000 0.1829900 0.1914400 0.1880500 0.1647900 0.1775000
## [155] 0.1783500 0.1643100 0.2002800 0.1899200 0.1655400 0.1834200 0.1606800
## [162] 0.1852400 0.1904200 0.1628200 0.1970800 0.1890200 0.1857300 0.2007100
## [169] 0.1708400 0.1637600 0.1618600 0.1710400 0.1818500 0.1790200 0.1781200
## [176] 0.1858000 0.1744500 0.1945300 0.1791100 0.2228000 0.1829900 0.1651500
## [183] 0.1621200 0.1841500 0.1741400 0.1968100 0.1932200 0.1762800 0.1653000
## [190] 0.1558200 0.1709700 0.1894600 0.1893600 0.1676200 0.1797700 0.1827700
## [197] 0.1647700 0.1794900 0.1781300 0.1691500 0.1915000 0.1852600 0.1926700
## [204] 0.1922600 0.1577700 0.1640100 0.1938400 0.1938300 0.1846100 0.2319600
## [211] 0.1854100 0.1934200 0.1911800 0.1962200 0.1818000 0.1884100 0.1666400
## [218] 0.1742600 0.1707300 0.1787900 0.2210400 0.2098060 0.1873800 0.1547100
## [225] 0.1709200 0.1931000 0.1785400 0.1704300 0.1758300 0.1872800 0.1672500
## [232] 0.1807000 0.1782700 0.1683700 0.2184900 0.1959600 0.1488500 0.1802700
## [239] 0.1682200 0.1897400 0.1663600 0.1847900 0.1940400 0.1933000 0.1634200
## [246] 0.1759400 0.1739100 0.1713300 0.2166300 0.1959700 0.1625400 0.1940500
## [253] 0.2114700 0.1957100 0.1588000 0.1824600 0.2090600 0.1705400 0.1872000
## [260] 0.1919800 0.1673700 0.1799200 0.1406000 0.1742600 0.1771300 0.1627300
## [267] 0.2043900 0.1601000 0.1744100 0.1918000 0.2002700 0.1589400 0.1962800
## [274] 0.1887000 0.1737400 0.1862100 0.1824300 0.1709400 0.2076600 0.1740300
## [281] 0.1902600 0.2283095 0.2023500 0.1617900 0.2102100 0.1515200 0.1773900
## [288] 0.1974200 0.1927800 0.1706200 0.1765800 0.1724900 0.1711000 0.1917700
## [295] 0.1939300 0.1780900 0.1924900 0.1839800 0.1912400 0.1886100 0.1676600
## [302] 0.1858000 0.2370700 0.2234400 0.1849400 0.2150385 0.2348185 0.2029635
## [309] 0.2030300 0.1913700 0.1820300 0.2015400 0.1974900 0.1973100 0.2046000
## [316] 0.1948400 0.2051300 0.1806500 0.1900600 0.1833200 0.1866900 0.1940700
## [323] 0.1817800 0.2190800 0.1703400 0.1672600 0.2024200 0.1969900 0.1945000
## [330] 0.2042900 0.1943200 0.1784700 0.1934400 0.1818500 0.2072700 0.1900100
## [337] 0.1885500 0.1966900 0.1986200 0.1836000 0.1796200 0.1960200 0.1960400
## [344] 0.1937000 0.1942800 0.1958400 0.1700000 0.1706200 0.1812200 0.1889900
## [351] 0.2069100 0.2257100 0.1854600 0.1898100 0.1919800 0.2033800 0.1919900
## [358] 0.1972200 0.2381650 0.1795500 0.2002600 0.2158500 0.2128500 0.2188500
## [365] 0.2608775
# 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
)

#La serie de tiempo de la generación diaria durante el año 2025 muestra una alta volatilidad, con valores que oscilan entre 0,14 y 0,26 toneladas por día, lo cual refleja la naturaleza variable del comportamiento ciudadano y su impacto en el suministro de "combustible" para el proyecto. Operativamente, esta intermitencia implica que el sistema de valorización debe poseer mecanismos de regulación de carga para evitar caídas bruscas en la producción de energía durante los días de baja generación (valles), asegurando así la estabilidad del suministro eléctrico final y evitando el desgaste térmico de los equipos por paradas innecesarias.


# mejorar visualización

# Instalar el paquete 'zoo' para promedios móviles (solo la primera vez)
#install.packages("zoo")

# 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
)

#Esta gráfica representa la serie de tiempo de la generación diaria de residuos (en toneladas) a lo largo del año 2025, donde se observa un comportamiento altamente volátil con fluctuaciones constantes que sugieren patrones cíclicos semanales, manteniendo un nivel base estable entre las 0.16 y 0.20 toneladas durante la mayor parte del periodo. Sin embargo, destaca un incremento significativo y acelerado hacia el final de la gráfica, coincidiendo con el cierre del año, donde los residuos alcanzan su punto máximo cercano a las 0.26 toneladas por día, lo que probablemente refleja un aumento estacional en el consumo y los desechos debido a las festividades de diciembre.


# 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
## 2025 5.643408 5.124737 5.611040 5.537731 5.639547 5.430030 5.611020 5.638376
##           Sep      Oct      Nov      Dec
## 2025 5.442510 5.820609 5.834631 6.149933
# 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
)

#Esta gráfica muestra la Serie de tiempo mensual de residuos (2025), donde se registra la cantidad total de desechos generados mensualmente en toneladas, permitiendo observar una tendencia mucho más clara que la gráfica diaria al agrupar los datos. El año comienza con una caída abrupta hacia su punto mínimo (aproximadamente 5.1 t/mes) cerca de febrero, seguido de una serie de fluctuaciones moderadas entre las 5.4 y 5.7 t/mes durante la mayor parte del año. Finalmente, la gráfica muestra una tendencia ascendente sostenida en el último trimestre, alcanzando su pico máximo por encima de las 6.1 t/mes al finalizar diciembre, lo que confirma un incremento significativo en la generación de residuos durante el periodo de fin de año en comparación con el resto de los meses.

Graficos de de los 12 por días

# Instalar paquetes (solo la primera vez)
# install.packages(c("ggplot2","tidyr"))

# 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()

#Esta gráfica muestra el Patrón diario por mes (12 líneas), superpone la generación de residuos de cada mes del año sobre un ciclo de 31 días, permitiendo comparar visualmente cómo varía la producción de desechos día tras día. Mientras que la mayoría de los meses mantienen fluctuaciones constantes en un rango de entre 0.16 y 0.22 toneladas diarias, resalta de manera drástica el comportamiento de diciembre (representado por la línea rosa intenso), que muestra una tendencia ascendente sostenida que culmina en un pico máximo de aproximadamente 0.26 t/día el día 31. Este patrón es característico del incremento estacional por las festividades de fin de año, periodo en el cual el consumo de empaques, regalos y desperdicios alimentarios suele elevar la carga de residuos en las ciudades significativamente por encima del promedio anual.

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

#Este Calendar heatmap de residuos (diario) es una herramienta visual que organiza la generación de desechos en una cuadrícula donde las columnas representan las semanas del año y las filas los días de la semana, utilizando un degradado de color para mostrar la magnitud de los datos de forma intuitiva. El significado principal de esta gráfica es la identificación de patrones temporales: mientras que la mayor parte del año 2025 se mantiene en tonos azules oscuros (valores bajos), existe una concentración evidente de celdas en azul claro hacia las últimas semanas de 2025 e inicios de 2026, lo que confirma que las festividades de fin de año provocan un aumento crítico y sostenido de hasta 0.26 t/día. Esta visualización permite concluir que el incremento de basura no es un evento aislado, sino una tendencia de consumo masivo que satura el sistema de recolección durante varias semanas consecutivas al cierre del año.

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

#Esta gráfica muestra titulada Residuos por día de la semana, ilustra la distribución y variabilidad de la generación de desechos para cada día específico. En ella se observa que la mediana de residuos se mantiene relativamente constante durante la semana, situándose cerca de las 0.18 t/día, aunque el viernes destaca por tener el nivel central de generación más bajo. Por el contrario, los fines de semana (sábado y domingo) muestran medianas ligeramente superiores, lo que sugiere un incremento en los desechos durante esos días. Resulta especialmente notable la presencia de valores atípicos o picos extremos en el miércoles, donde la generación de basura llega a superar las 0.26 t/día, indicando eventos excepcionales de alta producción que rompen con la tendencia normal de ese día.

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

#El diagrama de cajas  detalla la distribucion de los residuos diarios recolectados en toneladas (t/dia) para cada mes, destacando una tendencia de crecimiento gradual hacia el final del anio. Los meses de enero a septiembre presentan una mediana relativamente estable cercana a las 0.18 toneladas diarias, mientras que a partir de octubre se observa un incremento progresivo que culmina en diciembre con la mediana mas alta del periodo. La visualizacion permite identificar valores atipicos significativos, como un pico excepcional en enero que supera las 0.24 t/dia y una dispersión mas amplia en los meses de septiembre y octubre.
# Instalar el paquete 'forecast' (solo la primera vez)
#install.packages("forecast")

# Cargar el paquete 'forecast'
#install.packages("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(1,1,0) 
## 
## Coefficients:
##           ar1
##       -0.6919
## s.e.   0.2545
## 
## sigma^2 = 0.0544:  log likelihood = 0.6
## AIC=2.79   AICc=4.29   BIC=3.59
## 
## Training set error measures:
##                      ME      RMSE       MAE      MPE     MAPE MASE       ACF1
## Training set 0.06572538 0.2129224 0.1808011 1.036254 3.222722  NaN 0.08663852
# 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       5.931761 5.632846 6.230677 5.474610 6.388913
## Feb 2026       6.082723 5.769946 6.395501 5.604372 6.561075
## Mar 2026       5.978266 5.586925 6.369608 5.379761 6.576772
## Apr 2026       6.050545 5.636189 6.464900 5.416842 6.684247
## May 2026       6.000532 5.538374 6.462690 5.293723 6.707342
## Jun 2026       6.035138 5.546951 6.523325 5.288520 6.781756
## Jul 2026       6.011193 5.487304 6.535082 5.209974 6.812412
## Aug 2026       6.027761 5.477782 6.577741 5.186640 6.868883
## Sep 2026       6.016297 5.436641 6.595953 5.129790 6.902804
## Oct 2026       6.024230 5.419529 6.628930 5.099420 6.949039
## Nov 2026       6.018741 5.387891 6.649590 5.053940 6.983541
## Dec 2026       6.022539 5.367989 6.677089 5.021491 7.023587
#Esta tabla presenta el pronóstico de generación de residuos para cada mes del año 2026. Se puede notar que las predicciones mensuales son bastante estables, manteniéndose casi siempre alrededor de las 6 toneladas. Se espera un pico en febrero con 6.082 toneladas y un mínimo en enero con 5.931 toneladas. Además de la estimación principal, se incluyen rangos de confianza que sugieren que los valores podrían variar aproximadamente entre 5.021 y 7.023 toneladas para el final del año.


# 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
)

#La grafica presenta un analisis integral de la gestion de residuos y energia para el año 2025 y sus proyecciones futuras, donde la recoleccion mensual se mantuvo estable entre 5.12 y 5.64 toneladas, generando un suministro electrico de hasta 3135 kWh para abastecer mensualmente a un grupo de entre 17 y 20 viviendas equivalentes. Los mapas de calor muestran que mientras el año 2025 registro una generacion diaria variable de entre 80 y 140 kWh, la proyeccion para 2026 anticipa un comportamiento mas uniforme y estabilizado, apoyado por un pronostico mensual de residuos que tiende a las 6.0 toneladas con margenes de confianza definidos. El analisis de series temporales descompone la tendencia y estacionalidad de la produccion hasta el año 2070, confirmando que el sistema posee una capacidad operativa solida y predecible para transformar desechos en recursos energeticos a largo plazo.
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)

#La grafica de descomposicion de la serie temporal aditiva desglosa el comportamiento de los datos hasta el año 2070 en cuatro dimensiones clave: el componente observado, que muestra la variabilidad bruta entre 0.14 y 0.26; la tendencia, que revela un crecimiento irregular pero ascendente hacia el final del periodo; la estacionalidad, que exhibe ciclos anuales repetitivos y constantes; y el componente aleatorio, que aisla las fluctuaciones imprevistas del sistema. Este analisis permite confirmar que, a pesar del ruido estadistico y las variaciones estacionales, existe una trayectoria de crecimiento a largo plazo que sustenta la sostenibilidad de la generacion energetica proyectada.

Inciar calculo de genración electrica

# Cargar dplyr por si no está cargado
library(dplyr)

# Definir el poder calorífico inferior (PCI) en MJ/kg (puedes cambiarlo)
PCI_MJ_kg <- 8                      # Supuesto: 8 MJ por kg de residuo

# Definir la eficiencia eléctrica de la planta (fracción entre 0 y 1)
eficiencia_electrica <- 0.25        # Supuesto: 25% de la energía térmica se convierte en electricidad

# Definir el consumo promedio mensual de una vivienda en kWh/mes
consumo_mensual_kWh_hogar <- 170    # Dato dado: 170 kWh por mes por vivienda

# Aproximar el consumo diario de una vivienda (suponiendo 30 días/mes)
consumo_diario_kWh_hogar <- consumo_mensual_kWh_hogar / 30   # kWh/día por vivienda

# Calcular el consumo anual de una vivienda (12 meses)
consumo_anual_kWh_hogar <- consumo_mensual_kWh_hogar * 12    # kWh/año por vivienda
# Ordenar la base por fecha y calcular energía diaria y viviendas equivalentes
datos_residuos_energia <- datos_residuos %>%           # Tomar la base original de residuos
  arrange(fecha) %>%                                   # Ordenar por fecha cronológicamente
  mutate(
    masa_residuos_kg = residuos_totales_t * 1000,      # Convertir toneladas/día a kg/día
    energia_bruta_MJ = masa_residuos_kg * PCI_MJ_kg,   # Energía térmica diaria en MJ
    energia_electrica_kWh = energia_bruta_MJ *         # Energía eléctrica diaria en kWh =
      eficiencia_electrica / 3.6,                      # (MJ * eficiencia) / 3.6 MJ/kWh
    viviendas_equivalentes_dia =                      # Número de viviendas que se podrían abastecer ese día =
      energia_electrica_kWh / consumo_diario_kWh_hogar # kWh disponibles / kWh por vivienda por día
  )

# Ver algunas filas para comprobar los cálculos
head(datos_residuos_energia)                           # Muestra las primeras filas de la tabla con energía
## # A tibble: 6 × 11
##   fecha               dia_semana es_feriado tipo_dia residuos_base_t
##   <dttm>              <chr>      <lgl>      <chr>              <dbl>
## 1 2025-01-01 00:00:00 Wednesday  TRUE       Feriado            0.216
## 2 2025-01-02 00:00:00 Thursday   FALSE      Normal             0.179
## 3 2025-01-03 00:00:00 Friday     FALSE      Normal             0.190
## 4 2025-01-04 00:00:00 Saturday   FALSE      Normal             0.213
## 5 2025-01-05 00:00:00 Sunday     FALSE      Normal             0.186
## 6 2025-01-06 00:00:00 Monday     FALSE      Normal             0.177
## # ℹ 6 more variables: factor_incremento <dbl>, residuos_totales_t <dbl>,
## #   masa_residuos_kg <dbl>, energia_bruta_MJ <dbl>,
## #   energia_electrica_kWh <dbl>, viviendas_equivalentes_dia <dbl>
#Esta tabla ilustra la generación diaria de residuos al comienzo del año 2025, haciendo una comparación entre días normales y feriados. Se puede notar que el miércoles 1 de enero, al ser un día festivo, registró una producción de 0.216 toneladas, una cifra que supera la de la mayoría de los días normales posteriores, que variaron entre 0.177 y 0.213 toneladas. Además de la basura básica, el informe incluye variables como el factor de incremento, la masa en kilogramos y el potencial de energía eléctrica que se podría generar a partir de esos desechos.
# Calcular la energía total anual producida
energia_total_anual_kWh <- sum(                        # Sumar toda la energía del año
  datos_residuos_energia$energia_electrica_kWh         # Vector de energía diaria en kWh
)

energia_total_anual_kWh
## [1] 37490.87
# Calcular cuántas viviendas puedo abastecer en promedio en el año
viviendas_equivalentes_anual <-                        # Número de viviendas equivalentes en el año
  energia_total_anual_kWh / consumo_anual_kWh_hogar    # kWh anuales disponibles / kWh por vivienda por año

# Ver resultados anuales en consola
energia_total_anual_kWh                                # Energía total anual en kWh
## [1] 37490.87
viviendas_equivalentes_anual                           # Viviendas equivalentes abastecidas en el año
## [1] 18.37788
# Crear un resumen semanal con residuos, energía y viviendas equivalentes
resumen_semanal_energia <- datos_residuos_energia %>%      # Tomar la tabla con energía diaria
  mutate(
    semana = lubridate::floor_date(                        # Crear una columna de semana
      fecha, "week", week_start = 1                        # La semana empieza el lunes (1 = lunes)
    )
  ) %>%
  group_by(semana) %>%                                     # Agrupar por semana
  summarise(
    total_residuos_t = sum(residuos_totales_t),            # Suma semanal de residuos (toneladas)
    total_energia_kWh = sum(energia_electrica_kWh),        # Suma semanal de energía (kWh)
    promedio_diario_residuos_t = mean(residuos_totales_t), # Promedio diario de residuos en esa semana
    promedio_diario_energia_kWh = mean(energia_electrica_kWh), # Promedio diario de energía en esa semana
    n_dias = n()                                           # Número de días en esa semana (normalmente 7)
  ) %>%
  ungroup() %>%                                            # Quitar la agrupación
  mutate(
    consumo_semanal_kWh_hogar =                            # Consumo semanal por vivienda
      consumo_diario_kWh_hogar * 7,                        # kWh/día * 7 días
    viviendas_equivalentes_semana =                        # Viviendas equivalentes por semana
      total_energia_kWh / consumo_semanal_kWh_hogar        # kWh semanales disponibles / kWh semanales por vivienda
  )

# Ver las primeras filas del resumen semanal
head(resumen_semanal_energia)                              # Muestra tabla semanal con energía y viviendas
## # A tibble: 6 × 8
##   semana              total_residuos_t total_energia_kWh promedio_diario_resid…¹
##   <dttm>                         <dbl>             <dbl>                   <dbl>
## 1 2024-12-30 00:00:00             1.02              565.                   0.203
## 2 2025-01-06 00:00:00             1.30              722.                   0.186
## 3 2025-01-13 00:00:00             1.20              668.                   0.172
## 4 2025-01-20 00:00:00             1.25              697.                   0.179
## 5 2025-01-27 00:00:00             1.28              710.                   0.183
## 6 2025-02-03 00:00:00             1.22              677.                   0.174
## # ℹ abbreviated name: ¹​promedio_diario_residuos_t
## # ℹ 4 more variables: promedio_diario_energia_kWh <dbl>, n_dias <int>,
## #   consumo_semanal_kWh_hogar <dbl>, viviendas_equivalentes_semana <dbl>
#La tabla detalla que en la semana del 30 de diciembre de 2024 se recolectaron 1.02 toneladas de residuos con un promedio diario de 0.203 toneladas. Para la semana del 6 de enero de 2025, la cantidad subio a 1.30 toneladas totales y el promedio por dia fue de 0.186 toneladas. En las siguientes cuatro semanas, el total de residuos se mantuvo entre 1.20 y 1.28 toneladas, mientras que el promedio diario de basura por semana vario entre 0.172 y 0.183 toneladas. Respecto a la energia, la semana con mayor produccion fue la del 6 de enero con 722 kWh y la mas baja fue la del 30 de diciembre con 565 kWh.
# Crear un resumen mensual con residuos, energía y viviendas equivalentes
resumen_mensual_energia <- datos_residuos_energia %>%      # Tomar la tabla diaria con energía
  mutate(
    mes = lubridate::floor_date(fecha, "month")            # Crear columna con el primer día del mes
  ) %>%
  group_by(mes) %>%                                        # Agrupar por mes
  summarise(
    total_residuos_t = sum(residuos_totales_t),            # Suma mensual de residuos (toneladas)
    total_energia_kWh = sum(energia_electrica_kWh),        # Suma mensual de energía (kWh)
    promedio_diario_residuos_t = mean(residuos_totales_t), # Promedio diario de residuos en el mes
    promedio_diario_energia_kWh = mean(energia_electrica_kWh), # Promedio diario de energía en el mes
    n_dias = n()                                           # Número de días en ese mes (28–31)
  ) %>%
  ungroup() %>%                                            # Quitar agrupación
  mutate(
    viviendas_equivalentes_mes =                           # Viviendas equivalentes por mes
      total_energia_kWh / consumo_mensual_kWh_hogar        # kWh mensuales disponibles / 170 kWh/mes por vivienda
  )

# Ver las primeras filas del resumen mensual
head(resumen_mensual_energia)                              # Muestra la tabla mensual con energía y viviendas
## # A tibble: 6 × 7
##   mes                 total_residuos_t total_energia_kWh promedio_diario_resid…¹
##   <dttm>                         <dbl>             <dbl>                   <dbl>
## 1 2025-01-01 00:00:00             5.64             3135.                   0.182
## 2 2025-02-01 00:00:00             5.12             2847.                   0.183
## 3 2025-03-01 00:00:00             5.61             3117.                   0.181
## 4 2025-04-01 00:00:00             5.54             3077.                   0.185
## 5 2025-05-01 00:00:00             5.64             3133.                   0.182
## 6 2025-06-01 00:00:00             5.43             3017.                   0.181
## # ℹ abbreviated name: ¹​promedio_diario_residuos_t
## # ℹ 3 more variables: promedio_diario_energia_kWh <dbl>, n_dias <int>,
## #   viviendas_equivalentes_mes <dbl>
#Esta tabla presenta un resumen mensual de la generacion de residuos y la energia producida durante el primer semestre de 2025. Se observa que el total de residuos por mes se mantiene estable, con un valor maximo de 5.64 toneladas registrado en enero y mayo, mientras que el nivel mas bajo ocurre en febrero con 5.12 toneladas. En cuanto al promedio diario de residuos, las cifras son constantes y oscilan muy poco, situandose entre 0.181 y 0.185 toneladas cada dia. Respecto a la produccion de energia, los meses con mayor generacion superan los 3130 kWh, mientras que el valor mas bajo coincide con febrero al alcanzar 2847 kWh.

graficos de nergia

# Ver las primeras filas del resumen mensual para comprobar su contenido
head(resumen_mensual_energia)   # Debe tener columnas como mes, total_energia_kWh, viviendas_equivalentes_mes
## # A tibble: 6 × 7
##   mes                 total_residuos_t total_energia_kWh promedio_diario_resid…¹
##   <dttm>                         <dbl>             <dbl>                   <dbl>
## 1 2025-01-01 00:00:00             5.64             3135.                   0.182
## 2 2025-02-01 00:00:00             5.12             2847.                   0.183
## 3 2025-03-01 00:00:00             5.61             3117.                   0.181
## 4 2025-04-01 00:00:00             5.54             3077.                   0.185
## 5 2025-05-01 00:00:00             5.64             3133.                   0.182
## 6 2025-06-01 00:00:00             5.43             3017.                   0.181
## # ℹ abbreviated name: ¹​promedio_diario_residuos_t
## # ℹ 3 more variables: promedio_diario_energia_kWh <dbl>, n_dias <int>,
## #   viviendas_equivalentes_mes <dbl>
#Esta tabla ofrece un resumen mensual del primer semestre de 2025 sobre la generación de residuos y energía eléctrica. Durante este tiempo, la cantidad total de residuos recolectados cada mes se mantuvo bastante estable, alcanzando un pico de 5.64 toneladas en enero y mayo, y un mínimo de 5.12 toneladas en febrero. El promedio diario de basura fue muy constante, variando apenas entre 0.181 y 0.185 toneladas al día. En lo que respecta a la generación de energía, el sistema produjo entre 2847 kWh (en febrero) y 3135 kWh (en enero) al mes. Estos resultados sugieren que, a pesar de las pequeñas fluctuaciones mensuales en el tonelaje total, la producción diaria de residuos y la generación de energía asociada se comportan de manera regular y predecible durante la primera mitad del año.

# Crear un gráfico de barras con la energía total mensual (kWh)
barplot(
  height = resumen_mensual_energia$total_energia_kWh,     # Altura de cada barra = energía total del mes en kWh
  names.arg = format(resumen_mensual_energia$mes, "%b"),  # Etiquetas del eje X = abreviatura del mes (Ene, Feb, etc.)
  main = "Energía mensual generada a partir de residuos (kWh)",  # Título del gráfico
  xlab = "Mes",                                           # Etiqueta del eje X
  ylab = "Energía generada (kWh/mes)"                     # Etiqueta del eje Y
)

#Este gráfico de barras presenta la Energía mensual generada a partir de residuos (kWh), traduciendo el volumen de basura recolectada en su equivalente de potencial energético para cada mes del año 2025. Los datos revelan una producción de energía mayoritariamente estable que oscila cerca de los 3,000 kWh/mes, aunque se distingue una reducción clara en febrero, que representa el rendimiento más bajo del periodo debido a la menor cantidad de días y la baja generación de desechos registrada en ese mes. Por el contrario, la gráfica alcanza su máximo nivel en diciembre, superando significativamente la barrera de los 3,000 kWh, lo que demuestra que el incremento de residuos al cierre del año, aunque supone un reto logístico, también ofrece la mayor oportunidad para la recuperación y aprovechamiento de energía.


# Verificar que la columna viviendas_equivalentes_mes existe
head(resumen_mensual_energia$viviendas_equivalentes_mes)  # Muestra algunos valores de viviendas por mes
## [1] 18.44251 16.74750 18.33673 18.09716 18.42989 17.74520
# Crear un gráfico de barras con viviendas equivalentes por mes
barplot(
  height = resumen_mensual_energia$viviendas_equivalentes_mes,   # Altura = número de viviendas equivalentes por mes
  names.arg = format(resumen_mensual_energia$mes, "%b"),         # Etiquetas de los meses en el eje X
  main = "Viviendas equivalentes abastecidas por mes",           # Título del gráfico
  xlab = "Mes",                                                  # Etiqueta del eje X
  ylab = "Viviendas equivalentes (unidad)"                       # Etiqueta del eje Y
)

#Esta gráfica de barras Viviendas equivalentes abastecidas por mes, traduce la energía recuperada de los residuos en un impacto social tangible al mostrar cuántos hogares podrían abastecerse de electricidad mensualmente durante el año 2025. La capacidad de suministro se mantiene estable durante la mayor parte del año, oscilando generalmente entre las 17 y 19 viviendas, con su punto más bajo en febrero, donde el abastecimiento cae a aproximadamente 17 hogares. Por el contrario, el mes de diciembre alcanza el máximo rendimiento del periodo al proporcionar energía suficiente para 20 viviendas equivalentes, lo que demuestra que el incremento estacional en la producción de residuos al cierre del año se traduce directamente en un mayor potencial de beneficio comunitario a través de la valorización energética.
# Cargar dplyr por si no está cargado
library(dplyr)

# Definir el consumo mensual promedio por vivienda en kWh/mes
consumo_mensual_kWh_hogar <- 170      # Dato que tú diste: 170 kWh por mes

# Calcular el consumo diario promedio por vivienda (aprox. 30 días/mes)
consumo_diario_kWh_hogar <- consumo_mensual_kWh_hogar / 30   # kWh por día por vivienda

# Crear una nueva columna con viviendas equivalentes promedio por día en cada mes
resumen_mensual_energia <- resumen_mensual_energia %>%              # Tomar el resumen mensual que ya tienes
  mutate(
    viviendas_promedio_diarias =                                     # Nueva columna: viviendas promedio por día en el mes
      promedio_diario_energia_kWh / consumo_diario_kWh_hogar         # Energía diaria promedio / consumo diario por vivienda
  )

# Ver las primeras filas para comprobar las nuevas columnas
head(resumen_mensual_energia)    # Debes ver 'promedio_diario_energia_kWh' y 'viviendas_promedio_diarias'
## # A tibble: 6 × 8
##   mes                 total_residuos_t total_energia_kWh promedio_diario_resid…¹
##   <dttm>                         <dbl>             <dbl>                   <dbl>
## 1 2025-01-01 00:00:00             5.64             3135.                   0.182
## 2 2025-02-01 00:00:00             5.12             2847.                   0.183
## 3 2025-03-01 00:00:00             5.61             3117.                   0.181
## 4 2025-04-01 00:00:00             5.54             3077.                   0.185
## 5 2025-05-01 00:00:00             5.64             3133.                   0.182
## 6 2025-06-01 00:00:00             5.43             3017.                   0.181
## # ℹ abbreviated name: ¹​promedio_diario_residuos_t
## # ℹ 4 more variables: promedio_diario_energia_kWh <dbl>, n_dias <int>,
## #   viviendas_equivalentes_mes <dbl>, viviendas_promedio_diarias <dbl>
#En el mes de enero se recolectaron 5.64 toneladas de residuos totales que generaron 3135 kWh de energía, con un promedio diario de 0.182 toneladas. Para febrero, el total de residuos bajo a 5.12 toneladas y la energía a 2847 kWh, aunque el promedio diario subio levemente a 0.183 toneladas. Durante marzo y mayo la recoleccion fue de 5.61 y 5.64 toneladas respectivamente, produciendo mas de 3100 kWh en cada mes con promedios diarios de 0.181 y 0.182 toneladas. En abril se registraron 5.54 toneladas totales con el promedio diario mas alto del semestre de 0.185 toneladas, mientras que junio cerro con 5.43 toneladas recolectadas y 3017 kWh generados.

ultimo

library(dplyr)
library(tidyr)
library(lubridate)
library(ggplot2)

# =========================
# 1) ENERGÍA DIARIA REAL 2025 (kWh/día)
# =========================
energia_2025 <- datos_residuos_energia %>%
  mutate(fecha = as.Date(fecha)) %>%
  group_by(fecha) %>%
  summarise(energia_kWh = sum(energia_electrica_kWh, na.rm = TRUE), .groups = "drop") %>%
  filter(year(fecha) == 2025)

# =========================
# 2) PESOS POR DÍA DE SEMANA (a partir de 2025)
#    Esto se usa para repartir el total mensual pronosticado de 2026 en días
# =========================
pesos_dow <- datos_residuos %>%
  mutate(fecha = as.Date(fecha)) %>%
  filter(year(fecha) == 2025) %>%
  mutate(dia_sem = wday(fecha, week_start = 1, label = TRUE, abbr = TRUE)) %>%
  group_by(dia_sem) %>%
  summarise(media_t = mean(residuos_totales_t, na.rm = TRUE), .groups = "drop") %>%
  mutate(peso = media_t / mean(media_t, na.rm = TRUE)) %>%
  select(dia_sem, peso)

# =========================
# 3) RESIDUOS MENSUALES PROYECTADOS 2026 (desde tu forecast)
# =========================
residuos_2026_mensual <- tibble(
  mes = seq.Date(as.Date("2026-01-01"), by = "month", length.out = 12),
  total_residuos_t = as.numeric(pronostico_2026$mean)   # <-- total t/mes pronosticado
)

# =========================
# 4) DESAGREGAR A DIARIO 2026 CONSERVANDO TOTALES MENSUALES
#    usando el patrón de día de semana de 2025
# =========================
residuos_2026_diario <- residuos_2026_mensual %>%
  rowwise() %>%
  mutate(
    fechas = list(seq.Date(mes, ceiling_date(mes, "month") - days(1), by = "day"))
  ) %>%
  unnest(fechas) %>%
  rename(fecha = fechas) %>%
  mutate(
    dia_sem = wday(fecha, week_start = 1, label = TRUE, abbr = TRUE)
  ) %>%
  left_join(pesos_dow, by = "dia_sem") %>%
  group_by(mes) %>%
  mutate(
    # normalizar pesos dentro del mes para que la suma diaria = total mensual
    peso_norm = peso / sum(peso, na.rm = TRUE),
    residuos_t_dia = total_residuos_t * peso_norm
  ) %>%
  ungroup()

# =========================
# 5) PASAR RESIDUOS 2026 -> ENERGÍA 2026 (kWh/día)
# =========================
energia_2026 <- residuos_2026_diario %>%
  mutate(
    masa_kg = residuos_t_dia * 1000,
    energia_bruta_MJ = masa_kg * PCI_MJ_kg,
    energia_kWh = energia_bruta_MJ * eficiencia_electrica / 3.6
  ) %>%
  select(fecha, energia_kWh)

# =========================
# 6) UNIR 2025 (real) + 2026 (proyectado)
# =========================
energia_all <- bind_rows(
  energia_2025 %>% mutate(tipo = "Real 2025"),
  energia_2026 %>% mutate(tipo = "Proyección 2026")
) %>%
  mutate(
    anio = year(fecha),
    # semana del año basada en lunes (sin problemas de ISO-year)
    semana_inicio = floor_date(fecha, "week", week_start = 1),
    semana0 = floor_date(as.Date(paste0(anio, "-01-01")), "week", week_start = 1),
    semana = as.integer(difftime(semana_inicio, semana0, units = "weeks")) + 1,
    dia_sem = wday(fecha, week_start = 1, label = TRUE, abbr = TRUE)
  )

# (opcional) completar días faltantes para que el heatmap no quede "hueco"
energia_all <- energia_all %>%
  group_by(anio, tipo) %>%
  complete(
    fecha = seq.Date(min(fecha), max(fecha), by = "day")
  ) %>%
  ungroup() %>%
  mutate(
    semana_inicio = floor_date(fecha, "week", week_start = 1),
    semana0 = floor_date(as.Date(paste0(year(fecha), "-01-01")), "week", week_start = 1),
    semana = as.integer(difftime(semana_inicio, semana0, units = "weeks")) + 1,
    dia_sem = wday(fecha, week_start = 1, label = TRUE, abbr = TRUE)
  )

# =========================
# 7) HEATMAP (ENERGÍA kWh/día) 2025 vs 2026
# =========================
ggplot(energia_all, aes(x = semana, y = dia_sem, fill = energia_kWh)) +
  geom_tile(color = NA) +
  facet_wrap(~ tipo, ncol = 1) +
  labs(
    title = "Heatmap calendario de generación de energía (kWh/día): 2025 real vs 2026 proyectado",
    x = "Semana del año (inicio lunes)",
    y = "Día de la semana",
    fill = "kWh/día"
  ) +
  theme_minimal()

#Este mapa de calor comparativo, visualiza la distribución diaria de la producción energética real del año 2025 frente a una proyección estimada para el 2026. Mientras que los datos reales de 2025 muestran una alta volatilidad diaria con picos claros (en azul celeste) que superan los 120 kWh/día hacia finales de año, la proyección para 2026 ofrece una visión mucho más suavizada y estable de la capacidad energética esperada. En la sección inferior, se observa cómo la generación real de 2025 fluctúa constantemente entre los 80 y 140 kWh/día dependiendo del día de la semana, mientras que la sección superior organiza la expectativa de 2026 en bloques semanales más uniformes, destacando una fase de mayor rendimiento relativo durante el primer trimestre antes de estabilizarse en valores medios para el resto del año.