0.- Carga de librerías

library(gt)
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
library(htmltools)

1.- Carga de datos

datos <- read.csv("~/Estadistica/Proyecto 2026/Datos utilizados/Datos Cambiados.csv",
                  header = TRUE,
                  dec = ".",
                  sep = ",")

# Reemplazar "-" por NA únicamente en las variables de interés
datos$PM10[datos$PM10 == "-"] <- NA
datos$AQI[datos$AQI == "-"] <- NA

# Convertir a numérico
datos$PM10 <- as.numeric(datos$PM10)
datos$AQI <- as.numeric(datos$AQI)

# Conservar solo PM10 y AQI
datos_modelo <- datos[, c("PM10", "AQI")]

# Eliminar filas con NA únicamente de esas dos variables
datos_modelo <- na.omit(datos_modelo)

2.-Definición de las variables

Se seleccionó PM10 como la variable independiente (X) y AQI como la variable dependiente (Y) para construir el modelo potencial. Debido a que el PM10 es uno de los contaminantes que se utilizan para calcular el Indice de Calidad del Aire (AQI). Por ello, la concentración de PM10 influye directamente en el valor del AQI. En general, cuando la concentración de PM10 aumenta, el AQI también aumenta, lo que indica una disminución en la calidad del aire.

# Selección de variables

# Y es Variable dependiente
Y_original <- datos_modelo$AQI            #EFECTO

# X es Variable Independiente
X_original <- datos_modelo$PM10          #CAUSA

3.- Tabla pares de valores

# Variables originales 

Y_original <- datos_modelo$AQI      # Variable dependiente
X_original <- datos_modelo$PM10     # Variable independiente

n_original <- nrow(datos_modelo)

cat("Tamaño muestral =", n_original)
## Tamaño muestral = 17764
#TPV
# Mostrar solo las primeras 10 filas

TO_PM10_AQI <- data.frame(X_original, Y_original)

tabla_10 <- head(TO_PM10_AQI, 10)

tabla_original <- tabla_10 %>%
  gt() %>%
  cols_align(
    align = "center",
    columns = everything()
  ) %>%
  fmt_number(
    columns = everything(),
    decimals = 2
  ) %>%
  tab_header(
    title = md("*Tabla Nro. 1*"),
    subtitle = md("*Pares de valores originales de PM10 y AQI, Calidad del aire en la India 2015-2020*")
  ) %>%
  tab_source_note(
    source_note = md(paste0(
      "**Nota:** Se presentan únicamente las primeras 10 observaciones.Tamaño muestral n = ", nrow(TO_PM10_AQI)
      
    ))
  )

tabla_original
Tabla Nro. 1
Pares de valores originales de PM10 y AQI, Calidad del aire en la India 2015-2020
X_original Y_original
122.41 281.00
116.32 330.00
130.07 356.00
138.31 359.00
111.73 547.00
118.65 813.00
103.88 321.00
103.30 270.00
135.65 323.00
148.00 344.00
Nota: Se presentan únicamente las primeras 10 observaciones.Tamaño muestral n = 17764

4.- Gráfica de dispersión

# Gráfica de dispersión (Datos originales)

# Límites del gráfico
x_max_original <- max(X_original) * 1.05
y_max_original <- max(Y_original) * 1.05

# Crear gráfico vacío
plot(X_original, Y_original,
     type = "n",
     main = paste(
       "Gráfica Nro. 1",
       "Diagrama de dispersión entre PM10 y AQI",
       "en el estudio de la calidad del aire en la India 2015-2020",
       sep = "\n"
     ),
     xlab = expression(PM10~(mu*g/m^3)),
     ylab = "AQI (Índice)",
     xlim = c(0, x_max_original),
     ylim = c(0, y_max_original),
     cex.main = 1.1,
     cex.lab = 1.1,
     cex.axis = 0.9)

# Cuadrícula
grid(nx = NULL, ny = NULL, col = "gray85", lty = 1)

# Puntos
points(X_original, Y_original,
       col = "deepskyblue3",
       pch = 16,
       cex = 1.2)

# Marco
box(lwd = 1.5)

5.- Tratamiento de datos

Con el fin de reducir la dispersión de los datos, se realizó la eliminación de valores atípicos y se calcularon los promedios de la concentración de PM10 para cada valor del AQI. Este procedimiento permite disminuir la variabilidad de las observaciones y facilita la identificación de la tendencia existente entre ambas variables, favoreciendo un mejor ajuste del modelo potencial.

# Eliminación de valores atípicos mediante el método IQR

Q1 <- quantile(datos_modelo$AQI, 0.25, na.rm = TRUE)
Q3 <- quantile(datos_modelo$AQI, 0.75, na.rm = TRUE)
IQR_AQI <- IQR(datos_modelo$AQI, na.rm = TRUE)

lim_inf <- Q1 - 1.5 * IQR_AQI
lim_sup <- Q3 + 1.5 * IQR_AQI

datos_modelo <- subset(datos_modelo,
                       AQI >= lim_inf &
                         AQI <= lim_sup)

