ANÁLISIS ESTADÍSTICO DE VOLCANES ACTIVOS A NIVEL GLOBAL
REGRESION EXPONENCIAL

CARRERA DE GEOLOGÍA

GRUPO N°2

ANÁLISIS ESTADÍSTICO MULTIVARIABLE

CARGA DE LIBRERIAS Y DATOS

Carga de librerias

library("readr")
library("dplyr")
## 
## 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
library("gt")
library("knitr")

Lectura del dataset

Volcanes_Globales <- read_delim(
  "global_volcano_eruption_intelligence.csv",
  delim = ";",
  locale = locale(encoding = "UTF-8")
)
## Rows: 898 Columns: 77
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (26): volcanoLocationNum, volcano_name, location_description, country, v...
## dbl (43): noaa_event_id, year, month, day, linked_tsunami_event_id, linked_e...
## num  (1): ejecta_volume_km3_min
## lgl  (7): is_significant, publish, is_eruption, tsunami_confirmed, ring_of_f...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Variables
imp_h <- Volcanes_Globales$human_impact_score
Num_V <- Volcanes_Globales$volcano_eruption_count_in_dataset

SELECCION VARIABLE

# Variable Independiente (X)
num_erupciones <- Num_V

# Variable Dependiente (Y)
impacto_humano <- Impacto_H

# Construcción del dataset
TPV_inicial <- data.frame(
  num_erupciones = num_erupciones,
  impacto_humano = impacto_humano
)

# Eliminar valores faltantes
TPV_inicial <- na.omit(TPV_inicial)

# Mantener únicamente valores válidos
TPV_inicial <- TPV_inicial[
  TPV_inicial$num_erupciones >= 0 &
    TPV_inicial$impacto_humano >= 0,
]

# Número total de observaciones

total_inicial <- nrow(TPV_inicial)
total_inicial
## [1] 898

TRATAMIENDO DE DATOS

#Límites por percentiles para Número de erupciones (X)
limite_inf_x <- quantile(
  TPV_inicial$num_erupciones,
  0.01
)

limite_sup_x <- quantile(
  TPV_inicial$num_erupciones,
  0.99
)

# Límites por percentiles para Impacto humano (Y)
limite_inf_y <- quantile(
  TPV_inicial$impacto_humano,
  0.01
)

limite_sup_y <- quantile(
  TPV_inicial$impacto_humano,
  0.99
)

# Aplicación del filtro suave
TPV_sin_outliers <- TPV_inicial %>%
  filter(
    num_erupciones >= limite_inf_x &
      num_erupciones <= limite_sup_x
  ) %>%
  filter(
    impacto_humano >= limite_inf_y &
      impacto_humano <= limite_sup_y
  )

# Cantidad final de datos
total_restante_outliers <- nrow(TPV_sin_outliers)

# Cantidad de datos eliminados
outliers_encontrados <- total_inicial - total_restante_outliers

# Resultados
total_restante_outliers
## [1] 881
outliers_encontrados
## [1] 17

Uso media aritmetica

# Conservamos los datos individuales después del filtro IQR
TPV <- TPV_sin_outliers

# Reiniciar índices
row.names(TPV) <- NULL

# Agregar número de registro
TPV_final_id <- cbind(
  Nro = 1:nrow(TPV),
  TPV
)


# Variable de control de reducción por media
valores_consolidados_media <- 0

Outliers encontrados y reduccion de filas

# Outliers eliminados mediante IQR
outliers_encontrados <- total_inicial - nrow(TPV_sin_outliers)
outliers_encontrados
## [1] 17
# Reducción de filas por media aritmética
reduccion_media <- nrow(TPV_sin_outliers) - nrow(TPV)
reduccion_media
## [1] 0
# Total de pares de datos disponibles para la regresión
total_pares <- nrow(TPV)
total_pares
## [1] 881

TABLA DE PARES DE VALORES

