# Cargar datos
datos <- read.csv2("Waste_Management_and_Recycling_India.csv xd.csv", 
                   sep = ";", dec = ",", stringsAsFactors = FALSE)

# Identificar x,y ----------
x <- datos$Population.Density..People.km..
y <- datos$Landfill.Capacity..Tons.

tabla <- data.frame(x,y)
length(x); length(y)
## [1] 850
## [1] 850
# Tabla pares de valores ---------
tabla <- data.frame(x,y)
length(x); length(y)
## [1] 850
## [1] 850
#Depuración -------------
  #1) Filtrar filas eliminando aquellas con NA, 0 en cualquiera de las columnas
  tabla_limpia <- tabla[!apply(tabla, 1, function(fila) {
    any(is.na(fila) | fila == 0 | fila == "" | fila == "-Inf")
  }), ]

install.packages("dplyr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
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
#2) Identificar filas únicas por 'x' dejando la de menor 'y'
tabla_filtrada <- tabla_limpia %>%
  group_by(x) %>%
  filter(y == min(y)) %>%
  ungroup()
#3) Renumerar las filas de la tabla filtrada
tabla_dep <- tabla_filtrada %>%
  mutate(row_number = row_number()) %>%
  select(-row_number)
# Conjetura de modelo matemático: Modelo Logarítmico -----------------
x1 <- log(tabla_dep$x)
RegresionLogaritmica <- lm(tabla_dep$y ~ x1)
RegresionLogaritmica
## 
## Call:
## lm(formula = tabla_dep$y ~ x1)
## 
## Coefficients:
## (Intercept)           x1  
##      137345        -8372
# Cálculo de parámetros de regresión logarítmica --------------
a <- RegresionLogaritmica$coefficients[1]; a
## (Intercept) 
##    137345.2
b <- RegresionLogaritmica$coefficients[2]; b
##        x1 
## -8371.813
#Ecuación logarítmica ------ y = 137345.2 - 8371.813*ln(x)
# Gráfica de la regresión -----------
plot(tabla_dep$x, tabla_dep$y,
     col = 4,
     pch = 16, # Tipo de punto
     main = "Gráfica N.: Regresión Logarítmica",
     xlab = "Densidad Poblacional",
     ylab = "Capacidad Vertedero")
# Curva de regresión logarítmica
curve(a + b * log(x),
      from = min(tabla_dep$x),
      to = max(tabla_dep$x),
      add = TRUE,
      col = "red",
      lwd = 2)

# Cálculo de indicadores --------------
# Coeficiente de Pearson
r <- cor(tabla_dep$y,x1)
r
## [1] -0.2592474
# Coeficiente de determinación
# Coeficiente de determinación
r2 <- (r^2) * 100
r2
## [1] 6.72092
100-r2
## [1] 93.27908
# Restricciones -------------
# y = 137345.2 - 8371.813*ln(x)
# X no puede ser negativa
# Evaluamos el valor mínimo de x que tenga sentido en la ecuación.
y_min <- 137345.2 - 8371.813 * log(1)
y_min
## [1] 137345.2
# Calcular el rango de x para que y > 0
x_max <- exp(137345.2 / 8371.813 ) # Máximo valor de x para que y sea mayor que 0
x_max
## [1] 13331895
# Restricciones finales
# x debe estar en el rango: 0 < x < 13331895
# y debe ser mayor que 0

x0 <- 3000  # densidad
y0 <- a + b * log(x0)

# Mostrar estimación como gráfico
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
text(x = 1, y = 1,
     labels = paste("¿Cuál es la capacidad estimada del vertedero",
                    "\ncuando la densidad poblacional es de 3,000 hab/km²?",
                    "\n\nR ≈", round(y0, 0), " toneladas"),
     cex = 2.2, col = "blue", font = 6)

install.packages("knitr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(knitr)
tabla_modelo_1 <- data.frame(
  Variables = c("x", "y"),
  Modelo = c("densidad", "capacidad"),
  Restricciones = c("> 0", "0 < x < 13331895"),
  Coeficiente_pearson = c("-0.-0.25", ""),
  Coeficiente_determinacion = c("6.72%", "100 - 93.27%"),
  Estimacion = c("3000", "70317"))
colnames(tabla_modelo_1) <- c("Variables", "Nombres", "Restricciones",
                              "Coef. Pearson", "Coef. Determinación", "Estimación")
tabla_modelo_2 <- data.frame(
  Ecuacion = c("y = 137345.2 - 8371.813 * ln(x)"))
colnames(tabla_modelo_2) <- c("Ecuación Matemática")
library(grid)
grid.newpage()
grid.text("CONCLUSIONES")