CARRERA DE GEOLOGÍA
GRUPO N°2
ANÁLISIS ESTADÍSTICO MULTIVARIABLE
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
#CARGA DE DATASET
Volcanes_Globales <- read.csv("global_volcano_eruption_intelligence.csv", header = T, sep = ";", dec = ".")
# Variable Independiente (X): Energía liberada (J)
energia_liberada <- as.numeric(Volcanes_Globales$energia_liberada)
# Variable Dependiente (Y): Muertes registradas
muertes_V <- as.numeric(Volcanes_Globales$muertes_V)
# Limpieza de dataset
TPV_inicial <- data.frame(energia_liberada = energia_liberada, muertes_V = muertes_V)
TPV_inicial <- na.omit(TPV_inicial)
# Filtro físico: La energía liberada debe ser >= 0 (o >= 10000 J) y las muertes >= 0
TPV_inicial <- TPV_inicial[TPV_inicial$energia_liberada >= 0 & TPV_inicial$muertes_V >= 0, ]
total_inicial <- nrow(TPV_inicial)
# USO INTERCUARTIL (Rango Intercuartílico - IQR)
# Límites para la Energía Liberada en Joules (X)
q1_e <- quantile(TPV_inicial$energia_liberada, 0.25)
q3_e <- quantile(TPV_inicial$energia_liberada, 0.75)
iqr_e <- q3_e - q1_e
# Límites para las Muertes por Volcán (Y)
q1_m <- quantile(TPV_inicial$muertes_V, 0.25)
q3_m <- quantile(TPV_inicial$muertes_V, 0.75)
iqr_m <- q3_m - q1_m
# Aplicar filtro de Outliers usando las fronteras calculadas
TPV_sin_outliers <- TPV_inicial %>%
filter(energia_liberada >= (q1_e - 1.5 * iqr_e) & energia_liberada <= (q3_e + 1.5 * iqr_e)) %>%
filter(muertes_V >= (q1_m - 1.5 * iqr_m) & muertes_V <= (q3_m + 1.5 * iqr_m))
total_restante_outliers <- nrow(TPV_sin_outliers)
outliers_encontrados <- total_inicial - total_restante_outliers
# USO DE MEDIA ARITMÉTICA (Modificado para mantener los datos individuales)
# En lugar de colapsar con summarise(), simplemente asignamos el dataset filtrado a TPV
TPV <- TPV_sin_outliers
row.names(TPV) <- NULL
TPV_final_id <- cbind(Nro = 1:nrow(TPV), TPV)
valores_consolidados_media <- 0
# Outliers encontrados por Intercuartil
outliers_encontrados <- total_inicial - total_restante_outliers
outliers_encontrados
## [1] 0
# Reducción de filas repetidas por Media Aritmética
# No se consolidan filas, por lo que la reducción es 0
valores_consolidados_media <- 0
valores_consolidados_media
## [1] 0
# Total de pares de valores
total_pares <- nrow(TPV)
total_pares
## [1] 898
| TABLA N°1 | ||
| Primeros 10 pares de valores para la regresión lineal | ||
| N° | Energía Liberada (J) | Número de Muertes (muertes_V) |
|---|---|---|
| 1 | 24,378.88 | 2,918 |
| 2 | 49,415.26 | 13,946 |
| 3 | 30,448.85 | 9,083 |
| 4 | 54,150.87 | 13,197 |
| 5 | 57,023.36 | 14,332 |
| 6 | 12,277.82 | 4,852 |
| 7 | 36,405.27 | 3,719 |
| 8 | 54,620.95 | 14,515 |
| 9 | 37,571.75 | 7,893 |
| 10 | 32,830.74 | 8,138 |
par(oma = c(1, 1, 1, 1))
plot(TPV_inicial$energia_liberada, TPV_inicial$muertes_V,
pch = 16,
col = rgb(0.2, 0.4, 0.6, 0.5),
main = "Gráfica Nº1: Diagrama de Dispersión entre Energía Liberada\ny las Muertes por Volcán (Datos Iniciales)",
xlab = "Energía Liberada (J) - energia_liberada (X)",
ylab = "Número de Muertes - muertes_V (Y)")
box(which = "outer", col = "black")
par(oma = c(1, 1, 1, 1))
plot(
TPV$energia_liberada,
TPV$muertes_V,
pch = 16,
col = rgb(0, 0, 0.8),
main = "Gráfica Nº1: Diagrama de Dispersión entre la Energía Liberada\ny las Muertes por Volcán (Sin Outliers)",
xlab = "Energía Liberada en Joules - energia_liberada (X)",
ylab = "Número de Muertes - muertes_V (Y)"
)
box(
which = "outer",
col = "black"
)
# Forzamos las variables de control basadas en el dataframe final consolidado (TPV)
x <- TPV$energia_liberada
y <- TPV$muertes_V
# Ejecutamos la regresión lineal
regresion_lineal <- lm(y ~ x)
# Separamos y mostramos de forma individual los coeficientes paramétricos
intercepto <- coef(regresion_lineal)[1]
pendiente <- coef(regresion_lineal)[2]
cat("\nIntercepto\n## (Intercept) \n ", round(intercepto, 4), "\n")
##
## Intercepto
## ## (Intercept)
## 466.8668
cat("\nPendiente\n## x \n ", round(pendiente, 7), "\n")
##
## Pendiente
## ## x
## 0.2255506
# Forzamos los márgenes y el recuadro exterior de la plantilla
par(oma = c(1, 1, 1, 1))
# 1. Dibujamos la nube de puntos azules (Realidad)
plot(TPV$energia_liberada, TPV$muertes_V,
pch = 16,
col = "blue",
main = "Gráfica Nº3: Comparación de la realidad con el\nmodelo Lineal entre la Energía Liberada y las Muertes",
xlab = "Energía Liberada (J) - energia_liberada (X)",
ylab = "Número de Muertes - muertes_V (Y)")
# 2. Superponemos la línea roja del modelo matemático ajustado (Modelo)
abline(regresion_lineal,
col = "red",
lwd = 3)
# 3. Cerramos el encuadre exterior
box(which = "outer", col = "black")
# Asignación de variables desde el dataset filtrado TPV
x <- TPV$energia_liberada
y <- TPV$muertes_V
# Test de Pearson (Coeficiente de correlación)
r <- cor(x, y)
cat("Test de Pearson\n")
## Test de Pearson
cat("r <- cor(x, y)\n")
## r <- cor(x, y)
cat("r*100\n")
## r*100
cat("## [1]", round(r * 100, 4), "\n\n")
## ## [1] 84.2075
# Extracción dinámica de parámetros del modelo lineal ajustado
beta_0 <- round(as.numeric(coef(regresion_lineal)[1]), 4)
beta_1 <- round(as.numeric(coef(regresion_lineal)[2]), 6)
# Rango observado de energía liberada (X)
x_min_obs <- round(min(TPV$energia_liberada), 2)
x_max_obs <- round(max(TPV$energia_liberada), 2)
Dominios físicos de las variables
D_X = {x ∈ R : x ≥ 0} D_Y = {y ∈ R : y ≥ 0}
Pregunta: ¿Existe algún valor del dominio de X que, al sustituirse en el modelo matemático, genere un valor de Y fuera de su dominio?
Respuesta: No.
En el modelo obtenido, el intercepto es β0 = 466.8668 y la pendiente es β1 = 0.225551. Como ambos parámetros son positivos, cualquier valor de Energía Liberada mayor o igual a cero genera una cantidad estimada de muertes positiva. Cuando Energía Liberada = 0 J, el modelo estima:
Muertes = 466.8668 muertes
Por tanto, el modelo no produce estimaciones negativas dentro del dominio físico de las variables. Sin embargo, para evitar extrapolaciones poco confiables, su aplicación práctica debe realizarse preferentemente dentro del intervalo de Energía Liberada observado en el dataset [10023.27 J, 59970.23 J].Entre la Energía Liberada y el Número de Muertes existe una relación positiva de tipo lineal, representada por el modelo:
Y = 466.8668 + 0.225551 * x
En esta ecuación, energia_liberada corresponde a la variable independiente y muertes_V a la variable dependiente. El coeficiente de correlación de Pearson de , 84.21%, % evidencia una asociación lineal fuerte, mientras que el coeficiente de determinación de , r2_val, % indica la proporción de variabilidad de muertes_V explicada por el modelo.
El filtrado mediante el rango intercuartílico redujo la influencia de valores extremos y permitió observar con mayor claridad la tendencia de los datos. Además, debido a que el intercepto y la pendiente son positivos, el modelo no genera estimaciones negativas para valores de energía liberada mayores o iguales a cero dentro del dominio físico analizado.
.