TABLA N°1
Primeros 10 pares de valores para la regresión exponencial
Número de erupciones (X) Impacto humano (Y)
1 1 1.08
2 1 1.91
3 1 6.38
4 4 3.73
5 9 6.80
6 6 8.81
7 18 20.23
8 2 1.29
9 1 0.76
10 4 2.44

DIAGRAMA DE DISPERSIÓN

Diagrama de dispersion original

Diagrama de dispersion post filtrado

plot(
  TPV$num_erupciones,
  TPV$impacto_humano,
  pch = 16,
  col = rgb(0, 0, 0.8),
  main = "Gráfica Nº1: Diagrama de Dispersión entre el Número\nde Erupciones y el Puntaje de Impacto Humano (Sin Outliers)",
  xlab = "Número de erupciones volcánicas (X)",
  ylab = "Puntaje de impacto humano (Y)"
)

box(
  which = "outer",
  col = "black"
)

CONJETURA DEL MODELO

DEBIDO A LA SIMILITUD VISUAL EN LA NUBE DE PUNTOS CONJETURAMOS UN MODELO EXPONENCIAL

PARAMETROS

Parametros del modelo

# Transformación exponencial (Logaritmo natural del impacto humano)
y1 <- log(TPV$impacto_humano)

# Variable independiente
x <- TPV$num_erupciones


# ==============================================================================
# CÁLCULO DE PARÁMETROS
# ==============================================================================
# Regresión linealizada
regresion_exponencial <- lm(
  y1 ~ x
)

# Intercepto beta0
beta0 <- coef(regresion_exponencial)[1]

# Transformación a escala original
a <- exp(beta0)

# Pendiente del modelo
b <- coef(regresion_exponencial)[2]

# ==============================================================================
# RESULTADOS
# ==============================================================================
cat(
  "--- Parámetros Calculados del Modelo Exponencial ---\n"
)
## --- Parámetros Calculados del Modelo Exponencial ---
cat(
  "Parámetro a (Intercepto original):",
  round(a,5),
  "\n"
)
## Parámetro a (Intercepto original): 1.88767
cat(
  "Parámetro b (Pendiente):",
  round(b,5),
  "\n\n"
)
## Parámetro b (Pendiente): 0.12705

MODELO Y DEALIDAD

Comparación de la realidad con el modelo de regresión lineal

TEST DE BONDAD

Test de Pearson

# Coeficiente de Pearson entre X y la variable Y transformada con ln()
r <- cor(x, y1)

# Multiplicamos por 100 para obtener el porcentaje
r * 100
## [1] 82.62227

RESTRICCIONES

Análisis

Restricciones matemáticas del modelo exponencial
Modelo: Y = 1.89 · e^(0.12705x)
Punto evaluado Procedimiento matemático Resultado Conclusión
1. Igualación a cero 1.89e^(0.12705x)=0 → x→-∞ x = -∞ El modelo nunca alcanza Y=0; solo se aproxima al eje X.
2. - - - -.
3. Dominio del x x ∈ (0,+∞) (0 , +∞) La variable independiente puede tomar cualquier valor real positivo.
4. Dominio del y Y ∈ (0,+∞) (0 , +∞) La variable dependiente siempre presenta valores positivos.

CALCULO DE ESTIMACIÓN

Pregunta

# Valor de número de erupciones para la estimación
x_pronostico <- 10


# Extraemos los parámetros reales del modelo exponencial
beta0 <- coef(regresion_exponencial)[1]

a <- exp(beta0)

b <- coef(regresion_exponencial)[2]


# Cálculo del impacto humano esperado
impacto_esperado <- a * exp(b * x_pronostico)


# Mostrar resultado
cat(
  "Para un número de",
  x_pronostico,
  "erupciones volcánicas, el impacto humano esperado es:\n"
)
## Para un número de 10 erupciones volcánicas, el impacto humano esperado es:
print(impacto_esperado)
## (Intercept) 
##    6.724876

CONCLUSIÓN