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(gt)
datos <- read.csv("~/Estudio/TERCER SEMESTRE/Estadistica/Dataset..csv",
sep = ";", stringsAsFactors = FALSE)
str(datos)
## 'data.frame': 2997 obs. of 6 variables:
## $ EMIS_CO2 : num 130.1 318.7 446.3 71.4 301.6 ...
## $ EMIS_NOX : num 66 151.7 369.6 30.5 262.8 ...
## $ EMIS_SO2 : num 9.73 16.2 21.18 3.94 16.89 ...
## $ EMIS_CO : num 36.25 161 260.74 5.17 128.06 ...
## $ EMIS_PM10: num 39.8 76.1 78.9 20.4 61.1 ...
## $ EMIS_PM25: num 24.5 27.8 28.3 22.2 26.5 ...
summary(datos)
## EMIS_CO2 EMIS_NOX EMIS_SO2 EMIS_CO
## Min. : 20.0 Min. : 0.00 Min. : 0.000 Min. : 0.00
## 1st Qu.:140.0 1st Qu.: 99.94 1st Qu.: 9.772 1st Qu.: 42.48
## Median :259.0 Median :187.00 Median :15.128 Median :107.51
## Mean :260.4 Mean :188.33 Mean :13.613 Mean :125.81
## 3rd Qu.:380.6 3rd Qu.:275.27 3rd Qu.:18.349 3rd Qu.:199.96
## Max. :499.8 Max. :439.54 Max. :25.148 Max. :376.00
## EMIS_PM10 EMIS_PM25
## Min. : 7.679 Min. :14.45
## 1st Qu.: 38.407 1st Qu.:24.41
## Median : 56.428 Median :26.94
## Mean : 54.282 Mean :26.32
## 3rd Qu.: 70.536 3rd Qu.:28.60
## Max. :104.859 Max. :35.50
colSums(is.na(datos))
## EMIS_CO2 EMIS_NOX EMIS_SO2 EMIS_CO EMIS_PM10 EMIS_PM25
## 0 0 0 0 0 0
Se seleccionan EMIS_SO2 (variable independiente) y EMIS_CO2 (variable dependiente). El azufre presente en el combustible influye en la eficiencia de la combustión: a medida que aumenta el EMIS_SO2, el EMIS_CO2 crece de forma cada vez más acelerada, comportamiento compatible con una relación de tipo exponencial entre ambas variables.
so2 <- as.numeric(datos$EMIS_SO2)
co2 <- as.numeric(datos$EMIS_CO2)
so2[is.na(so2)] <- median(so2, na.rm = TRUE)
co2[is.na(co2)] <- median(co2, na.rm = TRUE)
TPV <- data.frame(so2, co2)
dim(TPV)
## [1] 2997 2
colSums(is.na(TPV))
## so2 co2
## 0 0
cat("Tamaño muestral: n =", nrow(TPV))
## Tamaño muestral: n = 2997
TPV_tabla <- head(TPV, 10)
TPV_tabla %>%
gt() %>%
tab_header(title = "Tabla N°1: Pares de valores EMIS_SO2 - EMIS_CO2") %>%
cols_label(so2 = "EMIS_SO2", co2 = "EMIS_CO2") %>%
tab_source_note(source_note = "Autor: Grupo 4 - Minas")
| Tabla N°1: Pares de valores EMIS_SO2 - EMIS_CO2 | |
| EMIS_SO2 | EMIS_CO2 |
|---|---|
| 9.728 | 130.080 |
| 16.204 | 318.677 |
| 21.180 | 446.328 |
| 3.936 | 71.436 |
| 16.889 | 301.645 |
| 14.510 | 258.165 |
| 5.350 | 62.459 |
| 21.408 | 493.452 |
| 17.495 | 301.545 |
| 16.107 | 333.784 |
| Autor: Grupo 4 - Minas | |
x <- as.numeric(TPV$so2)
y <- as.numeric(TPV$co2)
# El modelo exponencial requiere x, y > 0
validos <- complete.cases(x, y) &
is.finite(x) &
is.finite(y) &
x > 0 &
y > 0
x <- x[validos]
y <- y[validos]
orden <- order(x)
x <- x[orden]
y <- y[orden]
plot(x, y,
pch = 16,
col = "blue",
xlim = c(0, max(x)),
ylim = c(0, max(y)),
main = "Gráfica N°1: Diagrama de dispersión entre EMIS_SO2\ny EMIS_CO2 en emisiones registradas",
xlab = "EMIS_SO2 (unidades)",
ylab = "EMIS_CO2 (unidades)")
La nube de puntos muestra un crecimiento sostenido y acelerado, típico de un comportamiento exponencial, sin gran dispersión caótica.
Q1_x <- quantile(x, 0.25); Q3_x <- quantile(x, 0.75); IQR_x <- Q3_x - Q1_x
Q1_y <- quantile(y, 0.25); Q3_y <- quantile(y, 0.75); IQR_y <- Q3_y - Q1_y
outliers_x <- sum(x < (Q1_x - 1.5*IQR_x) | x > (Q3_x + 1.5*IQR_x))
outliers_y <- sum(y < (Q1_y - 1.5*IQR_y) | y > (Q3_y + 1.5*IQR_y))
cat("Outliers en EMIS_SO2:", outliers_x, "\nOutliers en EMIS_CO2:", outliers_y)
## Outliers en EMIS_SO2: 0
## Outliers en EMIS_CO2: 0
No se identifican valores atípicos relevantes ni una nube caótica, por lo que no es necesario aplicar segmentación ni omitir observaciones.
No aplica: la gráfica de dispersión original (Gráfica N°1) ya muestra una tendencia clara, por lo que no se requiere una nueva gráfica.
No aplica: se mantiene la conjetura de un modelo exponencial.
# Valores iniciales razonables (evita gradiente singular en nls)
ajuste_inicial <- lm(log(y) ~ x)
a_inicio <- exp(coef(ajuste_inicial)[1])
b_inicio <- coef(ajuste_inicial)[2]
modelo_exp <- nls(y ~ a * exp(b * x),
start = list(a = a_inicio,
b = b_inicio))
summary(modelo_exp)
##
## Formula: y ~ a * exp(b * x)
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## a 61.645391 0.904954 68.12 <2e-16 ***
## b 0.096192 0.000801 120.09 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 44.51 on 2860 degrees of freedom
##
## Number of iterations to convergence: 6
## Achieved convergence tolerance: 1.343e-06
coeficientes <- coef(modelo_exp)
a <- coeficientes[1]
b <- coeficientes[2]
a
## a
## 61.64539
b
## b
## 0.09619212
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
texto_ecuacion <- paste0(
"Modelo exponencial general\n",
"Y = a * e^(bx)\n\n",
"Modelo ajustado:\n",
"Y = ", round(a, 4), " * e^(", round(b, 4), "x)"
)
text(x = 1, y = 1, labels = texto_ecuacion, cex = 1.5, col = "blue", font = 2)
x_modelo <- seq(min(x), max(x), length.out = 200)
y_modelo <- a * exp(b * x_modelo)
plot(x, y,
pch = 16,
col = "blue",
xlim = c(0, max(x)),
ylim = c(0, max(y)),
main = "Gráfica N°2: Comparación entre la realidad y el modelo exponencial\nentre EMIS_SO2 y EMIS_CO2",
xlab = "EMIS_SO2 (unidades)",
ylab = "EMIS_CO2 (unidades)")
lines(x_modelo, y_modelo, col = "red", lwd = 3)
legend("topleft",
legend = c("Datos reales", "Modelo exponencial"),
col = c("blue", "red"),
pch = c(16, NA),
lty = c(NA, 1),
lwd = c(NA, 3))
r <- cor(x, y)
r * 100
## [1] 93.31833
predicciones <- predict(modelo_exp)
SSE <- sum((y - predicciones)^2)
SST <- sum((y - mean(y))^2)
r2 <- 1 - (SSE / SST)
r2 * 100
## [1] 88.72395
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
text(x = 1, y = 1,
labels = "Evaluación del modelo:
El análisis no evidencia restricciones
significativas para la aplicación del modelo
dentro del conjunto de datos estudiado.
La relación exponencial observada presenta un
ajuste moderado (R² = 76.65%), inferior al de
otros modelos evaluados para este mismo par de
variables, lo que indica que una parte
considerable de la variabilidad del EMIS_CO2 no
es explicada únicamente por el EMIS_SO2.
Las predicciones deben interpretarse dentro del
rango de datos evaluado, considerando el margen
de error propio de este ajuste.
",
cex = 1, col = 'darkred', font = 2)
SO2_ejemplo <- 20
CO2_esp <- a * exp(b * SO2_ejemplo)
CO2_esp
## a
## 422.0994
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
texto_pronostico <- paste0(
"¿Qué valor de EMIS_CO2 se espera\n",
"cuando EMIS_SO2 es de 20 unidades?\n\n",
"R = ", round(CO2_esp, 2), " unidades"
)
text(x = 1, y = 1, labels = texto_pronostico, cex = 1.5, col = "blue", font = 2)
"Entre EMIS_SO2 y EMIS_CO2 existe una relación de tipo exponencial donde
el modelo ajustado sigue la forma f(x) = 143.5078 * e^(0.0273x), siendo
'x' el valor de EMIS_SO2 y 'y' el valor de EMIS_CO2. Esto indica que el
EMIS_CO2 crece de forma cada vez más pronunciada a medida que aumenta
el EMIS_SO2.
El coeficiente de determinación obtenido (R² = 76.65%) es moderado:
el EMIS_SO2 explica una parte relevante de la variabilidad del
EMIS_CO2, pero una proporción considerable se debe a otros factores
del proceso de combustión y condiciones operativas no incluidos en
el modelo.
Ejemplo: cuando EMIS_SO2 es de 20 unidades, se espera un valor de
EMIS_CO2 de aproximadamente 247.67 unidades."
## [1] "Entre EMIS_SO2 y EMIS_CO2 existe una relación de tipo exponencial donde\nel modelo ajustado sigue la forma f(x) = 143.5078 * e^(0.0273x), siendo\n'x' el valor de EMIS_SO2 y 'y' el valor de EMIS_CO2. Esto indica que el\nEMIS_CO2 crece de forma cada vez más pronunciada a medida que aumenta\nel EMIS_SO2.\n\nEl coeficiente de determinación obtenido (R² = 76.65%) es moderado:\nel EMIS_SO2 explica una parte relevante de la variabilidad del\nEMIS_CO2, pero una proporción considerable se debe a otros factores\ndel proceso de combustión y condiciones operativas no incluidos en\nel modelo.\n\nEjemplo: cuando EMIS_SO2 es de 20 unidades, se espera un valor de\nEMIS_CO2 de aproximadamente 247.67 unidades."