# Se calcula el promedio de PM10 para cada valor de AQI

datos_prom <- aggregate(PM10 ~ AQI, data = datos_modelo, mean)

# Variable dependiente (Y)
Y <- datos_prom$AQI        # Efecto

# Variable independiente (X)
X <- datos_prom$PM10       # Causa

# Tamaño muestral del modelo
n_modelo <- nrow(datos_prom)

cat("Tamaño muestral del modelo =", n_modelo)
## Tamaño muestral del modelo = 288

5.1.- Tabla pares de valores simplificada

# Tabla de pares de valores promediados

TVP_PM10_AQI <- data.frame(X, Y)

# Mostrar solo las primeras 10 filas
tabla_10 <- head(TVP_PM10_AQI, 10)

# Tabla de pares de valores promediados
tabla <- tabla_10 %>%
  gt() %>%
  cols_align(
    align = "center",
    columns = everything()
  ) %>%
  fmt_number(
    columns = everything(),
    decimals = 2
  ) %>%
  tab_header(
    title = md("*Tabla Nro. 2*"),
    subtitle = md("*Pares de valores promediados de PM10 y AQI, Calidad del aire en la India 2015-2020*")
  ) %>%
  tab_source_note(
    source_note = md(paste0(
      "**Nota:** Se presentan únicamente las primeras 10 observaciones. ",
      "El tamaño muestral utilizado en el modelo fue n = ", nrow(TVP_PM10_AQI), "."
    ))
  )

tabla
Tabla Nro. 2
Pares de valores promediados de PM10 y AQI, Calidad del aire en la India 2015-2020
X Y
0.07 13.00
7.04 14.00
0.11 15.00
4.61 16.00
5.92 17.00
7.06 18.00
8.57 19.00
12.22 20.00
13.00 21.00
19.35 22.00
Nota: Se presentan únicamente las primeras 10 observaciones. El tamaño muestral utilizado en el modelo fue n = 288.

5.2 .- Gráfica de dispersión simplificada

# CREAR GRÁFICO DE DISPERSIÓN (Con datos promediados)

# Límites de los ejes
x_max <- max(X) * 1.05
y_max <- max(Y) * 1.05

# Crear gráfico vacío
plot(X, Y,
     type = "n",
     main = "Gráfica Nro. 2\nDiagrama de dispersión entre PM10 y AQI\nen el estudio de la calidad del aire en la India 2015-2020",
     xlab = expression(PM10~(mu*g/m^3)),
     ylab = "AQI (Índice)",
     xlim = c(0, x_max),
     ylim = c(0, y_max),
     cex.main = 1.1,
     cex.lab = 1.1,
     cex.axis = 0.9)

# Cuadrícula
grid(nx = NULL, ny = NULL, col = "gray85", lty = 1)

# Puntos
points(X, Y,
       col = "deepskyblue3",
       pch = 16,
       cex = 1.2)

# Marco del gráfico
box(lwd = 1.5)

6.- Conjetura

La distribución de los puntos en el gráfico presenta una tendencia creciente, lo que indica que un modelo potencial podría describir adecuadamente la relación entre PM10 y AQI. Conforme aumenta la concentración de PM10, el AQI también se incrementa,reflejando una relación positiva y no lineal entre ambas variables.

Modelo potencial general \[ Y = aX^b \] Modelo potencial aplicado al estudio \[ AQI=a(PM10)^b \]

7.- Parámetros

# Parámetros 


# Ajustar el modelo potencial
modelo_pot <- lm(log(Y) ~ log(X))

# Intercepto = ln(a)
ln_a <- coef(modelo_pot)[1]

# Constante del modelo
a_est <- exp(ln_a)

# Exponente del modelo
b_est <- coef(modelo_pot)[2]

# Mostrar resultados
ln_a
## (Intercept) 
##    1.638601
a_est
## (Intercept) 
##    5.147962
b_est
##    log(X) 
## 0.6914335

Modelo potencial obtenido \[ AQI = 4.907\,(PM10)^{0.763} \] La expresión corresponde al modelo potencial final del estudio, obtenido al reemplazar los parámetros a y b por los valores estimados. Esta ecuación describe la relación entre la concentración de material particulado PM10 y el Índice de Calidad del Aire (AQI), permitiendo estimar el comportamiento del AQI en función de las variaciones de la concentración de PM10.

Justificación del uso de la regresión lineal (lm)

Aunque el modelo planteado presenta una relación potencial, se puede utilizar la función lm() debido a que este modelo puede linealizarse mediante la transformación logarítmica de la variable independiente y de la variable dependiente.

Modelo potencial general

\[ Y=aX^b \]

Aplicando logaritmos

\[ \ln(Y)=\ln(a)+b\ln(X) \]

Definimos

\[ Y_1=\ln(Y) \]

\[ X_1=\ln(X) \]

\[ \beta_0=\ln(a), \qquad \beta_1=b \]

Obtenemos un modelo lineal

