A continuación, se presenta el análisis estadístico descriptivo de la variable Fatality Count. Para obtener una visión integral del fenómeno, el estudio se ha dividido en dos fases: primero, un análisis del inventario total que incluye eventos sin víctimas (fallecidos = 0), permitiendo observar la frecuencia de ocurrencia general; y segundo, un análisis específico de letalidad que excluye los ceros, centrado exclusivamente en la magnitud del impacto de los eventos mortales.
Antes de proceder con el análisis computacional, es imperativo justificar la segmentación de la variable Fatality Count. Debido a la naturaleza estocástica de los desastres geológicos, los datos presentan un sesgo positivo extremo (asimetría a la derecha) y una curtosis elevada, lo que indica que la gran mayoría de los eventos resultan en pocas o ninguna víctima, mientras que una minoría crítica genera impactos catastróficos.
Para este estudio, se han definido los siguientes rangos de amplitud variable:
Fase 1 (Inventario Total): [0-10], [10-100], [100-200], [200-300], [>300]
Fase 2 (Eventos Mortales): [1-10], [10-100], [100-200], [200-300], [>300]
Esta agrupación no lineal es una necesidad estadística: el uso de intervalos uniformes (de igual ancho) provocaría un “aplanamiento” de la distribución, donde el 90% de la información quedaría comprimida en una sola barra, invisibilizando la variabilidad de los incidentes menores. Al ensanchar los rangos en la “cola” de la distribución, logramos otorgar visibilidad analítica a los 1,413 valores atípicos (que alcanzan hasta los 5,000 fallecidos) sin sacrificar la resolución detallada en los eventos de baja magnitud.
library(readxl)
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(e1071)
datos_nuevoartes <- read_excel("datos_nuevoartes.xlsx")
fatality <- datos_nuevoartes$fatality_count
fatality <- fatality[!is.na(fatality)]
N_total <- length(fatality)
cortes <- c(0, 10, 100, 200, 300, Inf)
Li <- cortes[-length(cortes)]
Ls <- cortes[-1]
clases_etiquetas <- c("0 - 10", "10 - 100", "100 - 200", "200 - 300", "> 300")
ni <- numeric(length(Li))
for (i in seq_along(Li)) {
if (is.infinite(Ls[i])) {
ni[i] <- sum(fatality >= Li[i])
} else if (Li[i] == 0 && Ls[i] == 1) {
ni[i] <- sum(fatality == 0)
} else if (Li[i] == 1 && Ls[i] == 2) {
ni[i] <- sum(fatality == 1)
} else {
ni[i] <- sum(fatality >= Li[i] & fatality < Ls[i])
}
}
# Marcas de Clase (Punto medio estimado para rangos representativos)
MC <- c(5, 55, 150, 250, 350)
hi <- (ni / N_total) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_dsc <- rev(cumsum(rev(hi)))
TDF_final <- data.frame(
Clase = clases_etiquetas,
Li = Li,
Ls = Ls,
MC = MC,
ni = ni,
hi = hi,
Ni_asc = Ni_asc,
Ni_dsc = Ni_dsc,
Hi_asc = Hi_asc,
Hi_dsc = Hi_dsc
)
tabla_presentacion <- TDF_final %>%
rbind(data.frame(Clase="TOTAL", Li=NA, Ls=NA, MC=NA, ni=sum(ni), hi=100,
Ni_asc=NA, Ni_dsc=NA, Hi_asc=NA, Hi_dsc=NA)) %>%
gt() %>%
tab_header(
title = md("**Tabla N° 9**"),
subtitle = md("Distribución de frecuencias del número de fallecidos
a nivel mundial")
) %>%
fmt_number(columns = c(hi, Hi_asc, Hi_dsc, MC), decimals = 2) %>%
sub_missing(columns = everything(), missing_text = "") %>%
cols_label(
Clase = "Rango",
Li = "Li",
Ls = "Ls",
MC = "MC",
ni = "ni",
hi = "hi (%)",
Ni_asc = "Ni (asc)",
Ni_dsc = "Ni (desc)",
Hi_asc = "Hi (asc %)",
Hi_dsc = "Hi (desc %)"
) %>%
tab_style(style = cell_text(weight = "bold"), locations = cells_body(rows = Clase == "TOTAL")) %>%
tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))
tabla_presentacion
| Tabla N° 9 | |||||||||
| Distribución de frecuencias del número de fallecidos a nivel mundial | |||||||||
| Rango | Li | Ls | MC | ni | hi (%) | Ni (asc) | Ni (desc) | Hi (asc %) | Hi (desc %) |
|---|---|---|---|---|---|---|---|---|---|
| 0 - 10 | 0 | 10 | 5.00 | 9197 | 95.33 | 9197 | 9648 | 95.33 | 100.00 |
| 10 - 100 | 10 | 100 | 55.00 | 418 | 4.33 | 9615 | 451 | 99.66 | 4.67 |
| 100 - 200 | 100 | 200 | 150.00 | 16 | 0.17 | 9631 | 33 | 99.82 | 0.34 |
| 200 - 300 | 200 | 300 | 250.00 | 7 | 0.07 | 9638 | 17 | 99.90 | 0.18 |
| > 300 | 300 | Inf | 350.00 | 10 | 0.10 | 9648 | 10 | 100.00 | 0.10 |
| TOTAL | 9648 | 100.00 | |||||||
| Elaborado por: Grupo 2 – Carrera de Geología | |||||||||
# --- CONFIGURACIÓN DE GRÁFICA UNIFICADA ---
# 1. Definición de márgenes y parámetros base
par(mar=c(5, 4, 4, 2))
max_ni_real <- max(ni)
# 2. Generación del Barplot
# Usamos el color Antique White (#FAEBD7) y quitamos el eje Y automático (yaxt = "n")
pos_x <- barplot(ni,
col = "grey",
border = "black",
space = 0,
las = 1,
ylim = c(0, max_ni_real),
yaxt = "n",
xaxt = "n", # Lo quitamos para ponerlo manualmente en el paso 4
main = "Gráfica 19: Distribución local de la frecuencia absoluta\ndel número de fallecidos (Eventos Mortales)",
xlab = "Número de fallecidos (Eventos Mortales)",
ylab = "Frecuencia absoluta (ni)")
# 3. Eje Y manual escalado al máximo real
# Creamos 5 divisiones exactas desde 0 hasta el máximo (9197 en tu caso)
ticks_y_ni <- round(seq(0, max_ni_real, length.out = 5), 0)
axis(side = 2, at = ticks_y_ni, labels = ticks_y_ni, las = 1)
# 4. Eje X en las intersecciones (Límites de los intervalos)
# Basado en tus nuevos cortes: 0-10, 10-100, 100-200, 200-300, 300+
etiquetas_x <- c(0, 10, 100, 200, 300, "Inf")
axis(side = 1, at = 0:length(ni), labels = etiquetas_x, cex.axis = 0.7)
# 5. Etiquetas de ni sobre cada barra
# xpd = TRUE permite que el texto se dibuje aunque esté en el límite del área de trazado
text(x = pos_x,
y = ni,
label = ni,
pos = 3, # Posición arriba
cex = 0.8, # Tamaño
font = 2, # Negrita
col = "black",
xpd = TRUE)
# Margen izquierdo ajustado para valores grandes
par(mar=c(5, 5, 4, 2))
# Definimos el tope global solicitado
n_max_global <- 9648
# 1. Ploteo Global (Eje Y hasta 9648)
pos_global_fat <- barplot(ni,
col = "grey",
border = "black",
space = 0,
las = 1,
ylim = c(0, n_max_global),
yaxt = "n",
main = "Gráfica 14: Distribución global de la frecuencia absoluta\ndel número de fallecidos a nivel mundial",
xlab = "Número de fallecidos",
ylab = "Frecuencia absoluta (ni)")
# 2. Representación manual del eje Y con el tope de 9648
ticks_y_fat <- c(0, 2000, 4000, 6000, 8000, n_max_global)
axis(side = 2, at = ticks_y_fat, labels = ticks_y_fat, las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(ni), labels = c(Li, max(Ls)), cex.axis = 0.7)
# Línea de tope global
abline(h = n_max_global, col = "red", lty = 2)
# 5. Etiquetas de ni sobre cada barra
# xpd = TRUE permite que el texto se dibuje aunque esté en el límite del área de trazado
text(x = pos_x,
y = ni,
label = ni,
pos = 3, # Posición arriba
cex = 0.8, # Tamaño
font = 2, # Negrita
col = "black",
xpd = TRUE)
par(mar=c(5, 5, 4, 2))
max_hi_fat <- max(hi)
# 1. Ploteo Local de hi
barplot(hi,
col = "#CDB79E",
border = "black",
space = 0,
las = 1,
ylim = c(0, max_hi_fat),
yaxt = "n",
main = "Gráfica 15: Distribución local de la frecuencia relativa\ndel número de fallecidos por intervalos",
xlab = "Número de fallecidos",
ylab = "Porcentaje (%)")
# 2. Eje Y manual hasta el máximo real
ticks_y_hi <- seq(0, max_hi_fat, length.out = 5)
axis(side = 2, at = ticks_y_hi, labels = round(ticks_y_hi, 2), las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(hi), labels = c(Li, max(Ls)), cex.axis = 0.7)
# Etiquetas de hi sobre cada barra
text(x = pos_x,
y = hi,
label = round(hi, 2), # Redondeamos hi a 2 decimales
pos = 3, # Posición arriba
cex = 0.8, # Tamaño
font = 2, # Negrita
col = "black",
xpd = TRUE)
par(mar=c(5, 5, 4, 2))
# 1. Ploteo Global de hi (Eje Y al 100)
barplot(hi,
col = "#CDB79E",
border = "black",
space = 0,
las = 1,
ylim = c(0, 100),
yaxt = "n",
main = "Gráfica 16: Distribución global de la frecuencia relativa\ndel número de fallecidos a nivel mundial",
xlab = "Número de fallecidos",
ylab = "Porcentaje (%)")
# 2. Eje Y manual (0% a 100%)
ticks_hi_global <- seq(0, 100, by = 20)
axis(side = 2, at = ticks_hi_global, labels = paste0(ticks_hi_global, "%"), las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(hi), labels = c(Li, max(Ls)), cex.axis = 0.7)
# Línea de referencia 100%
abline(h = 100, col = "blue", lty = 2, lwd = 1.5)
# Etiquetas de hi sobre cada barra
text(x = pos_x,
y = hi,
label = round(hi, 2), # Redondeamos hi a 2 decimales
pos = 3, # Posición arriba
cex = 0.8, # Tamaño
font = 2, # Negrita
col = "black",
xpd = TRUE)
par(mfrow = c(1, 1), mar = c(5, 4, 4, 2))
boxplot(fatality, col = "bisque", main = "Gráfica 17: Diagrama de Caja del número de
fallecidos a nivel mundial",
horizontal = TRUE, xlab = "Número de Fallecidos")
# Aumentamos el margen derecho (4to valor) para que la leyenda sea visible
par(mar = c(7, 5, 4, 11))
# Graficamos la Ojiva Ascendente
plot(1:length(ni), Ni_asc, type = "b", pch = 17, col = "black",
xaxt = "n", xlab = "", ylab = "Frecuencia Acumulada",
main = "Gráfica 18: Ojivas combinadas del número de fallecidos
a nivel mundial",
ylim = c(0, max(Ni_asc, na.rm = TRUE)))
# Graficamos la Ojiva Descendente
lines(1:length(ni), Ni_dsc, type = "b", pch = 16, col = "blue")
# Eje X con etiquetas rotadas
axis(1, at = 1:length(ni), labels = clases_etiquetas, las = 2)
mtext("Rangos", side = 1, line = 5)
# ÚNICA LEYENDA: Combinando toda la información
legend(
"topright",
inset = c(0.04, 0.04), # Se mueve a la derecha del área blanca
xpd = TRUE, # Permite que la leyenda salga del gráfico
legend = c("Ascendente (ni ≤)", "Descendente (ni ≥)"),
col = c("black", "blue"), # Colores exactos usados en plot y lines
pch = c(17, 16), # Símbolos exactos
lty = 1, # Añade la línea al símbolo en la leyenda
bty = "n", # Sin recuadro
title = "Tipo de Ojiva",
cex = 0.85 # Tamaño ajustado para visibilidad
)
x_bar <- mean(fatality)
Me <- median(fatality)
Mo <- as.numeric(names(sort(table(fatality), decreasing = TRUE)[1]))
SD <- sd(fatality)
CV <- (SD / x_bar) * 100
As <- skewness(fatality)
K <- kurtosis(fatality)
tabla_indicadores <- data.frame(
Variable = "Fatality Count",
Min = min(fatality), Max = max(fatality), Media = x_bar,
Mediana = Me, Moda = Mo, `Desv. Est.` = SD,
`CV (%)` = CV, Asimetría = As, Curtosis = K
)
tabla_indicadores_gt <- tabla_indicadores %>%
gt() %>%
tab_header(title = md("**Tabla N° 10: Indicadores Estadísticos del número
de fallecidos a nivel mundial**")) %>%
fmt_number(columns = 4:10, decimals = 2) %>%
tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))
tabla_indicadores_gt
| Tabla N° 10: Indicadores Estadísticos del número de fallecidos a nivel mundial | |||||||||
| Variable | Min | Max | Media | Mediana | Moda | Desv..Est. | CV.... | Asimetría | Curtosis |
|---|---|---|---|---|---|---|---|---|---|
| Fatality Count | 0 | 5000 | 3.22 | 0.00 | 0.00 | 59.89 | 1,860.15 | 67.58 | 5,255.77 |
| Elaborado por: Grupo 2 – Carrera de Geología | |||||||||
Q1 <- quantile(fatality, 0.25)
Q3 <- quantile(fatality, 0.75)
IQR_f <- Q3 - Q1
lim_inf <- Q1 - 1.5 * IQR_f
lim_sup <- Q3 + 1.5 * IQR_f
outliers_vec <- fatality[fatality < lim_inf | fatality > lim_sup]
tabla_outliers <- data.frame(
Variable = "Fatality Count",
Outliers_Detectados = as.character(length(outliers_vec)),
Limite_Inferior = lim_inf,
Limite_Superior = lim_sup,
Q1 = Q1, Q3 = Q3
)
tabla_outliers_gt <- tabla_outliers %>%
gt() %>%
tab_header(
title = md("**Tabla N° 11**"),
subtitle = md("Detección de outliers de la variable
número de fallecidos a nivel mundial")
) %>%
fmt_number(columns = 3:6, decimals = 2) %>%
tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))
tabla_outliers_gt
| Tabla N° 11 | |||||
| Detección de outliers de la variable número de fallecidos a nivel mundial | |||||
| Variable | Outliers_Detectados | Limite_Inferior | Limite_Superior | Q1 | Q3 |
|---|---|---|---|---|---|
| Fatality Count | 1413 | −1.50 | 2.50 | 0.00 | 1.00 |
| Elaborado por: Grupo 2 – Carrera de Geología | |||||
La variable número de fallecidos fluctua desde 0 hasta 5000, sus valores están entorno a 0, con una desviación estandar de 59.89 siendo un conjunto de valores muy heterogeneo con sesgo hacia la derecha, a excepción de 1413 valores atípicos que van desde 1 hasta 5000.
library(readxl)
library(dplyr)
library(gt)
library(e1071)
datos_nuevoartes <- read_excel("datos_nuevoartes.xlsx")
fatality_raw <- datos_nuevoartes$fatality_count
fatality_raw <- fatality_raw[!is.na(fatality_raw)]
# FILTRADO: Solo eventos con fallecidos (> 0)
fatality <- fatality_raw[fatality_raw > 0]
N_total <- length(fatality)
# Los rangos inician en 1 y se ensanchan para captar la letalidad
cortes <- c(1, 10, 100, 200, 300, Inf)
Li <- cortes[-length(cortes)]
Ls <- cortes[-1]
clases_etiquetas <- c("1 - 10", "10 - 100", "100 - 200", "200 - 300", "> 300")
ni <- numeric(length(Li))
for (i in seq_along(Li)) {
if (is.infinite(Ls[i])) {
ni[i] <- sum(fatality >= Li[i])
} else {
ni[i] <- sum(fatality >= Li[i] & fatality < Ls[i])
}
}
# Marca de Clase (MC)
MC <- c(5, 55, 150, 250, 350)
hi <- (ni / N_total) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_dsc <- rev(cumsum(rev(hi)))
TDF_final <- data.frame(
Clase = clases_etiquetas, Li = Li, Ls = Ls, MC = MC,
ni = ni, hi = hi, Ni_asc = Ni_asc, Ni_dsc = Ni_dsc,
Hi_asc = Hi_asc, Hi_dsc = Hi_dsc
)
tabla_presentacion <- TDF_final %>%
rbind(data.frame(Clase="TOTAL", Li=NA, Ls=NA, MC=NA, ni=sum(ni), hi=100,
Ni_asc=NA, Ni_dsc=NA, Hi_asc=NA, Hi_dsc=NA)) %>%
gt() %>%
tab_header(
title = md("*Tabla N° 12 (Eventos Mortales)*"),
subtitle = md("Distribución de frecuencias del número de fallecidos a nivel mundial
(sin considerar eventos sin fallecidos)")
) %>%
fmt_number(columns = c(hi, Hi_asc, Hi_dsc, MC), decimals = 2) %>%
sub_missing(columns = everything(), missing_text = "") %>%
cols_label(
Clase = "Rango", ni = "ni", hi = "hi (%)",
Ni_asc = "Ni (asc)", Ni_dsc = "Ni (desc)",
Hi_asc = "Hi (asc %)", Hi_dsc = "Hi (desc %)"
) %>%
tab_style(style = cell_text(weight = "bold"), locations = cells_body(rows = Clase == "TOTAL")) %>%
tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))
tabla_presentacion
| Tabla N° 12 (Eventos Mortales) | |||||||||
| Distribución de frecuencias del número de fallecidos a nivel mundial (sin considerar eventos sin fallecidos) | |||||||||
| Rango | Li | Ls | MC | ni | hi (%) | Ni (asc) | Ni (desc) | Hi (asc %) | Hi (desc %) |
|---|---|---|---|---|---|---|---|---|---|
| 1 - 10 | 1 | 10 | 5.00 | 1991 | 81.53 | 1991 | 2442 | 81.53 | 100.00 |
| 10 - 100 | 10 | 100 | 55.00 | 418 | 17.12 | 2409 | 451 | 98.65 | 18.47 |
| 100 - 200 | 100 | 200 | 150.00 | 16 | 0.66 | 2425 | 33 | 99.30 | 1.35 |
| 200 - 300 | 200 | 300 | 250.00 | 7 | 0.29 | 2432 | 17 | 99.59 | 0.70 |
| > 300 | 300 | Inf | 350.00 | 10 | 0.41 | 2442 | 10 | 100.00 | 0.41 |
| TOTAL | 2442 | 100.00 | |||||||
| Elaborado por: Grupo 2 – Carrera de Geología | |||||||||
# Margen estándar
par(mar=c(5, 4, 4, 2))
# 1. Definimos el máximo real de ni
max_ni_real <- max(ni)
# 2. Graficamos Local (ni) con tope en el máximo valor obtenido
pos_x <- barplot(ni,
col = "#FAEBD7",
border = "black",
space = 0,
las = 1,
ylim = c(0, max_ni_real),
yaxt = "n",
main = "Gráfica 19: Distribución local de la frecuencia absoluta\ndel número de fallecidos (Eventos Mortales)",
xlab = "Número de fallecidos (Eventos Mortales)",
ylab = "Frecuencia absoluta (ni)")
# 3. Eje Y manual hasta el máximo real (sin decimales)
ticks_y_ni <- round(seq(0, max_ni_real, length.out = 5), 0)
axis(side = 2, at = ticks_y_ni, labels = ticks_y_ni, las = 1)
# 4. Eje X en las intersecciones
etiquetas_x <- c(1, 10, 100, 200, 300, Inf)
axis(side = 1, at = 0:length(ni), labels = etiquetas_x, cex.axis = 0.7)
# 5. Etiquetas de ni sobre cada barra
# xpd = TRUE permite que el texto se dibuje aunque esté en el límite del área de trazado
text(x = pos_x,
y = ni,
label = ni,
pos = 3, # Posición arriba
cex = 0.8, # Tamaño
font = 2, # Negrita
col = "black",
xpd = TRUE)
# Margen izquierdo ajustado para legibilidad
par(mar=c(5, 5, 4, 2))
n_max_global <- 2442
# 1. Ploteo Global (Eje Y hasta 2442)
pos_global <- barplot(ni,
col = "#FAEBD7",
border = "black",
space = 0,
las = 1,
ylim = c(0, n_max_global),
yaxt = "n",
main = "Gráfica 20: Distribución global de la frecuencia absoluta\ndel número de fallecidos (Eventos Mortales)",
xlab = "Número de fallecidos (Eventos Mortales)",
ylab = "Frecuencia absoluta (ni)")
# 2. Eje Y manual con el tope de 2442
ticks_y <- c(0, 500, 1000, 1500, 2000, n_max_global)
axis(side = 2, at = ticks_y, labels = ticks_y, las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(ni), labels = etiquetas_x, cex.axis = 0.7)
# Línea de tope global
abline(h = n_max_global, col = "black", lty = 2)
# 5. Etiquetas de ni sobre cada barra
# xpd = TRUE permite que el texto se dibuje aunque esté en el límite del área de trazado
text(x = pos_x,
y = ni,
label = ni,
pos = 3, # Posición arriba
cex = 0.8, # Tamaño
font = 2, # Negrita
col = "black",
xpd = TRUE)
par(mar=c(5, 5, 4, 2))
max_hi_real <- max(hi)
# 1. Ploteo Local de hi
barplot(hi,
col = "#7FFFD4",
border = "black",
space = 0,
las = 1,
ylim = c(0, max_hi_real),
yaxt = "n",
main = "Gráfica 21: Distribución local de la frecuencia relativa\ndel número de fallecidos (Eventos Mortales)",
xlab = "Número de fallecidos (Eventos Mortales)",
ylab = "Porcentaje (%)")
# 2. Eje Y manual redondeado (quitando los 8 decimales)
ticks_y_hi <- seq(0, max_hi_real, length.out = 5)
axis(side = 2, at = ticks_y_hi, labels = round(ticks_y_hi, 2), las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(hi), labels = etiquetas_x, cex.axis = 0.7)
# Etiquetas de hi sobre cada barra
text(x = pos_x,
y = hi,
label = round(hi, 2), # Redondeamos hi a 2 decimales
pos = 3, # Posición arriba
cex = 0.8, # Tamaño
font = 2, # Negrita
col = "black",
xpd = TRUE)
par(mar=c(5, 5, 4, 2))
# 1. Ploteo Global de hi (Tope 100%)
barplot(hi,
col = "#7FFFD4",
border = "black",
space = 0,
las = 1,
ylim = c(0, 100),
yaxt = "n",
main = "Gráfica 22: Distribución global de la frecuencia relativa
del número de fallecidos (Eventos Mortales)",
xlab = "Número de fallecidos (Eventos Mortales)",
ylab = "Porcentaje (%)")
# 2. Eje Y manual (0% a 100%)
ticks_hi_global <- seq(0, 100, by = 20)
axis(side = 2, at = ticks_hi_global, labels = paste0(ticks_hi_global, "%"), las = 1)
# 3. Eje X en las intersecciones
axis(side = 1, at = 0:length(hi), labels = etiquetas_x, cex.axis = 0.7)
# Línea de referencia 100%
abline(h = 100, col = "blue", lty = 2, lwd = 1.5)
# Etiquetas de hi sobre cada barra
text(x = pos_x,
y = hi,
label = round(hi, 2), # Redondeamos hi a 2 decimales
pos = 3, # Posición arriba
cex = 0.8, # Tamaño
font = 2, # Negrita
col = "black",
xpd = TRUE)
par(mfrow = c(1, 1), mar = c(5, 4, 4, 2))
boxplot(fatality, col = "tomato", main = "Gráfica 23: Diagrama de Caja de
la variable número de fallecidos a nivel mundial (excluyendo eventos sin fallecidos)",
horizontal = TRUE, xlab = "Número de Fallecidos")
# Paso 1: Configurar márgenes amplios (Abajo, Izquierda, Arriba, Derecha)
# Aumentamos el margen derecho a 10 para dar espacio a la leyenda
par(mar = c(8, 5, 4, 10))
# Paso 2: Graficar Ojiva Ascendente (Negra)
plot(1:length(ni), Ni_asc, type = "b", pch = 17, col = "black",
xaxt = "n", xlab = "", ylab = "Frecuencia Acumulada",
main = "Gráfica 24: Ojivas combinadas de la variable número
de fallecidos a nivel mundial (excluyendo eventos sin fallecidos) ",
ylim = c(0, max(Ni_asc) * 1.05)) # Un poco de espacio arriba
# Paso 3: Graficar Ojiva Descendente (Roja)
lines(1:length(ni), Ni_dsc, type = "b", pch = 16, col = "red")
# Paso 4: Ejes y etiquetas
axis(1, at = 1:length(ni), labels = clases_etiquetas, las = 2)
mtext("Rangos de Fallecidos", side = 1, line = 6)
# Paso 5: LEYENDA (Ajustada para que no desaparezca)
# La colocamos en 'topright' pero DENTRO del área primero para probar
legend(
"topright",
inset = c(0.07, 0.07), # Si sigue sin verse, cambia esto a c(0, 0)
xpd = TRUE, # Permite dibujar fuera del recuadro
legend = c("Ascendente (ni ≤)", "Descendente (ni ≥)"),
col = c("black", "red"),
pch = c(17, 16),
lty = 1,
bty = "n", # Sin borde para que no estorbe
cex = 0.8 # Un poco más pequeña para asegurar espacio
)
x_bar <- mean(fatality)
Me <- median(fatality)
Mo <- as.numeric(names(sort(table(fatality), decreasing = TRUE)[1]))
SD <- sd(fatality)
CV <- (SD / x_bar) * 100
As <- skewness(fatality)
K <- kurtosis(fatality)
tabla_indicadores <- data.frame(
Variable = "Fatality Count",
Min = min(fatality), Max = max(fatality), Media = x_bar,
Mediana = Me, Moda = Mo, `Desv. Est.` = SD,
`CV (%)` = CV, Asimetría = As, Curtosis = K
)
tabla_indicadores_gt <- tabla_indicadores %>%
gt() %>%
tab_header(title = md("*Tabla N° 13: Indicadores estadísticos del número de fallecidos a nivel mundial (excluyendo eventos sin fallecidos)*")) %>%
fmt_number(columns = 4:10, decimals = 2)
tabla_indicadores_gt
| Tabla N° 13: Indicadores estadísticos del número de fallecidos a nivel mundial (excluyendo eventos sin fallecidos) | |||||||||
| Variable | Min | Max | Media | Mediana | Moda | Desv..Est. | CV.... | Asimetría | Curtosis |
|---|---|---|---|---|---|---|---|---|---|
| Fatality Count | 1 | 5000 | 12.72 | 3.00 | 1.00 | 118.54 | 931.99 | 34.18 | 1,339.22 |
Q1 <- quantile(fatality, 0.25)
Q3 <- quantile(fatality, 0.75)
IQR_f <- Q3 - Q1
lim_inf <- Q1 - 1.5 * IQR_f
lim_sup <- Q3 + 1.5 * IQR_f
outliers_vec <- fatality[fatality < lim_inf | fatality > lim_sup]
tabla_outliers <- data.frame(
Variable = "Fatality Count (>0)",
Outliers_Detectados = as.character(length(outliers_vec)),
Limite_Inferior = lim_inf,
Limite_Superior = lim_sup,
Q1 = Q1,
Q3 = Q3
)
tabla_outliers_gt <- tabla_outliers %>%
gt() %>%
tab_header(title = md("*Tabla N° 14: Detección de valores atípicos del número de fallecidos a nivel mundial (excluyendo eventos sin fallecidos)*")) %>%
fmt_number(columns = 3:6, decimals = 2)
tabla_outliers_gt
| Tabla N° 14: Detección de valores atípicos del número de fallecidos a nivel mundial (excluyendo eventos sin fallecidos) | |||||
| Variable | Outliers_Detectados | Limite_Inferior | Limite_Superior | Q1 | Q3 |
|---|---|---|---|---|---|
| Fatality Count (>0) | 241 | −8.00 | 16.00 | 1.00 | 7.00 |
La variable número de fallecidos (excluyendo eventos sin fallecidos) fluctua desde 1 hasta 5000, sus valores están entorno a 13 fallecidos, con una desviación estandar de 118.54 siendo un conjunto de valores muy heterogeneo con sesgo hacia la derecha, a excepción de 241 valores atípicos que van desde 7 hasta 5000.