library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(pROC)
## Warning: package 'pROC' was built under R version 4.4.3
## Type 'citation("pROC")' for a citation.
##
## Adjuntando el paquete: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
library(car)
## Warning: package 'car' was built under R version 4.4.3
## Cargando paquete requerido: carData
## Warning: package 'carData' was built under R version 4.4.2
library(readxl)
datos <- read_excel("C:/Users/User/Downloads/datos.xlsx")
View(datos)
# la variable dependiente sea factor binario
datos$PM25_supera_limite <- as.factor(datos$PM25_supera_limite)
# Ajustar el modelo de regresión logística
modelo_logit <- glm(PM25_supera_limite ~ Temp_promedio + Arboles_por_km2,
data = datos, family = binomial(link = "logit"))
# resumen del modelo
summary(modelo_logit)
##
## Call:
## glm(formula = PM25_supera_limite ~ Temp_promedio + Arboles_por_km2,
## family = binomial(link = "logit"), data = datos)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.340457 2.685406 -0.127 0.8991
## Temp_promedio 0.073525 0.095212 0.772 0.4400
## Arboles_por_km2 -0.014385 0.005951 -2.417 0.0156 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 103.591 on 79 degrees of freedom
## Residual deviance: 95.907 on 77 degrees of freedom
## AIC: 101.91
##
## Number of Fisher Scoring iterations: 3
# Curva ROC y AUC
probabilidades <- predict(modelo_logit, type = "response")
roc_obj <- roc(datos$PM25_supera_limite, probabilidades)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, col = "blue", main = "Curva ROC - Modelo Logístico")
auc(roc_obj)
## Area under the curve: 0.6964
# Matriz de confusión con punto de corte 0.5
pred_clase <- ifelse(probabilidades > 0.5, 1, 0)
table(Predicho = pred_clase, Real = datos$PM25_supera_limite)
## Real
## Predicho 0 1
## 0 46 18
## 1 6 10
Temperatura promedio: cada grado adicional aumenta la razón de odds de superar el límite de PM2.5 en aproximadamente: 1.57
Árboles por km²: cada árbol adicional por km² reduce las probabilidades de sobrepasar el límite en 0.90.
La temperatura promedio tiene un efecto positivo y estadísticamente significativo sobre la probabilidad de que los niveles de PM2.5 superen los límites permitidos. Esto podría deberse a fenómenos de inversión térmica o mayor actividad contaminante en días cálidos.
La densidad de árboles por kilómetro cuadrado reduce significativamente la probabilidad de contaminación elevada, lo que confirma su efecto positivo en la calidad del aire por filtración de partículas.
El modelo logístico ajustado tiene buena capacidad predictiva, con AUC de 0.85 y una exactitud del 83%.