#------------------ UNIVERSIDAD CENTRAL DEL ECUADOR
##-----Faculta de Ingeniería en Geología, Minas, Petróleo y Ambiental 
###-----------------Carrera de Ingeniería Ambiental

# Proyecto: Estudio de Residuos y Reciclaje en la India
# Etapa: Estadística Inferencial

# Cargar los datos
datos <- read.csv("Waste_Management_and_Recycling_India.csv", header = TRUE, sep = ";", dec = ".")

# Estructura
str(datos)
## 'data.frame':    850 obs. of  13 variables:
##  $ City.District                    : chr  "Mumbai" "Mumbai" "Mumbai" "Mumbai" ...
##  $ Waste.Type                       : chr  "Plastic" "Organic" "E-Waste" "Construction" ...
##  $ Waste.Generated..Tons.Day.       : int  6610 1181 8162 8929 5032 7456 7118 9189 8609 6632 ...
##  $ Recycling.Rate....               : int  68 56 53 56 44 73 37 57 48 71 ...
##  $ Population.Density..People.km..  : int  11191 11191 11191 11191 11191 11191 11191 11191 11191 11191 ...
##  $ Municipal.Efficiency.Score..1.10.: int  9 5 8 5 7 9 6 10 8 6 ...
##  $ Disposal.Method                  : chr  "Composting" "Composting" "Incineration" "Landfill" ...
##  $ Cost.of.Waste.Management....Ton. : int  3056 2778 3390 1498 2221 3195 3686 1791 1681 2311 ...
##  $ Awareness.Campaigns.Count        : int  14 12 13 14 16 6 14 12 20 12 ...
##  $ Landfill.Name                    : chr  "Mumbai Landfill" "Mumbai Landfill" "Mumbai Landfill" "Mumbai Landfill" ...
##  $ Landfill.Location..Lat..Long.    : chr  "22.4265, 77.4931" "22.4265, 77.4931" "22.4265, 77.4931" "22.4265, 77.4931" ...
##  $ Landfill.Capacity..Tons.         : int  45575 45575 45575 45575 45575 45575 45575 45575 45575 45575 ...
##  $ Year                             : int  2019 2019 2019 2019 2019 2020 2020 2020 2020 2020 ...
options(scipen = 999)

# Extraer y limpiar la variable
densidad_poblacional <- datos$Population.Density..People.km..
densidad_poblacional <- na.omit(densidad_poblacional)

# Filtrado
densidad_filtrada <- densidad_poblacional[densidad_poblacional >= 18000 & densidad_poblacional <= 30000]
breaks_filtrados <- seq(18000, 30000, by = 2000)

# Desplazamiento para aplicar exponencial
base <- 18000
densidad <- densidad_filtrada - base

# Calcular lambda para la exponencial
lambda <- 1 / mean(densidad)

hist(densidad_filtrada,
     breaks = breaks_filtrados,
     col = "orange2",
     freq = FALSE,
     main = "Gráfica No. 115: Distribución de Probabilidad de la Densidad Poblacional 
     en el Estudio de Residuos de la India",
     xlab = "Densidad poblacional (Personas/km²)",
     ylab = "Densidad de probabilidad", cex.main = 0.9)

# Histograma
HIST<- hist(densidad_filtrada,
     breaks = breaks_filtrados,
     col = "orange2",
     freq = FALSE,
     main = "Gráfica No. 116: Comparación de Realidad y Modelo de la Densidad Poblacional
     en el Estudio de Residuos de la India",
     xlab = "Densidad poblacional (Personas/km²)",
     ylab = "Densidad de probabilidad", cex.main = 0.9)

# Superponer curva exponencial desplazada
curve(dexp(x - base, rate = lambda),
      from = 18000, to = 30000,
      col = "blue", lwd = 2, add = TRUE)

FO <- (HIST$counts/length(densidad_filtrada))*100
FO
## [1] 50.000000 16.666667 25.000000  8.333333  0.000000  0.000000
liminf<- HIST$breaks[1:6]
limsup<- HIST$breaks[2:7]
P<-c()
for (i in 1:length(HIST$counts)) 
{P[i] <-(pexp(limsup[i],rate=lambda)-pexp(liminf[i],rate=lambda))
}
P
## [1] 0.00083203781 0.00040779291 0.00019986479 0.00009795642 0.00004800976
## [6] 0.00002353023
# PEARSON
FE <- P *100
FE
## [1] 0.083203781 0.040779291 0.019986479 0.009795642 0.004800976 0.002353023
cor(FO,FE)
## [1] 0.9310261
plot(FO, FE,
     main = "Gráfica No. 117: Correlación entre la Frecuencia Observada 
     y Frecuencia Esperada en el modelo Exponencial",
     xlab = "Frecuencia Observada",
     ylab = "Frecuencia Esperada",
     col = "darkgreen", pch = 19, cex.main=0.9)  
