CARRERA DE GEOLOGÍA
GRUPO N°2
ANÁLISIS ESTADÍSTICO MULTIVARIABLE
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")
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
# 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
#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
# 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 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 N°1 | ||
| Primeros 10 pares de valores para la regresión exponencial | ||
| N° | 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 |
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"
)
# 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
# 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 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. |
# 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