1. Carga de Datos y librerías
# Carga de librerías necesarias
library(knitr)
library(scales)

# setwd("C:/Users/ronal/OneDrive/Desktop") # Ajustar si es necesario
datos <- read.csv("database (1).csv", header = TRUE, sep = ",", dec = ".")

# Extracción y limpieza de la variable
variable_exp <- na.omit(datos$Liquid.Explosion)
  1. Análisis de Frecuencias
# 3. Cálculo de Frecuencias
ni_exp <- table(na.omit(datos$Liquid.Explosion))
hi_exp <- prop.table(ni_exp) * 100

# Creación del Data Frame
tabla_exp_final <- data.frame(
  Estado = names(ni_exp),
  ni = as.vector(ni_exp),
  hi = as.vector(round(hi_exp, 2))  
)

# Crear la fila de TOTAL
fila_total <- data.frame(
  Estado = "**Total**",
  ni = sum(tabla_exp_final$ni),
  hi = sum(tabla_exp_final$hi)     
)

# Tabla final unida
tabla_exp_final <- rbind(tabla_exp_final, fila_total)
tabla_exp_final$hi <- paste0(tabla_exp_final$hi, "%")

colnames(tabla_exp_final) <- c("¿Hubo Explosión?", 
                               "Frecuencia Absoluta (ni)", 
                               "Frecuencia Relativa (hi)")

kable(tabla_exp_final, align = "c", caption = "Tabla No. 1: Análisis de Frecuencias para Explosiones líquidas.")
Tabla No. 1: Análisis de Frecuencias para Explosiones líquidas.
¿Hubo Explosión? Frecuencia Absoluta (ni) Frecuencia Relativa (hi)
NO 2780 99.46%
YES 15 0.54%
Total 2795 100%
  1. Gráficas de Barras
par(mfrow = c(1, 2))

# Gráfica No. 1: Distribución Global
barplot(ni_exp, 
        main = " Distribución Global",
        xlab = "¿Explosión?", ylab = "Cantidad",
        col = "gray80", border = "black",
        ylim = c(0, max(ni_exp) * 1.2))

# Gráfica No. 2: Distribución Local (Zoom 90%)
umbral_90 <- quantile(datos$All.Costs[datos$All.Costs > 0], 0.90, na.rm = TRUE)
datos_local <- datos[datos$All.Costs <= umbral_90 & !is.na(datos$All.Costs), ]
ni_local <- table(na.omit(datos_local$Liquid.Explosion))

barplot(ni_local, 
        main = "  Distribución Local ",
        xlab = "¿Explosión?", ylab = "Cantidad",
        col = "gray40", border = "black",
        ylim = c(0, max(ni_local) * 1.2))

par(mfrow = c(1, 2))

# Gráfica No. 3: Global Porcentual
hi_global <- prop.table(table(na.omit(datos$Liquid.Explosion))) * 100
bp_g <- barplot(hi_global, main = "Global %",
                ylab = "Porcentaje (%)", col = "gray90", ylim = c(0, 110))
text(x = bp_g, y = hi_global, label = paste0(round(hi_global, 2), "%"), pos = 3, font = 2)

# Gráfica No. 4: Local Porcentual
hi_local <- prop.table(ni_local) * 100
bp_l <- barplot(hi_local, main = "Local %",
                ylab = "Porcentaje (%)", col = "gray60", ylim = c(0, 110))
text(x = bp_l, y = hi_local, label = paste0(round(hi_local, 2), "%"), pos = 3, font = 2)

  1. Diagrama Circular
par(mfrow = c(1, 1))
TablaExp_Global <- data.frame(Categoría = names(ni_exp), hi_porc = as.vector(hi_exp))
colores_grises <- gray.colors(length(TablaExp_Global$Categoría), start = 0.4, end = 0.9)

pie(TablaExp_Global$hi_porc, labels = NA, radius = 1,  
    main = "Gráfica No. 5: Porcentaje de Explosiones Líquidas", 
    col = colores_grises)

legend("topright", legend = paste(TablaExp_Global$Categoría, ": ", round(TablaExp_Global$hi_porc, 2), "%"),
       fill = colores_grises, cex = 1, title = "¿Hubo explosión?")

  1. Medidas de Tendencia Central o Moda
tabla_frec_exp <- table(na.omit(datos$Liquid.Explosion))
moda_valor <- names(tabla_frec_exp)[which.max(tabla_frec_exp)]
frecuencia_moda <- max(tabla_frec_exp)

cat("La moda de la variable es:", moda_valor, "\n")
## La moda de la variable es: NO

CONCLUSIONES

Valor más frecuente de la variable Liquid Explosion es ‘NO’.con un total de 2,780 registros. Esto representa aproximadamente el 99.46% de los casos, indicando que las explosiones líquidas son eventos extremadamente inusuales.”