modelo_lineal <- lm(FE ~ FO)
abline(modelo_lineal, col = "red", lwd = 2)

# CHI CUADRADO
x2<-sum(((FO-FE)^2)/FE)
x2
## [1] 75019.07
VC<- qchisq(0.9999999999999,6)
VC
## [1] 72.9779
x2> VC
## [1] TRUE
# INTERVALOS DE CONFIANZA
V <- densidad_filtrada

limite_inf <- mean(V) - 2 * (sd(V) / sqrt(length(V)))
limite_sup <- mean(V) + 2 * (sd(V) / sqrt(length(V)))


# PROBABILIDAD
# Secuencia de valores para el eje x
x <- seq(min(densidad_filtrada), max(densidad_filtrada), 0.1)

x_area <- seq(25000, 27000, length.out = 100)
y_area <- dexp(x_area - base, rate = lambda)


prob_area <- pexp(27000 - base, rate = lambda) - pexp(25000 - base, rate = lambda)
porcentaje <- round(prob_area * 100, 2)

x <- seq(min(densidad_filtrada), max(densidad_filtrada), 0.1)

plot(x,
     dexp(x - base, rate = lambda),
     type = "l",
     col = "blue",
     lwd = 2,
     main = "Gráfica No. 118: Cálculo de Probabilidad de la Densidad Poblacional 
     en el Estudio de Residuos de la India",
     ylab = "Densidad de probabilidad",
     xlim = c(24000, 27500),
     ylim = c(0, max(y_area) * 4),
     cex.main = 0.9)

polygon(c(25000, x_area, 27000),
        c(0, y_area, 0),
        col = rgb(0, 0, 1, alpha = 0.4),
        border = NA)

lines(x, dexp(x - base, rate = lambda),
      col = "blue",
      lwd = 2)

legend("topright",
       legend = c("Modelo Exponencial", "Área entre 25.000 y 27.000"),
       col = c("blue", rgb(0, 0, 1, alpha = 0.4)),
       lwd = c(2, NA),
       pch = c(NA, 15),
       pt.cex = 1.2,
       bty = "n",
       cex = 0.8)

text(x = 25200,
     y = max(y_area) + 0.000002,
     labels = paste0(porcentaje, "%"),
     col = "blue",
     font = 2,
     cex = 0.9)

cat("La probabilidad de que la densidad poblacional esté entre 25,000 y 27,000 personas/km² es de:",
    round(prob_area * 100, 2), "%\n")
## La probabilidad de que la densidad poblacional esté entre 25,000 y 27,000 personas/km² es de: 4.2 %
# Cargar librería para formatear tablas
library(knitr)

# === Tabla 1: Modelo de distribución exponencial para densidad poblacional ===
tabla_modelos_1 <- data.frame(
  "Densidad Poblacional (personas/km²)" = c("[18.000, 30.000]", ""),
  "Modelo" = c("Exponencial", ""),
  "Parámetro" = c(paste("λ =", round(lambda, 5)), ""),
  "Test de Pearson" = c(round(cor(FO, FE), 2), ""),
  "Dominio del Modelo" = c("x ∈ (18000, ∞)", "")
)

# === Intervalo de confianza al 95% ===
media <- mean(densidad_filtrada)
n <- length(densidad_filtrada)
desv <- sd(densidad_filtrada)
error <- 2 * (desv / sqrt(n))

limite_inf <- round(media - error, 2)
limite_sup <- round(media + error, 2)

# === Tabla 2: Intervalo de confianza ===
tabla_intervalos <- data.frame(
  "Intervalo de Confianza" = c("Límite Inferior", "Límite Superior"),
  "Grado de Confianza (%)" = c(95, 95),
  "Densidad Poblacional (personas/km²)" = c(limite_inf, limite_sup)
)

# === Mostrar tablas con formato ===
kable(tabla_modelos_1, align = "c", caption = "Tabla 1: Conclusiones del Modelo Exponencial para la Densidad Poblacional")
Tabla 1: Conclusiones del Modelo Exponencial para la Densidad Poblacional
Densidad.Poblacional..personas.km.. Modelo Parámetro Test.de.Pearson Dominio.del.Modelo
[18.000, 30.000] Exponencial λ = 0.00036 0.93 x ∈ (18000, ∞)
kable(tabla_intervalos, align = "c", caption = "Tabla 2: Intervalo de Confianza del 95% para la Densidad Poblacional")
Tabla 2: Intervalo de Confianza del 95% para la Densidad Poblacional
Intervalo.de.Confianza Grado.de.Confianza…. Densidad.Poblacional..personas.km..
Límite Inferior 95 20561.47
Límite Superior 95 21047.69