1 Cargar Datos

Como paso previo al análisis descriptivo, es indispensable preparar el entorno de trabajo y estructurar la información. En esta sección inicial, se importan las librerías necesarias para la manipulación ágil de la información (dplyr) y para la generación de tablas con formato profesional (kableExtra). Posteriormente, se procede a la importación del conjunto de datos original, almacenando los registros en un marco de datos (dataframe) que servirá como base para los procesamientos posteriores, como el análisis de la variable de explosión.

datos <- read.csv("database-_1_.csv")
zona<-datos$Liquid.Explosion
library(dplyr)
library(knitr)
library(kableExtra)

2 Tabla de frecuencia

A continuación, se analiza la variable categórica Explosión de Líquidos, la cual indica si se produjo o no la detonación o estallido de un fluido durante el evento estudiado. Para comprender la prevalencia de este factor, se extrajeron los datos y se construyó una tabla de frecuencias absolutas y relativas. Esta distribución nos permite visualizar de manera clara la proporción de casos afirmativos frente a los negativos dentro de la muestra total, resaltando la excepcionalidad de la explosión. library(ggplot2)

datos <- datos %>%
  mutate(Liquid.Explosion = case_when(
    trimws(Liquid.Explosion) == "YES" ~ "Sí",
    trimws(Liquid.Explosion) == "NO" ~ "No",
    TRUE ~ as.character(Liquid.Explosion) 
  ))

# Ahora creamos la tabla directamente desde la variable ya traducida
freq_LE <- table(datos$Liquid.Explosion)
Tabla_LE <- as.data.frame(freq_LE)
colnames(Tabla_LE) <- c("x", "ni")
Tabla_LE$hi <- round(Tabla_LE$ni / sum(Tabla_LE$ni), 4)

# 2. Crear fila de TOTAL
fila_total_LE <- data.frame(x = "TOTAL", ni = sum(Tabla_LE$ni), hi = 1.00)
TablaFinal_LE <- rbind(Tabla_LE, fila_total_LE)

# 3. Generar tabla con formato kableExtra
TablaFinal_LE %>%
  kable(
    caption = "Tabla 1: Distribución de Frecuencias de Explosión del Líquido",
    align = "c", 
    col.names = c("Estado de Explosión", "ni", "hi")
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = F, 
    position = "center"
  ) %>%
  row_spec(0, bold = T, color = "white", background = "#2c3e50") %>% # Encabezado
  row_spec(nrow(TablaFinal_LE), bold = T, color = "white", background = "#34495e") %>% # Fila TOTAL
  column_spec(1, italic = T, border_right = T)
Tabla 1: Distribución de Frecuencias de Explosión del Líquido
Estado de Explosión ni hi
No 2780 0.9946
15 0.0054
TOTAL 2795 1.0000

3 Cantidad absoluta local de explosión líquida

Aquí se evalúa la frecuencia de los accidentes en relación con la explosión del líquido derramado, comparando visualmente los eventos en los que hubo una detonación frente a aquellos en los que no. Esta comparativa permite identificar la mínima proporción de incidentes que escalan a un escenario de estallido, lo cual es crítico para medir la efectividad de las medidas intrínsecas de contención y estabilización del producto.

library(ggplot2)
library(dplyr)

# 1. Filtramos Tabla_LE para usar solo las categorías de interés
datos_grafico <- Tabla_LE %>%
  filter(x %in% c("Sí", "No"))

# 2. Generamos la gráfica leyendo directamente las columnas 'x' y 'ni'
ggplot(datos_grafico, aes(x = x, y = ni, fill = x)) +
  geom_bar(stat = "identity", width = 0.6) +
  
  # Usamos "Sí" con tilde porque así lo definiste en tu case_when
  scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
  
  labs(
    title = "Gráfica 1: Distribución local de explosión líquida",
    x = "Explosión líquida",
    y = "Cantidad"
  ) +
  theme_classic() +
  theme(
    legend.position = "none", 
    axis.text.x = element_text(size = 12, face = "bold"), 
    plot.title = element_text(face = "bold", size = 14)
  )

4 Cantidad absoluta global de explosión líquida

Este apartado extiende el análisis de la variable a una escala global para verificar la incidencia de explosiones en las emergencias reportadas. Al observar que la tendencia de “NO” explosión es abrumadoramente mayoritaria, se puede concluir que las condiciones operativas, la rápida respuesta en campo o las propiedades fisicoquímicas del material mitigan casi por completo el riesgo de detonación en los derrames registrados.

library(ggplot2)

# 1. Filtramos Tabla_LE para usar solo las categorías "Sí" y "No"
df_grafico <- subset(Tabla_LE, x %in% c("Sí", "No"))

# 2. Generamos el gráfico usando la columna 'x' y 'ni' de Tabla_LE
grafico_barras <- ggplot(df_grafico, aes(x = reorder(x, -ni), y = ni, fill = x)) +
  geom_bar(stat = "identity", color = "black", alpha = 0.8, width = 0.6) +
  scale_y_continuous(limits = c(0, 3000)) +
  
  # Actualizamos a "Sí" con tilde y aplicamos el contraste de colores
  scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) + 
  
  theme_minimal() +
  labs(
    title = "Gráfica No 2: Distribución global de Explosión Líquida",
    x = "Estado de Explosión",
    y = "Cantidad"
  ) +
  theme(legend.position = "none",
        plot.title = element_text(hjust = 0.5, face = "bold"),
        plot.subtitle = element_text(hjust = 0.5))

# 3. Mostrar el gráfico
print(grafico_barras)

5 Cantidad relativa global de explosión líquida

