install.packages("ggplot2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("scatterplot3d")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("car")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
# Carga de librerías
# ==============================
library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(scatterplot3d)
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
# Lectura y vista previa de datos
# ==============================

datos <- read.csv("/cloud/project/Waste_Management_and_Recycling_India.csv xd.csv", sep = ";", header = TRUE)
head(datos)
##   City.District   Waste.Type Waste.Generated..Tons.Day. Recycling.Rate....
## 1        Mumbai      Plastic                       6610                 68
## 2        Mumbai      Organic                       1181                 56
## 3        Mumbai      E-Waste                       8162                 53
## 4        Mumbai Construction                       8929                 56
## 5        Mumbai    Hazardous                       5032                 44
## 6        Mumbai      Plastic                       7456                 73
##   Population.Density..People.km.. Municipal.Efficiency.Score..1.10.
## 1                           11191                                 9
## 2                           11191                                 5
## 3                           11191                                 8
## 4                           11191                                 5
## 5                           11191                                 7
## 6                           11191                                 9
##   Disposal.Method Cost.of.Waste.Management....Ton. Awareness.Campaigns.Count
## 1      Composting                             3056                        14
## 2      Composting                             2778                        12
## 3    Incineration                             3390                        13
## 4        Landfill                             1498                        14
## 5       Recycling                             2221                        16
## 6        Landfill                             3195                         6
##     Landfill.Name Landfill.Location..Lat..Long. Landfill.Capacity..Tons. Year
## 1 Mumbai Landfill              22.4265, 77.4931                    45575 2019
## 2 Mumbai Landfill              22.4265, 77.4931                    45575 2019
## 3 Mumbai Landfill              22.4265, 77.4931                    45575 2019
## 4 Mumbai Landfill              22.4265, 77.4931                    45575 2019
## 5 Mumbai Landfill              22.4265, 77.4931                    45575 2019
## 6 Mumbai Landfill              22.4265, 77.4931                    45575 2020
# ==============================
# Extracción de variables clave
# ==============================
# Limpiar nombres de columnas automáticamente
names(datos) <- make.names(names(datos), unique = TRUE)


Reciclaje <- datos$Recycling.Rate....
Residuos <- datos$Waste.Generated..Tons.Day.
Costo <- datos$Cost.of.Waste.Management....Ton.
Eficiencia <- datos$Municipal.Efficiency.Score..1.10.
Campanas <- datos$Awareness.Campaigns.Count
Densidad <- datos$Population.Density..People.km.2.

Ciudad <- datos$City.District

# ==============================
# REGRESIÓN LINEAL: Campañas vs Reciclaje
# ==============================

# Diagrama de dispersión
plot(Campanas, Reciclaje,
     xlab = "Campañas de Concientización",
     ylab = "Tasa de Reciclaje (%)",
     main = "Campañas vs Reciclaje",
     col = "darkgreen", pch = 16)

# Modelo de regresión lineal
modelo_lineal <- lm(Reciclaje ~ Campanas)
summary(modelo_lineal)
## 
## Call:
## lm(formula = Reciclaje ~ Campanas)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -27.5291 -13.6608  -0.7751  13.9622  28.3392 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 57.52908    1.05964  54.291   <2e-16 ***
## Campanas    -0.04570    0.09123  -0.501    0.617    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.14 on 848 degrees of freedom
## Multiple R-squared:  0.0002958,  Adjusted R-squared:  -0.0008831 
## F-statistic: 0.2509 on 1 and 848 DF,  p-value: 0.6166
# Línea de regresión
abline(modelo_lineal, col = "blue", lwd = 2)

# Coeficiente de correlación
r <- cor(Campanas, Reciclaje)
r2 <- r^2 * 100
cat("R²:", round(r2, 2), "%\n")
## R²: 0.03 %
# ==============================
# REGRESIÓN EXPONENCIAL: Costo vs Reciclaje
# ==============================

x <- Costo
y <- Reciclaje + 0.1
ylog <- log(y)

modelo_exp <- lm(ylog ~ x)
summary(modelo_exp)
## 
## Call:
## lm(formula = ylog ~ x)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.59955 -0.23949  0.02413  0.26073  0.44100 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.004e+00  2.456e-02 163.041   <2e-16 ***
## x           -2.873e-07  8.033e-06  -0.036    0.971    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2987 on 848 degrees of freedom
## Multiple R-squared:  1.509e-06,  Adjusted R-squared:  -0.001178 
## F-statistic: 0.001279 on 1 and 848 DF,  p-value: 0.9715
a <- exp(coef(modelo_exp)[1])
b <- coef(modelo_exp)[2]

# Gráfico
plot(Costo, Reciclaje,
     xlab = "Costo por Tonelada (₹)",
     ylab = "Tasa de Reciclaje (%)",
     main = "Costo vs Reciclaje (Exponencial)",
     col = "purple", pch = 16)
curve(a * exp(b * x), add = TRUE, col = "red", lwd = 2)

r <- cor(x, ylog)
r2 <- r^2 * 100
cat("R² exponencial:", round(r2, 2), "%\n")
## R² exponencial: 0 %
# ==============================
# REGRESIÓN POTENCIAL: Residuos vs Reciclaje
# ==============================

x <- Residuos + 0.01
y <- Reciclaje
modelo_pot <- lm(log(y) ~ log(x))
summary(modelo_pot)
## 
## Call:
## lm(formula = log(y) ~ log(x))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.62165 -0.23170  0.02986  0.26435  0.45103 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.09939    0.11687  35.076   <2e-16 ***
## log(x)      -0.01171    0.01393  -0.841    0.401    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2992 on 848 degrees of freedom
## Multiple R-squared:  0.0008328,  Adjusted R-squared:  -0.0003454 
## F-statistic: 0.7068 on 1 and 848 DF,  p-value: 0.4007
a <- exp(coef(modelo_pot)[1])
b <- coef(modelo_pot)[2]

plot(x, y, col = "orange", pch = 16,
     main = "Residuos vs Reciclaje (Potencial)",
     xlab = "Residuos Generados (Tons/día)",
     ylab = "Tasa de Reciclaje (%)")
curve(a * x^b, add = TRUE, col = "blue", lwd = 2)

r <- cor(log(x), log(y))
r2 <- r^2 * 100
cat("R² potencial:", round(r2, 2), "%\n")
## R² potencial: 0.08 %
# ==============================
# REGRESIÓN LOGARÍTMICA: Eficiencia vs Reciclaje
# ==============================

x <- log(Eficiencia)
y <- Reciclaje
modelo_log <- lm(y ~ x)
summary(modelo_log)
## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -27.9399 -13.9399  -0.8248  13.4927  28.7046 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   61.758      4.590  13.456   <2e-16 ***
## x             -2.372      2.309  -1.028    0.304    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.13 on 848 degrees of freedom
## Multiple R-squared:  0.001244,   Adjusted R-squared:  6.589e-05 
## F-statistic: 1.056 on 1 and 848 DF,  p-value: 0.3044
a <- coef(modelo_log)[1]
b <- coef(modelo_log)[2]

plot(Eficiencia, Reciclaje, col = "dodgerblue3", pch = 16,
     main = "Eficiencia vs Reciclaje (Logarítmica)",
     xlab = "Puntaje de Eficiencia Municipal",
     ylab = "Tasa de Reciclaje (%)")
curve(a + b * log(x), add = TRUE, col = "red", lwd = 2)

r <- cor(x, y)
r2 <- r^2 * 100
cat("R² logarítmico:", round(r2, 2), "%\n")
## R² logarítmico: 0.12 %
# REGRESIÓN POLINÓMICA: Densidad poblacional vs Tasa de reciclaje
# ==============================

# Definir variables
x4 <- datos$Population.Density..People.km..
y4 <- datos$Recycling.Rate....

# Crear términos polinómicos
x4_2 <- x4^2
x4_3 <- x4^3

# Ajustar el modelo de regresión polinómica de tercer grado
modelo_poly <- lm(y4 ~ x4 + x4_2 + x4_3)
summary(modelo_poly)
## 
## Call:
## lm(formula = y4 ~ x4 + x4_2 + x4_3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -28.7338 -13.9866  -0.6589  13.9728  28.9919 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.876e+01  3.810e+00  15.424   <2e-16 ***
## x4           7.570e-05  1.141e-03   0.066    0.947    
## x4_2        -3.186e-08  9.682e-08  -0.329    0.742    
## x4_3         1.067e-12  2.426e-12   0.440    0.660    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.13 on 846 degrees of freedom
## Multiple R-squared:  0.003411,   Adjusted R-squared:  -0.000123 
## F-statistic: 0.9652 on 3 and 846 DF,  p-value: 0.4085
# Extraer coeficientes
a <- coef(modelo_poly)[1]
b <- coef(modelo_poly)[2]
c <- coef(modelo_poly)[3]
d <- coef(modelo_poly)[4]

# Graficar con curva polinómica ajustada
plot(x4, y4,
     xlab = "Densidad Poblacional (hab/km²)",
     ylab = "Tasa de Reciclaje (%)",
     main = "Regresión Polinómica",
     col = "tomato", pch = 16)
curve(a + b*x + c*x^2 + d*x^3,
      from = min(x4), to = max(x4),
      add = TRUE, col = "blue", lwd = 2)

# ==============================
# REGRESIÓN MÚLTIPLE
# ==============================

modelo_multi <- lm(Reciclaje ~ Residuos + Costo + Eficiencia + Campanas)
summary(modelo_multi)
## 
## Call:
## lm(formula = Reciclaje ~ Residuos + Costo + Eficiencia + Campanas)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -28.439 -13.806  -0.819  13.954  29.390 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.083e+01  3.080e+00  19.747   <2e-16 ***
## Residuos    -1.902e-04  1.991e-04  -0.955    0.340    
## Costo       -5.265e-05  4.358e-04  -0.121    0.904    
## Eficiencia  -2.944e-01  3.229e-01  -0.912    0.362    
## Campanas    -4.313e-02  9.137e-02  -0.472    0.637    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.15 on 845 degrees of freedom
## Multiple R-squared:  0.002406,   Adjusted R-squared:  -0.002316 
## F-statistic: 0.5096 on 4 and 845 DF,  p-value: 0.7287
# VIF para verificar multicolinealidad
vif(modelo_multi)
##   Residuos      Costo Eficiencia   Campanas 
##   1.002226   1.007294   1.006724   1.001628
# Gráfico 3D
scatterplot3d(Eficiencia, Campanas, Reciclaje,
              main = "Reciclaje vs Eficiencia y Campañas",
              xlab = "Eficiencia",
              ylab = "Campañas",
              zlab = "Reciclaje (%)",
              color = "darkblue", pch = 16, angle = 35)

# ==============================
# CONCLUSIONES
# ==============================

# - Las ciudades con mayor tasa de reciclaje tienden a tener más campañas y mejor eficiencia.
# - El costo tiene una relación exponencial: a mayor costo, menor reciclaje.
# - El modelo múltiple permite estimar la tasa de reciclaje con base en residuos, eficiencia, costo y campañas.
# - El modelo presenta un buen ajuste (ver R² ajustado) y no hay alta colinealidad entre predictores.





# ============================================================
# Alternativas al modelo clásico: enfoque logístico y clustering

# Justificación:
# Dado que los modelos lineales, exponenciales, polinómicos y múltiples
# no arrojaron resultados estadísticamente significativos (R² < 1% y p-valores > 0.05),
# se plantea un nuevo enfoque para identificar patrones y perfiles más útiles
# en torno al reciclaje urbano.

# 1. MODELO LOGÍSTICO: Clasificación binaria del reciclaje

# Creamos una variable binaria: 1 = alta tasa de reciclaje (≥ 60%), 0 = baja
datos$AltaReciclaje <- ifelse(datos$Recycling.Rate.... >= 60, 1, 0)

# Modelo logístico usando predictores relevantes
modelo_logistico <- glm(AltaReciclaje ~ Waste.Generated..Tons.Day. +
                          Cost.of.Waste.Management....Ton. +
                          Municipal.Efficiency.Score..1.10. +
                          Awareness.Campaigns.Count,
                        data = datos,
                        family = "binomial")

summary(modelo_logistico)
## 
## Call:
## glm(formula = AltaReciclaje ~ Waste.Generated..Tons.Day. + Cost.of.Waste.Management....Ton. + 
##     Municipal.Efficiency.Score..1.10. + Awareness.Campaigns.Count, 
##     family = "binomial", data = datos)
## 
## Coefficients:
##                                     Estimate Std. Error z value Pr(>|z|)
## (Intercept)                        1.204e-01  3.835e-01   0.314    0.754
## Waste.Generated..Tons.Day.        -3.118e-06  2.480e-05  -0.126    0.900
## Cost.of.Waste.Management....Ton.   1.404e-05  5.429e-05   0.259    0.796
## Municipal.Efficiency.Score..1.10. -3.364e-02  4.024e-02  -0.836    0.403
## Awareness.Campaigns.Count         -9.361e-03  1.139e-02  -0.822    0.411
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1170.0  on 849  degrees of freedom
## Residual deviance: 1168.5  on 845  degrees of freedom
## AIC: 1178.5
## 
## Number of Fisher Scoring iterations: 3
# Interpretación esperada:
# - Si algún coeficiente tiene p-valor < 0.05, indica que influye significativamente
#   en la probabilidad de que una ciudad tenga alta tasa de reciclaje.
# - La regresión logística no requiere que la relación sea lineal, lo que la hace ideal
#   en este contexto.

# ============================================================
# 2. AGRUPAMIENTO (CLUSTERING): Identificación de perfiles de ciudad
# ============================================================

# Seleccionar solo variables numéricas relevantes
variables_cluster <- datos %>%
  select(Waste.Generated..Tons.Day., Cost.of.Waste.Management....Ton.,
         Municipal.Efficiency.Score..1.10., Awareness.Campaigns.Count,
         Recycling.Rate....)

# Escalar variables (muy importante para clustering)
variables_cluster_scaled <- scale(variables_cluster)

# Aplicamos K-means con 3 grupos como propuesta inicial
set.seed(123)
kmeans_result <- kmeans(variables_cluster_scaled, centers = 3)

# Agregamos la clasificación al dataset
datos$GrupoResiduo <- kmeans_result$cluster

# Visualización de perfiles por grupo
library(ggplot2)
ggplot(datos, aes(x = as.factor(GrupoResiduo), y = Recycling.Rate....)) +
  geom_boxplot(fill = "skyblue") +
  labs(title = "Tasa de Reciclaje por Grupo de Manejo de Residuos",
       x = "Grupo Identificado",
       y = "Tasa de Reciclaje (%)")

# Interpretación:
# Los grupos representan perfiles de ciudad con manejo de residuos similar.
# Podemos identificar si existe un grupo que se asocie consistentemente
# con tasas más altas o más bajas de reciclaje.