knitr::opts_chunk$set( echo = TRUE, warning = FALSE, message = FALSE )
Tema: Estadística Multivarible
Fecha: 4/02/2026
Autor: Grupo 1 —
# Cargar datos
setwd("C:/Users/LENOVO/OneDrive/Escritorio/ESTADISTICA")
datos <- read.csv("china_water_pollution_data.csv")
# Convertir a numérico
datos$Water_Temperature_C <- as.numeric(datos$Water_Temperature_C)
datos$pH <- as.numeric(datos$pH)
datos$Nitrate_mg_L <- as.numeric(datos$Nitrate_mg_L)
# Eliminar NAs
datos_limpios <- na.omit(datos[, c(
"Water_Temperature_C",
"pH",
"Nitrate_mg_L"
)])
# Función para eliminar outliers (IQR)
eliminar_outliers <- function(x) {
q1 <- quantile(x, 0.25)
q3 <- quantile(x, 0.75)
iqr <- q3 - q1
lim_inf <- q1 - 1.5 * iqr
lim_sup <- q3 + 1.5 * iqr
x >= lim_inf & x <= lim_sup
}
# Aplicar filtro
filtro <- with(datos_limpios,
eliminar_outliers(Water_Temperature_C) &
eliminar_outliers(pH) &
eliminar_outliers(Nitrate_mg_L))
datos_limpios <- datos_limpios[filtro, ]
datos_limpios$LOG_TEMP <- log(datos_limpios$Water_Temperature_C + 1)
datos_limpios$LOG_pH <- log(datos_limpios$pH + 1)
datos_limpios$LOG_NITRATE <- log(datos_limpios$Nitrate_mg_L + 1)
modelo_nitratos <- lm(
Nitrate_mg_L ~ Water_Temperature_C + pH,
data = datos_limpios
)
summary(modelo_nitratos)
##
## Call:
## lm(formula = Nitrate_mg_L ~ Water_Temperature_C + pH, data = datos_limpios)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.37131 -0.34451 0.00349 0.33282 1.37097
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.978106 0.138893 14.242 <2e-16 ***
## Water_Temperature_C -0.002859 0.001924 -1.486 0.137
## pH 0.008626 0.018942 0.455 0.649
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4923 on 2921 degrees of freedom
## Multiple R-squared: 0.0008251, Adjusted R-squared: 0.000141
## F-statistic: 1.206 on 2 and 2921 DF, p-value: 0.2995
min_x1 <- min(datos_limpios$LOG_TEMP)
max_x1 <- max(datos_limpios$LOG_TEMP)
min_x2 <- min(datos_limpios$LOG_pH)
max_x2 <- max(datos_limpios$LOG_pH)
min_y <- min(datos_limpios$Nitrate_mg_L)
max_y <- max(datos_limpios$Nitrate_mg_L)
n <- nrow(datos_limpios)
tabla_intervalos <- data.frame(
"Min.x1" = min_x1, "Max.x1" = max_x1,
"Min.x2" = min_x2, "Max.x2" = max_x2,
"Min.y" = min_y, "Max.y" = max_y,
"N" = n
)
library(knitr)
## Warning: package 'knitr' was built under R version 4.5.2
kable(tabla_intervalos,
caption = "Tabla 1: Resumen del proceso de depuración")
| Min.x1 | Max.x1 | Min.x2 | Max.x2 | Min.y | Max.y | N |
|---|---|---|---|---|---|---|
| 2.128232 | 3.530763 | 1.906575 | 2.235376 | 0.62 | 3.34 | 2924 |
modelo_log <- lm(
LOG_NITRATE ~ LOG_TEMP + LOG_pH,
data = datos_limpios
)
summary(modelo_log)
##
## Call:
## lm(formula = LOG_NITRATE ~ LOG_TEMP + LOG_pH, data = datos_limpios)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.59895 -0.10835 0.01556 0.12027 0.39464
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.09073 0.11625 9.382 <2e-16 ***
## LOG_TEMP -0.02016 0.01322 -1.526 0.127
## LOG_pH 0.02327 0.05240 0.444 0.657
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1702 on 2921 degrees of freedom
## Multiple R-squared: 0.0008644, Adjusted R-squared: 0.0001802
## F-statistic: 1.263 on 2 and 2921 DF, p-value: 0.2828
x1 <- datos_limpios$LOG_TEMP
x2 <- datos_limpios$LOG_pH
y_pre <- fitted(modelo_log)
library(scatterplot3d)
## Warning: package 'scatterplot3d' was built under R version 4.5.2
scatterplot3d(
datos_limpios$pH,
datos_limpios$Water_Temperature_C,
datos_limpios$Nitrate_mg_L,
pch = 19,
color = "blue",
angle = 45,
cex.symbols = 0.8,
cex.axis = 0.8,
cex.lab = 1,
xlab = "pH",
ylab = "Temperatura del agua (°C)",
zlab = "Concentración de nitratos (mg/L)",
main = "Gráfica Nº 5. Diagrama de dispersión entre pH, temperatura y
concentración de nitratos"
)
b0 <- coef(modelo_log)[1]
b1 <- coef(modelo_log)[2]
b2 <- coef(modelo_log)[3]
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
text(1, 1,
labels = paste0(
"Ecuación múltiple:\n",
"Y = ", round(b0, 2),
" + ", round(b1, 2), "*x1",
" + ", round(b2, 2), "*x2"
),
cex = 1.6,
col = "blue",
font = 2
)
modelo_pred <- lm(y_pre ~ x1 + x2)
z_ticks <- pretty(y_pre)
z_labels <- format(round(z_ticks, 2), nsmall = 2)
graf <- scatterplot3d(
x1, x2, y_pre,
main = "Gráfica Nº 2: Relación entre temperatura, pH y nitratos",
xlab = "Temperatura del agua (°C)",
ylab = "pH",
zlab = "Concentración de nitratos (mg/L)",
angle = 310,
color = "red",
pch = 16,
z.ticklabs = z_labels
)
graf$plane3d(modelo_pred, col = "black")
r <- cor(y_pre, x1 + x2) * 100
r
## [1] -86.26328
r2 <- (cor(y_pre, x1 + x2)^2) * 100
paste("Coeficiente de determinación:", round(r2, 2), "%")
## [1] "Coeficiente de determinación: 74.41 %"
cat("¿CUÁL SERÁ LA CONCENTRACIÓN DE NITRATOS CUANDO:\n")
## ¿CUÁL SERÁ LA CONCENTRACIÓN DE NITRATOS CUANDO:
cat("Temperatura = 20 °C y pH = 7?\n")
## Temperatura = 20 °C y pH = 7?
x1_new <- 20
x2_new <- 7
log_x1 <- log(x1_new + 1)
log_x2 <- log(x2_new + 1)
y_new <- b0 + b1 * log_x1 + b2 * log_x2
y_new <- max(0, y_new)
paste("Respuesta: Nitratos ≈", round(y_new, 4), "mg/L")
## [1] "Respuesta: Nitratos ≈ 1.0777 mg/L"
Entre la concentración de nitratos (mg/L), la temperatura del agua (°C) y el pH existe una relación de tipo múltiple, descrita por la ecuación y = 1.09 − 0.02x₁ + 0.02x₂, siendo y la concentración de nitratos, x₁ la temperatura del agua y x₂ el pH.
La concentración de nitratos depende en un 74.41 % de la temperatura y el pH, mientras que el 25.59 % restante depende de otros factores no considerados en el estudio, tales como condiciones ambientales y procesos fisicoquímicos del sistema acuático.