Esta sección analiza la magnitud visual de los accidentes en relación con la explosión del producto o infraestructura. La gráfica revela que la inmensa mayoría de los reportes se concentran en la categoría de no explosión (“NO”), superando los 2,780 registros frente a una cantidad estadísticamente minúscula de apenas 15 casos con “SI”. Esto confirma que la explosión es un fenómeno extremadamente infrecuente dentro de la matriz general de accidentes.

library(ggplot2)
library(dplyr)

# 1. Filtramos Tabla_LE y calculamos el porcentaje usando la columna 'hi'
datos_grafico <- Tabla_LE %>%
  filter(x %in% c("Sí", "No")) %>%
  mutate(porcentaje = hi * 100)

# 2. Generamos la gráfica
ggplot(datos_grafico, aes(x = x, y = porcentaje, fill = x)) +
  
  geom_bar(stat = "identity", width = 0.6) +
  
  # Actualizamos a "Sí" con tilde y diferenciamos el color
  scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
  
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, 10)) + 
  
  labs(
    title = "Gráfica 3: Distribución relativa global de Explosión líquida",
    x = "Explosión líquida",
    y = "Porcentaje (%)"
  ) +
  
  theme_classic() +
  
  theme(
    legend.position = "none", 
    axis.text.x = element_text(size = 12, face = "bold"), 
    plot.title = element_text(face = "bold", size = 14)
  )

6 Cantidad relativa local de explosión líquida

Extraemos la variable explosión líquida, omitimos valores nulos y verificamos el tamaño muestral para asegurar la validez del estudio. El análisis porcentual indica que los incidentes que cursan sin el desarrollo de una explosión superan el 99.4% de la casuística. Esto enfatiza que el desencadenamiento de una reacción detonante, a pesar de sus gravísimas consecuencias, no forma parte del comportamiento típico de los accidentes analizados.

library(ggplot2)
library(dplyr)

# 1. Filtramos la tabla y calculamos el porcentaje (hi * 100)
datos_grafico <- Tabla_LE %>%
  filter(x %in% c("Sí", "No")) %>%                  
  mutate(hi_pct = hi * 100) 

# 2. Generamos la gráfica llamando a las columnas 'x' y 'hi_pct'
ggplot(datos_grafico, aes(x = x, y = hi_pct, fill = x)) +
  
  geom_bar(stat = "identity", width = 0.6) +
  scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
  
  labs(
    title = "Gráfica 4: Distribución relativa local de explosión líquida",
    x = "Explosión líquida",
    y = "Porcentaje (%)"
  ) +
  
  theme_classic() +
  
  theme(
    legend.position = "none", 
    axis.text.x = element_text(size = 12, face = "bold"), 
    plot.title = element_text(face = "bold", size = 14)
  )

7 Diagrama circular

El diagrama circular de esta variable resalta una distribución que acapara prácticamente la totalidad del gráfico en la categoría “NO” (casi un 100% visible). Esta visualización tan extrema confirma que la presencia de estallidos no es en absoluto el estado predominante, consolidando a la explosión líquida como una rareza máxima en la ocurrencia de los siniestros petroleros o de ductos.

library(ggplot2)
library(dplyr)

# 1. Filtramos Tabla_LE y creamos el porcentaje para el gráfico
df_clean <- Tabla_LE %>%
  filter(x %in% c("Sí", "No")) %>%
  mutate(hi_pct = round(hi * 100, 1))

# 2. Generamos el diagrama circular llamando a la columna 'x'
ggplot(df_clean, aes(x = "", y = hi_pct, fill = x)) +
  
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y", start = 0) +

  geom_text(aes(label = paste0(hi_pct, "%")), 
            position = position_stack(vjust = 0.5), 
            color = "white", fontface = "bold", size = 5) +
            
  # Aplicamos la misma paleta visual y la tilde en el "Sí"
  scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
  
  labs(title = "Gráfico 5: Distribución de Explosión líquida", fill = "Estado") +
  theme_void()

8 Indicadores Estadístico

Los indicadores de la variable muestran una moda irrefutable en el estado “NO”, con una frecuencia absoluta de 2,780 registros, frente a una cantidad insignificante de 15 casos confirmados. La altísima aglomeración de los datos en la categoría negativa indica una varianza nula y evidencia una asimetría radical, indicando estadísticamente una probabilidad remota de presenciar una explosión tras el derrame o fuga.

variable_limpia <- trimws(toupper(na.omit(datos$Liquid.Explosion)))
variable_limpia <- ifelse(variable_limpia == "YES", "SI", variable_limpia)
variable_limpia <- variable_limpia[variable_limpia %in% c("SI", "NO")]

tabla_frecuencia <- table(variable_limpia)

mas_repetido <- names(tabla_frecuencia)[which.max(tabla_frecuencia)]
cantidad <- max(tabla_frecuencia)
total_validos <- sum(tabla_frecuencia)
porcentaje <- round((cantidad / total_validos) * 100, 2)

cat("El valor que más se repite es:", mas_repetido, "\n")
## El valor que más se repite es: NO
cat("Cantidad:", cantidad, "\n")
## Cantidad: 2780
cat("Moda:", "NO", "\n")
## Moda: NO
cat("Total de casos analizados:", total_validos, "\n")
## Total de casos analizados: 2780

9 Conclusión

El modelo probabilístico muestra una densidad de masa totalmente concentrada en la ausencia de estallidos o detonaciones (\(P > 0.99\)), evidenciando un sesgo asimétrico aún más extremo que en otros indicadores de severidad. Esta abrumadora saturación del espacio muestral en la categoría “NO” confirma que la siniestralidad asociada a la explosión de líquidos es un fenómeno estocástico de suma rareza, constituyendo un evento aislado y atípico dentro de la dinámica global de fallos e incidentes reportados.