\[ Y_1=\beta_0+\beta_1X_1 \]

Modelo potencial aplicado al estudio de la calidad del aire

\[ AQI=a(PM10)^b \]

Definiendo

\[ Y_1=\ln(AQI) \]

\[ X_1=\ln(PM10) \]

Obtenemos

\[ \ln(AQI)=\beta_0+\beta_1\ln(PM10) \]

Esta ecuación corresponde a una regresión lineal respecto a los parámetros, por lo que puede ser estimada utilizando:

modelo_pot <- lm(log(Y) ~ log(X))

Finalmente, los coeficientes obtenidos permiten reconstruir el modelo potencial:

\[ AQI=a(PM10)^b \]

donde:

\[ a=e^{\beta_0} \]

\[ b=\beta_1 \]

8.- Comparación de la realidad con el modelo

# CREAR GRÁFICO DEL MODELO POTENCIAL

# Límites
x_max <- max(X) * 1.05
y_max <- max(Y) * 1.05

# Gráfico vacío
plot(X, Y,
     type = "n",
     main = "Gráfica Nro. 3\nModelo potencial entre PM10 y AQI\nen el estudio de la calidad del aire en India 2015-2020",
     xlab = expression(PM10~(mu*g/m^3)),
     ylab = "AQI (Índice)",
     xlim = c(0, x_max),
     ylim = c(0, y_max),
     cex.main = 1.1,
     cex.lab = 1.1,
     cex.axis = 0.9)

# Cuadrícula
grid(nx = NULL, ny = NULL,
     col = "gray85",
     lty = 1)

# Datos observados
points(X, Y,
       col = "deepskyblue3",
       pch = 16,
       cex = 1.2)

# Curva del modelo potencial
curve(a_est * x^b_est,
      from = min(X),
      to = max(X),
      col = "red",
      lwd = 3,
      add = TRUE)

# Marco
box(lwd = 1.5)

# Leyenda
legend("topleft",
       legend = c("Datos observados", "Modelo potencial"),
       col = c("deepskyblue3", "red"),
       pch = c(16, NA),
       lwd = c(NA, 3),
       bty = "o",
       bg = "white",
       cex = 0.8,
       x.intersp = 0.6,
       y.intersp = 0.8)

9.- Test de bondad

# Correlación de Pearson

# Transformación logarítmica
ln_X <- log(X)
ln_Y <- log(Y)

# Coeficiente de correlación de Pearson
r <- cor(ln_X, ln_Y)*100

cat("Coeficiente de correlación (r) =", round(r, 2))
## Coeficiente de correlación (r) = 90.74

10.- Restricciones

# Dominio [x]: D = {x|x E R |x>0|}
# Dominio [y]: D = {y|y E R |y>0|}

¿Existe algún valor en el dominio de x que sustituido en el modelo matemático genere un valor en y fuera de su dominio?

La principal restricción del modelo es que la concentración de PM10 debe ser mayor que cero, debido a que el ajuste del modelo se realiza mediante una transformación logarítmica, la cual no está definida para x=0. Para cualquier valor positivo de PM10, el modelo genera valores positivos de AQI, por lo que las predicciones permanecen dentro del dominio de la variable.

11.- Estimación

# Cálculos

# Pregunta de cantidad
AQI_80 <- round(a_est * (80^b_est))

# Pregunta de porcentaje
AQI_50 <- a_est * (50^b_est)
AQI_80_real <- a_est * (80^b_est)

incremento_porcentaje <- ((AQI_80_real - AQI_50) / AQI_50) * 100

# Visualización

par(mar = c(1,1,1,1))

plot(0, 0,
     type = "n",
     xlim = c(0,1),
     ylim = c(0,1),
     axes = FALSE,
     xlab = "",
     ylab = "")

text(
  x = 0.5,
  y = 0.48,
  labels = paste(
    "Pregunta de cantidad\n\n",
    "¿Cuál es el AQI esperado cuando\n",
    "la concentración de PM10 es de 80 µg/m³?\n\n",
    "Resultado:", AQI_80, "\n\n",
    "-----------------------------------------\n\n",
    "Pregunta de porcentaje\n\n",
    "¿En qué porcentaje aumenta el AQI esperado\n",
    "al incrementar la concentración de PM10\n",
    "de 50 a 80 µg/m³?\n\n",
    "Resultado:", round(incremento_porcentaje, 2), "%"
  ),
  cex = 1.15,
  col = "deepskyblue3",
  font = 2
)

12.- Conclusión

En conclusión:

Entre la concentración de material particulado PM10 y el Índice de Calidad del Aire (AQI) existe una relación de tipo potencial, cuyo modelo es AQI = 4.907,(PM10)^{0.763} El modelo presenta como principal restricción que la concentración de PM10 debe ser mayor que cero, debido a la transformación logarítmica empleada para su ajuste. Los resultados indican que, a medida que aumenta la concentración de PM10, el AQI también se incrementa, evidenciando que este contaminante influye de manera significativa en el deterioro de la calidad del aire.