# UNIVERSIDAD CENTRAL DEL ECUADOR
# Facultad de Ingeniería en Geología, Minas, Petroleos y Ambiental
# Ingeniería Ambiental
# Autor: GUERRERO MARIA GABRIELA, Puchaicela Mónica, Zurita Johanna
# fecha:14/05/2025
"------------REGRESIÓN LINEAL--------------------------------------------------"
## [1] "------------REGRESIÓN LINEAL--------------------------------------------------"
library(readxl)
library(readr)
#Cargamos Datos
datos <- read_excel("C:/Users/User/Downloads/maate_focosdecalor_bdd_2021diciembre (2).xlsx")
# Guardar como CSV
write_csv(datos, "C:/Users/User/Downloads/maate_focosdecalor_bdd_2021diciembre (2).csv")
datos <- read.csv("C:/Users/User/Downloads/maate_focosdecalor_bdd_2021diciembre (2).csv",
header = TRUE,
sep = ",",
dec = ".",
fileEncoding = "UTF-8")
#Depuramos datos de las variables "BRIGHTNESS" Y "FRP"
# Asegúrate que las columnas sean numéricas (convertir comas a puntos)
datos$BRIGHTNESS <- as.numeric(gsub(",", ".", datos$BRIGHTNESS))
datos$FRP <- as.numeric(gsub(",", ".", datos$FRP))
#Función para filtrar outliers IQR en una columna
remove_iqr_outliers <- function(x) {
Q1 <- quantile(x, 0.25, na.rm = TRUE)
Q3 <- quantile(x, 0.75, na.rm = TRUE)
IQR <- Q3 - Q1
lower <- Q1 - 1.5 * IQR
upper <- Q3 + 1.5 * IQR
x >= lower & x <= upper
}
# Aplicar filtro en BRIGHTNESS y FRP
mask_bright <- remove_iqr_outliers(datos$BRIGHTNESS)
mask_frp <- remove_iqr_outliers(datos$FRP)
datos_depu <- datos[mask_bright & mask_frp, ]
cat("Filtrado:", nrow(df), "→", nrow(datos_depu), "filas limpias\n")
## Filtrado: → 17584 filas limpias
# Inspeccionar distribución antes y después
par(mfrow=c(2,2))
boxplot(datos$BRIGHTNESS, main="Brightness original")
boxplot(datos_depu$BRIGHTNESS, main="Brightness limpio")
boxplot(datos$FRP, main="FRP original")
boxplot(datos_depu$FRP, main="FRP limpio")

# Ajustar Regresión lineal
modelo_ols <- lm(FRP ~ BRIGHTNESS, data = datos_depu)
cooks <- cooks.distance(modelo_ols)
umbral <- 4 / nrow(datos_depu)
datos2 <- datos_depu[cooks < umbral, ]
modelo2 <- lm(FRP ~ BRIGHTNESS, data = datos2)
summary(modelo2)
##
## Call:
## lm(formula = FRP ~ BRIGHTNESS, data = datos2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.2395 -1.6673 -0.4541 1.2802 8.7057
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -76.242684 0.957748 -79.61 <2e-16 ***
## BRIGHTNESS 0.242195 0.002841 85.26 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.285 on 16390 degrees of freedom
## Multiple R-squared: 0.3072, Adjusted R-squared: 0.3072
## F-statistic: 7269 on 1 and 16390 DF, p-value: < 2.2e-16
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
# Crear intervalos de BRIGHTNESS (por ejemplo, de 5 en 5)
datos2 <- datos2 %>%
mutate(BRIGHT_BIN = cut(BRIGHTNESS, breaks = seq(floor(min(BRIGHTNESS)), ceiling(max(BRIGHTNESS)), by = 5)))
library(tidyr)
# Calcular mediana de FRP por intervalo de BRIGHTNESS
med_bin <- datos2 %>%
group_by(BRIGHT_BIN) %>%
summarise(BRIGHTNESS = median(BRIGHTNESS, na.rm = TRUE),
FRP_median = median(FRP, na.rm = TRUE)) %>%
drop_na()
# Ajustar modelo
modelo_mediana_bin <- lm(FRP_median ~ BRIGHTNESS, data = med_bin)
summary(modelo_mediana_bin)
##
## Call:
## lm(formula = FRP_median ~ BRIGHTNESS, data = med_bin)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.8644 -0.3570 0.1125 0.4870 0.5507
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -62.2578 6.3324 -9.832 6.38e-05 ***
## BRIGHTNESS 0.2008 0.0189 10.623 4.10e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5939 on 6 degrees of freedom
## Multiple R-squared: 0.9495, Adjusted R-squared: 0.9411
## F-statistic: 112.9 on 1 and 6 DF, p-value: 4.098e-05
# Graficar
plot(med_bin$BRIGHTNESS, med_bin$FRP_median,
xlab = "BRIGHTNESS (binned)", ylab = "Mediana de FRP",
main = "Regresión por grupos de BRIGHTNESS", pch = 19, col = "skyblue")
abline(modelo_mediana_bin, col = "red", lwd = 2)
# Usando med_data, que contiene BRIGHTNESS y FRP_median
X <- med_bin$BRIGHTNESS
Y <- med_bin$FRP_median
# Test de correlación de Pearson
r <- cor(X, Y, method = "pearson")
r
## [1] 0.9744329
#Coeficiente de determinación para regresión lineal
r2 <- r^2*100
r2
## [1] 94.95194
# Obtener las estimaciones del modelo
estimaciones <- predict(modelo_mediana_bin)
# Ver los valores estimados junto a los reales
resultado <- cbind(med_bin, FRP_estimada = estimaciones)
print(resultado)
## BRIGHT_BIN BRIGHTNESS FRP_median FRP_estimada
## 1 (315,320] 317.700 2.040 1.523202
## 2 (320,325] 322.580 2.980 2.502903
## 3 (325,330] 328.400 3.410 3.671317
## 4 (330,335] 332.500 3.630 4.494427
## 5 (335,340] 337.130 4.780 5.423939
## 6 (340,345] 342.065 6.350 6.414682
## 7 (345,350] 346.800 7.655 7.365274
## 8 (350,355] 352.050 8.970 8.419256
"Conclusión
El análisis estadístico realizado muestra que existe una correlación lineal positiva entre la variable BRIGHTNESS (nivel de brillo) y la FRP (potencia radiativa del fuego) en los focos de calor registrados. El coeficiente de correlacion de Pearson nos dio un valor de 0.97, Su coeficiente de determinacion mostró un valor del 94.95%."
## [1] "Conclusión\nEl análisis estadístico realizado muestra que existe una correlación lineal positiva entre la variable BRIGHTNESS (nivel de brillo) y la FRP (potencia radiativa del fuego) en los focos de calor registrados. El coeficiente de correlacion de Pearson nos dio un valor de 0.97, Su coeficiente de determinacion mostró un valor del 94.95%."
